jellyfish-1.1.11/0000755015303500042660000000000012200542320010564 500000000000000jellyfish-1.1.11/aclocal.m40000644015303500042660000011002212200542302012340 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) jellyfish-1.1.11/HalfLICENSE0000644015303500042660000000324112151455365012325 00000000000000Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. Portions contributed and copyright held by others as indicated. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Industrial Light & Magic nor the names of any other contributors to this software may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. jellyfish-1.1.11/depcomp0000755015303500042660000005064312200542305012074 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: jellyfish-1.1.11/jellyfish-1.1.pc.in0000644015303500042660000000042612151455365013746 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Jellyfish Description: A multi-threaded hash based k-mer counter. Version: @PACKAGE_VERSION@ Libs: -L${libdir} -ljellyfish-1.1 -lpthread Cflags: -I${includedir}/jellyfish-@PACKAGE_VERSION@ jellyfish-1.1.11/jellyfish/0000755015303500042660000000000012200542320012555 500000000000000jellyfish-1.1.11/jellyfish/atomic_gcc.hpp0000644015303500042660000000346612151455365015330 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_ATOMIC_GCC_HPP__ #define __JELLYFISH_ATOMIC_GCC_HPP__ namespace atomic { class gcc { public: template static inline T cas(volatile T *ptr, T oval, T nval) { return __sync_val_compare_and_swap(ptr, oval, nval); } template static inline T set(T *ptr, T nval) { return __sync_lock_test_and_set(ptr, nval); } template static inline T add_fetch(volatile T *ptr, T x) { T ncount = *ptr, count; do { count = ncount; ncount = cas((T *)ptr, count, count + x); } while(ncount != count); return count + x; } template static inline T fetch_add(volatile T *ptr, T x) { T ncount = *ptr, count; do { count = ncount; ncount = cas((T *)ptr, count, count + x); } while(ncount != count); return count; } template static inline T set_to_max(volatile T *ptr, T x) { T count = *ptr; while(x > count) { T ncount = cas(ptr, count, x); if(ncount == count) return x; count = ncount; } return count; } }; } #endif jellyfish-1.1.11/jellyfish/misc.hpp0000644015303500042660000001053012151455365014161 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_MISC_HPP__ #define __JELLYFISH_MISC_HPP__ #include #include #include #include #include #include #include #include #include #include #include #include #include #define bsizeof(v) (8 * sizeof(v)) typedef uint_fast64_t uint_t; //#define UINT_C(x) #define PRIUINTu PRIuFAST64 #define PRIUINTx PRIxFAST64 inline int leading_zeroes(int x) { return __builtin_clz(x); } // CLK inline int leading_zeroes(unsigned int x) { return __builtin_clz(x); } inline int leading_zeroes(unsigned long x) { return __builtin_clzl(x); } inline int leading_zeroes(unsigned long long x) { return __builtin_clzll(x); } template unsigned int floorLog2(T n) { return sizeof(T) * 8 - 1 - leading_zeroes(n); } template uint_t ceilLog2(T n) { uint_t r = floorLog2(n); return n > (((T)1) << r) ? r + 1 : r; } template T div_ceil(T a, T b) { T q = a / b; return a % b == 0 ? q : q + 1; } template uint_t bitsize(T n) { return floorLog2(n) + 1; } inline uint32_t reverse_bits(uint32_t v) { // swap odd and even bits v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1); // swap consecutive pairs v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2); // swap nibbles ... v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4); // swap bytes v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8); // swap 2-byte long pairs v = ( v >> 16 ) | ( v << 16); return v; } inline uint64_t reverse_bits(uint64_t v) { v = ((v >> 1) & 0x5555555555555555UL) | ((v & 0x5555555555555555UL) << 1); v = ((v >> 2) & 0x3333333333333333UL) | ((v & 0x3333333333333333UL) << 2); v = ((v >> 4) & 0x0F0F0F0F0F0F0F0FUL) | ((v & 0x0F0F0F0F0F0F0F0FUL) << 4); v = ((v >> 8) & 0x00FF00FF00FF00FFUL) | ((v & 0x00FF00FF00FF00FFUL) << 8); v = ((v >> 16) & 0x0000FFFF0000FFFFUL) | ((v & 0x0000FFFF0000FFFFUL) << 16); v = ( v >> 32 ) | ( v << 32); return v; } uint64_t bogus_sum(void *data, size_t len); template size_t bits_to_bytes(T bits) { return (size_t)((bits / 8) + (bits % 8 != 0)); } template union Tptr { void *v; T *t; }; template T *calloc_align(size_t nmemb, size_t alignment) { Tptr ptr; if(posix_memalign(&ptr.v, alignment, sizeof(T) * nmemb) < 0) throw std::bad_alloc(); return ptr.t; } /* Be pedantic about memory access. Any misaligned access will * generate a BUS error. */ void disabled_misaligned_mem_access(); /* Raison d'etre of this version of mem_copy: It seems we have slow * down due to misaligned cache accesses. glibc memcpy does unaligned * memory accesses and crashes when they are disabled. This version * does only aligned memory access (see above). */ template void mem_copy(char *dest, const char *src, const T &len) { // dumb copying char by char for(T i = (T)0; i < len; ++i) *dest++ = *src++; } /* Slice a large number (total) in almost equal parts. return [start, end) corresponding to the ith part (0 <= i < number_of_slices) */ template std::pair slice(T i, T number_of_slices, T total) { if(number_of_slices > 1) --number_of_slices; T slice_size = total / number_of_slices; T slice_remain = total % number_of_slices; T start = std::min(total, i * slice_size + i * slice_remain / number_of_slices); T end = std::min(total, (i + 1) * slice_size + (i + 1) * slice_remain / number_of_slices); return std::make_pair(start, end); } std::streamoff get_file_size(std::istream& is); #endif // __MISC_HPP__ jellyfish-1.1.11/jellyfish/file_parser.hpp0000644015303500042660000000524712151455365015532 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_FILE_PARSER_HPP__ #define __JELLYFISH_FILE_PARSER_HPP__ #include #include #include #include #include #include namespace jellyfish { class file_parser { int _fd; int _base, _pbase; char *_buffer; const char *_end_buffer; const char *_data; const char *_end_data; size_t _size; bool _is_mmapped; static bool _do_mmap; static bool _force_mmap; protected: define_error_class(FileParserError); // Get next character in "stream" inline int sbumpc() { _pbase = _base; if(_data >= _end_data) if(!read_next_buffer()) return _base = _eof; return (_base = *_data++); } int speekc() { if(_data >= _end_data) if(!read_next_buffer()) return _eof; return *_data; } public: static const size_t _buff_size = 1024 * 1024; static const int _eof = -1; // [str, str+len) is content on initial buffer file_parser(int fd, const char *path, const char *str, size_t len, char pbase = '\n'); ~file_parser(); static bool do_mmap() { return _do_mmap; }; static bool do_mmap(bool new_value) { bool oval = _do_mmap; _do_mmap = new_value; return oval; } // throw an error if mmap fails static bool force_mmap(); static bool force_mmap(bool new_value); static int file_peek(const char *path, char *peek); // current base and previous base int base() const { return _base; } int pbase() const { return _pbase; } bool eof() const { return _base == _eof; } // ptr to base. Valid only for mmaped files const char *ptr() const { return _data; } const char *base_ptr() const { return _data - 1; } const char *pbase_ptr() const { return _data; } private: // Buffers next chunk of data. Returns _eof if at end of file or next character bool read_next_buffer(); }; } #endif jellyfish-1.1.11/jellyfish/half.h0000644015303500042660000004246012151455365013607 00000000000000/////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas // Digital Ltd. LLC // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Industrial Light & Magic nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////// // Primary authors: // Florian Kainz // Rod Bogart //--------------------------------------------------------------------------- // // half -- a 16-bit floating point number class: // // Type half can represent positive and negative numbers whose // magnitude is between roughly 6.1e-5 and 6.5e+4 with a relative // error of 9.8e-4; numbers smaller than 6.1e-5 can be represented // with an absolute error of 6.0e-8. All integers from -2048 to // +2048 can be represented exactly. // // Type half behaves (almost) like the built-in C++ floating point // types. In arithmetic expressions, half, float and double can be // mixed freely. Here are a few examples: // // half a (3.5); // float b (a + sqrt (a)); // a += b; // b += a; // b = a + 7; // // Conversions from half to float are lossless; all half numbers // are exactly representable as floats. // // Conversions from float to half may not preserve a float's value // exactly. If a float is not representable as a half, then the // float value is rounded to the nearest representable half. If a // float value is exactly in the middle between the two closest // representable half values, then the float value is rounded to // the closest half whose least significant bit is zero. // // Overflows during float-to-half conversions cause arithmetic // exceptions. An overflow occurs when the float value to be // converted is too large to be represented as a half, or if the // float value is an infinity or a NAN. // // The implementation of type half makes the following assumptions // about the implementation of the built-in C++ types: // // float is an IEEE 754 single-precision number // sizeof (float) == 4 // sizeof (unsigned int) == sizeof (float) // alignof (unsigned int) == alignof (float) // sizeof (unsigned short) == 2 // //--------------------------------------------------------------------------- #ifndef _HALF_H_ #define _HALF_H_ #include #if defined(OPENEXR_DLL) #if defined(HALF_EXPORTS) #define HALF_EXPORT __declspec(dllexport) #else #define HALF_EXPORT __declspec(dllimport) #endif #define HALF_EXPORT_CONST #else #define HALF_EXPORT #define HALF_EXPORT_CONST const #endif class HALF_EXPORT half { public: //------------- // Constructors //------------- half (); // no initialization explicit half (float f); //-------------------- // Conversion to float //-------------------- operator float () const; //------------ // Unary minus //------------ half operator - () const; //----------- // Assignment //----------- half & operator = (half h); half & operator = (float f); half & operator += (half h); half & operator += (float f); half & operator -= (half h); half & operator -= (float f); half & operator *= (half h); half & operator *= (float f); half & operator /= (half h); half & operator /= (float f); //--------------------------------------------------------- // Round to n-bit precision (n should be between 0 and 10). // After rounding, the significand's 10-n least significant // bits will be zero. //--------------------------------------------------------- half round (unsigned int n) const; //-------------------------------------------------------------------- // Classification: // // h.isFinite() returns true if h is a normalized number, // a denormalized number or zero // // h.isNormalized() returns true if h is a normalized number // // h.isDenormalized() returns true if h is a denormalized number // // h.isZero() returns true if h is zero // // h.isNan() returns true if h is a NAN // // h.isInfinity() returns true if h is a positive // or a negative infinity // // h.isNegative() returns true if the sign bit of h // is set (negative) //-------------------------------------------------------------------- bool isFinite () const; bool isNormalized () const; bool isDenormalized () const; bool isZero () const; bool isNan () const; bool isInfinity () const; bool isNegative () const; //-------------------------------------------- // Special values // // posInf() returns +infinity // // negInf() returns -infinity // // qNan() returns a NAN with the bit // pattern 0111111111111111 // // sNan() returns a NAN with the bit // pattern 0111110111111111 //-------------------------------------------- static half posInf (); static half negInf (); static half qNan (); static half sNan (); //-------------------------------------- // Access to the internal representation //-------------------------------------- unsigned short bits () const; void setBits (unsigned short bits); public: union uif { unsigned int i; float f; }; private: static short convert (int i); static float overflow (); unsigned short _h; static HALF_EXPORT_CONST uif _toFloat[1 << 16]; static HALF_EXPORT_CONST unsigned short _eLut[1 << 9]; }; //----------- // Stream I/O //----------- HALF_EXPORT std::ostream & operator << (std::ostream &os, half h); HALF_EXPORT std::istream & operator >> (std::istream &is, half &h); //---------- // Debugging //---------- HALF_EXPORT void printBits (std::ostream &os, half h); HALF_EXPORT void printBits (std::ostream &os, float f); HALF_EXPORT void printBits (char c[19], half h); HALF_EXPORT void printBits (char c[35], float f); //------------------------------------------------------------------------- // Limits // // Visual C++ will complain if HALF_MIN, HALF_NRM_MIN etc. are not float // constants, but at least one other compiler (gcc 2.96) produces incorrect // results if they are. //------------------------------------------------------------------------- #if (defined _WIN32 || defined _WIN64) && defined _MSC_VER #define HALF_MIN 5.96046448e-08f // Smallest positive half #define HALF_NRM_MIN 6.10351562e-05f // Smallest positive normalized half #define HALF_MAX 65504.0f // Largest positive half #define HALF_EPSILON 0.00097656f // Smallest positive e for which // half (1.0 + e) != half (1.0) #else #define HALF_MIN 5.96046448e-08 // Smallest positive half #define HALF_NRM_MIN 6.10351562e-05 // Smallest positive normalized half #define HALF_MAX 65504.0 // Largest positive half #define HALF_EPSILON 0.00097656 // Smallest positive e for which // half (1.0 + e) != half (1.0) #endif #define HALF_MANT_DIG 11 // Number of digits in mantissa // (significand + hidden leading 1) #define HALF_DIG 2 // Number of base 10 digits that // can be represented without change #define HALF_RADIX 2 // Base of the exponent #define HALF_MIN_EXP -13 // Minimum negative integer such that // HALF_RADIX raised to the power of // one less than that integer is a // normalized half #define HALF_MAX_EXP 16 // Maximum positive integer such that // HALF_RADIX raised to the power of // one less than that integer is a // normalized half #define HALF_MIN_10_EXP -4 // Minimum positive integer such // that 10 raised to that power is // a normalized half #define HALF_MAX_10_EXP 4 // Maximum positive integer such // that 10 raised to that power is // a normalized half //--------------------------------------------------------------------------- // // Implementation -- // // Representation of a float: // // We assume that a float, f, is an IEEE 754 single-precision // floating point number, whose bits are arranged as follows: // // 31 (msb) // | // | 30 23 // | | | // | | | 22 0 (lsb) // | | | | | // X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX // // s e m // // S is the sign-bit, e is the exponent and m is the significand. // // If e is between 1 and 254, f is a normalized number: // // s e-127 // f = (-1) * 2 * 1.m // // If e is 0, and m is not zero, f is a denormalized number: // // s -126 // f = (-1) * 2 * 0.m // // If e and m are both zero, f is zero: // // f = 0.0 // // If e is 255, f is an "infinity" or "not a number" (NAN), // depending on whether m is zero or not. // // Examples: // // 0 00000000 00000000000000000000000 = 0.0 // 0 01111110 00000000000000000000000 = 0.5 // 0 01111111 00000000000000000000000 = 1.0 // 0 10000000 00000000000000000000000 = 2.0 // 0 10000000 10000000000000000000000 = 3.0 // 1 10000101 11110000010000000000000 = -124.0625 // 0 11111111 00000000000000000000000 = +infinity // 1 11111111 00000000000000000000000 = -infinity // 0 11111111 10000000000000000000000 = NAN // 1 11111111 11111111111111111111111 = NAN // // Representation of a half: // // Here is the bit-layout for a half number, h: // // 15 (msb) // | // | 14 10 // | | | // | | | 9 0 (lsb) // | | | | | // X XXXXX XXXXXXXXXX // // s e m // // S is the sign-bit, e is the exponent and m is the significand. // // If e is between 1 and 30, h is a normalized number: // // s e-15 // h = (-1) * 2 * 1.m // // If e is 0, and m is not zero, h is a denormalized number: // // S -14 // h = (-1) * 2 * 0.m // // If e and m are both zero, h is zero: // // h = 0.0 // // If e is 31, h is an "infinity" or "not a number" (NAN), // depending on whether m is zero or not. // // Examples: // // 0 00000 0000000000 = 0.0 // 0 01110 0000000000 = 0.5 // 0 01111 0000000000 = 1.0 // 0 10000 0000000000 = 2.0 // 0 10000 1000000000 = 3.0 // 1 10101 1111000001 = -124.0625 // 0 11111 0000000000 = +infinity // 1 11111 0000000000 = -infinity // 0 11111 1000000000 = NAN // 1 11111 1111111111 = NAN // // Conversion: // // Converting from a float to a half requires some non-trivial bit // manipulations. In some cases, this makes conversion relatively // slow, but the most common case is accelerated via table lookups. // // Converting back from a half to a float is easier because we don't // have to do any rounding. In addition, there are only 65536 // different half numbers; we can convert each of those numbers once // and store the results in a table. Later, all conversions can be // done using only simple table lookups. // //--------------------------------------------------------------------------- //-------------------- // Simple constructors //-------------------- inline half::half () : _h(0) { // no initialization } //---------------------------- // Half-from-float constructor //---------------------------- inline half::half (float f) { uif x; x.f = f; if (f == 0) { // // Common special case - zero. // Preserve the zero's sign bit. // _h = (x.i >> 16); } else { // // We extract the combined sign and exponent, e, from our // floating-point number, f. Then we convert e to the sign // and exponent of the half number via a table lookup. // // For the most common case, where a normalized half is produced, // the table lookup returns a non-zero value; in this case, all // we have to do is round f's significand to 10 bits and combine // the result with e. // // For all other cases (overflow, zeroes, denormalized numbers // resulting from underflow, infinities and NANs), the table // lookup returns zero, and we call a longer, non-inline function // to do the float-to-half conversion. // register int e = (x.i >> 23) & 0x000001ff; e = _eLut[e]; if (e) { // // Simple case - round the significand, m, to 10 // bits and combine it with the sign and exponent. // register int m = x.i & 0x007fffff; _h = e + ((m + 0x00000fff + ((m >> 13) & 1)) >> 13); } else { // // Difficult case - call a function. // _h = convert (x.i); } } } //------------------------------------------ // Half-to-float conversion via table lookup //------------------------------------------ inline half::operator float () const { return _toFloat[_h].f; } //------------------------- // Round to n-bit precision //------------------------- inline half half::round (unsigned int n) const { // // Parameter check. // if (n >= 10) return *this; // // Disassemble h into the sign, s, // and the combined exponent and significand, e. // unsigned short s = _h & 0x8000; unsigned short e = _h & 0x7fff; // // Round the exponent and significand to the nearest value // where ones occur only in the (10-n) most significant bits. // Note that the exponent adjusts automatically if rounding // up causes the significand to overflow. // e >>= 9 - n; e += e & 1; e <<= 9 - n; // // Check for exponent overflow. // if (e >= 0x7c00) { // // Overflow occurred -- truncate instead of rounding. // e = _h; e >>= 10 - n; e <<= 10 - n; } // // Put the original sign bit back. // half h; h._h = s | e; return h; } //----------------------- // Other inline functions //----------------------- inline half half::operator - () const { half h; h._h = _h ^ 0x8000; return h; } inline half & half::operator = (half h) { _h = h._h; return *this; } inline half & half::operator = (float f) { *this = half (f); return *this; } inline half & half::operator += (half h) { *this = half (float (*this) + float (h)); return *this; } inline half & half::operator += (float f) { *this = half (float (*this) + f); return *this; } inline half & half::operator -= (half h) { *this = half (float (*this) - float (h)); return *this; } inline half & half::operator -= (float f) { *this = half (float (*this) - f); return *this; } inline half & half::operator *= (half h) { *this = half (float (*this) * float (h)); return *this; } inline half & half::operator *= (float f) { *this = half (float (*this) * f); return *this; } inline half & half::operator /= (half h) { *this = half (float (*this) / float (h)); return *this; } inline half & half::operator /= (float f) { *this = half (float (*this) / f); return *this; } inline bool half::isFinite () const { unsigned short e = (_h >> 10) & 0x001f; return e < 31; } inline bool half::isNormalized () const { unsigned short e = (_h >> 10) & 0x001f; return e > 0 && e < 31; } inline bool half::isDenormalized () const { unsigned short e = (_h >> 10) & 0x001f; unsigned short m = _h & 0x3ff; return e == 0 && m != 0; } inline bool half::isZero () const { return (_h & 0x7fff) == 0; } inline bool half::isNan () const { unsigned short e = (_h >> 10) & 0x001f; unsigned short m = _h & 0x3ff; return e == 31 && m != 0; } inline bool half::isInfinity () const { unsigned short e = (_h >> 10) & 0x001f; unsigned short m = _h & 0x3ff; return e == 31 && m == 0; } inline bool half::isNegative () const { return (_h & 0x8000) != 0; } inline half half::posInf () { half h; h._h = 0x7c00; return h; } inline half half::negInf () { half h; h._h = 0xfc00; return h; } inline half half::qNan () { half h; h._h = 0x7fff; return h; } inline half half::sNan () { half h; h._h = 0x7dff; return h; } inline unsigned short half::bits () const { return _h; } inline void half::setBits (unsigned short bits) { _h = bits; } #endif jellyfish-1.1.11/jellyfish/histo_fastq_main_cmdline.hpp0000644015303500042660000001142512151455365020255 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __HISTO_FASTQ_MAIN_ARGS_HPP__ #define __HISTO_FASTQ_MAIN_ARGS_HPP__ #include class histo_fastq_main_args { public: double low_arg; bool low_given; double high_arg; bool high_given; double increment_arg; bool increment_given; bool full_flag; const char * db_arg; enum { USAGE_OPT = 1000, HELP_OPT }; histo_fastq_main_args() : low_arg(0.0), low_given(false), high_arg(10000.0), high_given(false), increment_arg(1.0), increment_given(false), full_flag(false) { } histo_fastq_main_args(int argc, char* argv[]) : low_arg(0.0), low_given(false), high_arg(10000.0), high_given(false), increment_arg(1.0), increment_given(false), full_flag(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"low", 1, 0, 'l'}, {"high", 1, 0, 'h'}, {"increment", 1, 0, 'i'}, {"full", 0, 0, 'f'}, {"help", 0, 0, HELP_OPT}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "Vl:h:i:f"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case HELP_OPT: std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 'l': low_given = true; low_arg = yaggo::conv_double((const char *)optarg, err, false); CHECK_ERR(double_t, optarg, "-l, --low=double") break; case 'h': high_given = true; high_arg = yaggo::conv_double((const char *)optarg, err, false); CHECK_ERR(double_t, optarg, "-h, --high=double") break; case 'i': increment_given = true; increment_arg = yaggo::conv_double((const char *)optarg, err, false); CHECK_ERR(double_t, optarg, "-i, --increment=double") break; case 'f': full_flag = true; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = argv[optind]; ++optind; } #define histo_fastq_main_args_USAGE "Usage: jellyfish qhisto [options] db:string" const char * usage() const { return histo_fastq_main_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define histo_fastq_main_args_HELP "Create an histogram of k-mer occurences\n\n" \ "Options (default value in (), *required):\n" \ " -l, --low=double Low count value of histogram (0.0)\n" \ " -h, --high=double High count value of histogram (10000.0)\n" \ " -i, --increment=double Increment value for buckets (1.0)\n" \ " -f, --full Full histo. Don't skip count 0. (false)\n" \ " --usage Usage\n" \ " --help This message\n" \ " -V, --version Version" const char * help() const { return histo_fastq_main_args_HELP; } #define histo_fastq_main_args_HIDDEN "Hidden options:" const char * hidden() const { return histo_fastq_main_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "low_given:" << low_given << " low_arg:" << low_arg << "\n"; os << "high_given:" << high_given << " high_arg:" << high_arg << "\n"; os << "increment_given:" << increment_given << " increment_arg:" << increment_arg << "\n"; os << "full_flag:" << full_flag << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __HISTO_FASTQ_MAIN_ARGS_HPP__" jellyfish-1.1.11/jellyfish/query_cmdline.hpp0000644015303500042660000001042112151455365016065 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __QUERY_ARGS_HPP__ #define __QUERY_ARGS_HPP__ #include class query_args { public: bool both_strands_flag; bool cary_bit_flag; const char * input_arg; bool input_given; const char * output_arg; bool output_given; yaggo::string db_arg; enum { USAGE_OPT = 1000 }; query_args() : both_strands_flag(false), cary_bit_flag(false), input_arg(""), input_given(false), output_arg(""), output_given(false) { } query_args(int argc, char* argv[]) : both_strands_flag(false), cary_bit_flag(false), input_arg(""), input_given(false), output_arg(""), output_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"both-strands", 0, 0, 'C'}, {"cary-bit", 0, 0, 'c'}, {"input", 1, 0, 'i'}, {"output", 1, 0, 'o'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVCci:o:"; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 'C': both_strands_flag = true; break; case 'c': cary_bit_flag = true; break; case 'i': input_given = true; input_arg = optarg; break; case 'o': output_given = true; output_arg = optarg; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = yaggo::string(argv[optind]); ++optind; } #define query_args_USAGE "Usage: jellyfish query [options] db:path" const char * usage() const { return query_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define query_args_HELP "Query from a compacted database\n\nQuery a hash. It reads k-mers from the standard input and write the counts on the standard output.\n\n" \ "Options (default value in (), *required):\n" \ " -C, --both-strands Both strands (false)\n" \ " -c, --cary-bit Value field as the cary bit information (false)\n" \ " -i, --input=file Input file\n" \ " -o, --output=file Output file\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return query_args_HELP; } #define query_args_HIDDEN "Hidden options:" const char * hidden() const { return query_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "both_strands_flag:" << both_strands_flag << "\n"; os << "cary_bit_flag:" << cary_bit_flag << "\n"; os << "input_given:" << input_given << " input_arg:" << input_arg << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __QUERY_ARGS_HPP__" jellyfish-1.1.11/jellyfish/stats_main_cmdline.hpp0000644015303500042660000001277712151455365017102 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __STATS_ARGS_HPP__ #define __STATS_ARGS_HPP__ #include class stats_args { public: bool recompute_flag; uint64_t lower_count_arg; bool lower_count_given; uint64_t upper_count_arg; bool upper_count_given; bool verbose_flag; const char * output_arg; bool output_given; const char * db_arg; enum { USAGE_OPT = 1000, FULL_HELP_OPT }; stats_args() : recompute_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), verbose_flag(false), output_arg(""), output_given(false) { } stats_args(int argc, char* argv[]) : recompute_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), verbose_flag(false), output_arg(""), output_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"recompute", 0, 0, 'r'}, {"lower-count", 1, 0, 'L'}, {"upper-count", 1, 0, 'U'}, {"verbose", 0, 0, 'v'}, {"output", 1, 0, 'o'}, {"help", 0, 0, 'h'}, {"full-help", 0, 0, FULL_HELP_OPT}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVrL:U:vo:"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case FULL_HELP_OPT: std::cout << usage() << "\n\n" << help() << "\n\n" << hidden() << std::endl; exit(0); case 'r': recompute_flag = true; break; case 'L': lower_count_given = true; lower_count_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-L, --lower-count=uint64") break; case 'U': upper_count_given = true; upper_count_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-U, --upper-count=uint64") break; case 'v': verbose_flag = true; break; case 'o': output_given = true; output_arg = optarg; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = argv[optind]; ++optind; } #define stats_args_USAGE "Usage: jellyfish stats [options] db:path" const char * usage() const { return stats_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define stats_args_HELP "Statistics\n\nDisplay some statistics about the k-mers in the hash:\n" \ "\n" \ "Unique: Number of k-mers which occur only once.\n" \ "Distinct: Number of k-mers, not counting multiplicity.\n" \ "Total: Number of k-mers, including multiplicity.\n" \ "Max_count: Maximum number of occurrence of a k-mer.\n\n" \ "Options (default value in (), *required):\n" \ " -L, --lower-count=uint64 Don't consider k-mer with count < lower-count\n" \ " -U, --upper-count=uint64 Don't consider k-mer with count > upper-count\n" \ " -v, --verbose Verbose (false)\n" \ " -o, --output=string Output file\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " --full-help Detailed help\n" \ " -V, --version Version" const char * help() const { return stats_args_HELP; } #define stats_args_HIDDEN "Hidden options:\n" \ " -r, --recompute Recompute (false)" const char * hidden() const { return stats_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "recompute_flag:" << recompute_flag << "\n"; os << "lower_count_given:" << lower_count_given << " lower_count_arg:" << lower_count_arg << "\n"; os << "upper_count_given:" << upper_count_given << " upper_count_arg:" << upper_count_arg << "\n"; os << "verbose_flag:" << verbose_flag << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __STATS_ARGS_HPP__" jellyfish-1.1.11/jellyfish/time.hpp0000644015303500042660000000444712151455365014176 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_TIME_HPP__ #define __JELLYFISH_TIME_HPP__ #include #include #include #include class Time { static const suseconds_t max_useconds = 1000000UL; struct timeval tv; public: static const Time zero; explicit Time(bool init = true) { if(init) now(); } Time(time_t sec, suseconds_t usec) { tv.tv_sec = sec; tv.tv_usec = usec; } Time &operator=(const Time &o) { if(&o != this) { tv.tv_sec = o.tv.tv_sec; tv.tv_usec = o.tv.tv_usec; } return *this; } Time & operator-=(const Time &o) { tv.tv_sec -= o.tv.tv_sec; if(o.tv.tv_usec > tv.tv_usec) { tv.tv_usec = (max_useconds + tv.tv_usec) - o.tv.tv_usec; --tv.tv_sec; } else { tv.tv_usec -= o.tv.tv_usec; } return *this; } const Time operator-(const Time &o) const { return Time(*this) -= o; } Time & operator+=(const Time &o) { tv.tv_sec += o.tv.tv_sec; tv.tv_usec += o.tv.tv_usec; if(tv.tv_usec >= max_useconds) { ++tv.tv_sec; tv.tv_usec -= max_useconds; } return *this; } const Time operator+(const Time &o) const { return Time(*this) += o; } bool operator<(const Time& o) const { return tv.tv_sec < o.tv.tv_sec || (tv.tv_sec == o.tv.tv_sec && tv.tv_usec < o.tv.tv_usec); } void now() { gettimeofday(&tv, NULL); } Time elapsed() const { return Time() - *this; } std::string str() const { std::ostringstream res; res << tv.tv_sec << "." << std::setfill('0') << std::setw(6) << std::right << tv.tv_usec; return res.str(); } }; #endif // __TIME_HPP__ jellyfish-1.1.11/jellyfish/allocators_mmap.hpp0000644015303500042660000000343112151455365016405 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_ALLOCATORS_MMAP_HPP__ #define __JELLYFISH_ALLOCATORS_MMAP_HPP__ #include #include #include #include #include namespace allocators { class mmap { void *ptr; size_t size; public: mmap() : ptr(MAP_FAILED), size(0) {} explicit mmap(size_t _size) : ptr(MAP_FAILED), size(0) { realloc(_size); fast_zero(); } ~mmap() { if(ptr != MAP_FAILED) ::munmap(ptr, size); } void *get_ptr() const { return ptr != MAP_FAILED ? ptr : NULL; } size_t get_size() const { return size; } void *realloc(size_t new_size); int lock() { return mlock(ptr, size); } int unlock() { return munlock(ptr, size); } // Return a a number of bytes which is a number of whole pages at // least as large as size. static size_t round_to_page(size_t _size); private: static const int nb_threads = 4; struct tinfo { pthread_t thid; char *start, *end; size_t pgsize; }; void fast_zero(); static void * _fast_zero(void *_info); }; } #endif jellyfish-1.1.11/jellyfish/raw_dumper.hpp0000644015303500042660000002253512151455365015403 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __RAW_DUMPER_HPP__ #define __RAW_DUMPER_HPP__ #include #include #include #include #include namespace jellyfish { namespace raw_hash { static const char *file_type __attribute__((used)) = "JFRHSHDN"; struct header { char type[8]; uint64_t key_len; uint64_t val_len; uint64_t size; uint64_t max_reprobe; }; define_error_class(ErrorReading); template class dumper : public dumper_t, public thread_exec { typedef token_ring token_ring_t; struct thread_info_t { token_ring_t::token *token; }; const uint_t threads; const std::string file_prefix; storage_t *const ary; int file_index; token_ring_t tr; struct thread_info_t *thread_info; size_t nb_records, nb_blocks; std::ofstream *out; public: dumper(uint_t _threads, const char *_file_prefix, size_t chunk_size, storage_t *_ary) : threads(_threads), file_prefix(_file_prefix), ary(_ary), file_index(0), tr() { nb_records = ary->floor_block(chunk_size / ary->get_block_len(), nb_blocks); while(nb_records < ary->get_max_reprobe_offset()) { nb_records = ary->floor_block(2 * nb_records, nb_blocks); } thread_info = new struct thread_info_t[threads]; for(uint_t i = 0; i < threads; i++) { thread_info[i].token = tr.new_token(); } } ~dumper() { if(thread_info) { delete[] thread_info; } } virtual void start(int i) { dump_to_file(i); } void dump_to_file(int i); void write_header(); virtual void _dump(); }; template class query { public: typedef _storage_t storage_t; typedef typename storage_t::iterator iterator; private: mapped_file _file; storage_t *_ary; bool _canonical; bool _cary_bit; SquareBinaryMatrix hash_matrix; SquareBinaryMatrix hash_inverse_matrix; public: explicit query(mapped_file &map) : _file(map), _ary(0), _canonical(false), _cary_bit(false) { _ary = init(_file, hash_matrix, hash_inverse_matrix); } explicit query(std::string filename) : _file(filename.c_str()), _ary(0), _canonical(false), _cary_bit(false) { _ary = init(_file, hash_matrix, hash_inverse_matrix); } explicit query(const char* filename) : _file(filename), _ary(0), _canonical(false), _cary_bit(false) { _ary = init(_file, hash_matrix, hash_inverse_matrix); } ~query() { if(_ary) delete _ary; } size_t get_size() const { return _ary->get_size(); } size_t get_key_len() const { return _ary->get_key_len(); } uint_t get_mer_len() const { return _ary->get_key_len() / 2; } uint_t get_val_len() const { return _ary->get_val_len(); } uint_t get_max_reprobe() const { return _ary->get_max_reprobe(); } size_t get_max_reprobe_offset() const { return _ary->get_max_reprobe_offset(); } bool get_canonical() const { return _canonical; } void set_canonical(bool v) { _canonical = v; } bool get_cary_bit() const { return _cary_bit; } void set_cary_bit(bool v) { _cary_bit = v; } SquareBinaryMatrix get_hash_matrix() { return hash_matrix; } SquareBinaryMatrix get_hash_inverse_matrix() { return hash_inverse_matrix; } storage_t *get_ary() const { return _ary; } iterator get_iterator() const { return iterator_all(); } iterator iterator_all() const { return _ary->iterator_all(); } iterator iterator_slice(size_t slice_number, size_t number_of_slice) const { return _ary->iterator_slice(slice_number, number_of_slice); } typename storage_t::val_t operator[](const char *key_s) const { typename storage_t::key_t key = parse_dna::mer_string_to_binary(key_s, get_mer_len()); return (*this)[key]; } typename storage_t::val_t operator[](const typename storage_t::key_t &key) const { typename storage_t::val_t res = 0; bool success; if(_canonical) { typename storage_t::key_t key2 = parse_dna::reverse_complement(key, get_mer_len()); success = _ary->get_val(key2 < key ? key2 : key, res, true, _cary_bit); } else success = _ary->get_val(key, res, true, _cary_bit); return success ? res : 0; } bool has_key(const char *key_s) const { return has_key(parse_dna::mer_string_to_binary(key_s, get_mer_len())); } bool has_key(const typename storage_t::key_t &key) const { typename storage_t::val_t res = 0; if(_canonical) { typename storage_t::key_t key2 = parse_dna::reverse_complement(key, get_mer_len()); return _ary->get_val(key2 < key ? key2 : key, res, false); } else { return _ary->get_val(key, res, false); } } static storage_t* init(mapped_file& _file, SquareBinaryMatrix& hash_matrix, SquareBinaryMatrix& hash_inverse_matrix) { if(_file.length() < sizeof(struct header)) eraise(ErrorReading) << "'" << _file.path() << "': " << "File truncated"; char *map = _file.base(); struct header *header = (struct header *)map; map += sizeof(struct header); if(strncmp(header->type, file_type, sizeof(header->type))) eraise(ErrorReading) << "'" << _file.path() << "': " << "Invalid file format '" << err::substr(header->type, sizeof(header->type)) << "'. Expected '" << file_type << "'."; if(header->size != (1UL << floorLog2(header->size))) eraise(ErrorReading) << "'" << _file.path() << "': " << "Size '" << header->size << "' is not a power of 2"; if(header->key_len > 64 || header->key_len == 0) eraise(ErrorReading) << "'" << _file.path() << "': " << "Invalid key length '" << header->key_len << "'"; // TODO: Should that be in the file instead? // reprobes = jellyfish::quadratic_reprobes; map += hash_matrix.read(map); if((uint_t)hash_matrix.get_size() != header->key_len) eraise(ErrorReading) << "'" << _file.path() << "': " << "Size of hash matrix '" << hash_matrix.get_size() << "' not equal to key length '" << header->key_len << "'"; map += hash_inverse_matrix.read(map); if((uint_t)hash_inverse_matrix.get_size() != header->key_len) eraise(ErrorReading) << "'" << _file.path() << "': " << "Size of inverse hash matrix '" << hash_inverse_matrix.get_size() << "' not equal to key length '" << header->key_len << "'"; if((size_t)map & 0x7) map += 0x8 - ((size_t)map & 0x7); // Make sure aligned for 64bits word. TODO: use alignof? return new storage_t(map, header->size, header->key_len, header->val_len, header->max_reprobe, jellyfish::quadratic_reprobes, hash_matrix, hash_inverse_matrix); } }; template void dumper::_dump() { std::ofstream _out; open_next_file(file_prefix.c_str(), &file_index, _out); out = &_out; tr.reset(); write_header(); exec_join(threads); _out.close(); } template void dumper::dump_to_file(int id) { size_t i; struct thread_info_t *my_info = &thread_info[id]; for(i = id; i * nb_records < ary->get_size(); i += threads) { my_info->token->wait(); ary->write_blocks(out, i * nb_blocks, nb_blocks); my_info->token->pass(); ary->zero_blocks(i * nb_blocks, nb_blocks); } } template void dumper::write_header() { struct header header; memcpy(&header.type, file_type, sizeof(header.type)); header.key_len = ary->get_key_len(); header.val_len = ary->get_val_len(); header.size = ary->get_size(); header.max_reprobe = ary->get_max_reprobe(); out->write((char *)&header, sizeof(header)); ary->write_ary_header(out); } } } #endif jellyfish-1.1.11/jellyfish/storage.hpp0000644015303500042660000000204112151455365014670 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_STORAGE_HPP__ #define __JELLYFISH_STORAGE_HPP__ #include #include #include namespace jellyfish { class storage_t { public: storage_t() {} virtual ~storage_t() {} }; // Entry 0 is used only when switching to a large field extern size_t *quadratic_reprobes; } #endif // __STORAGE_HPP__ jellyfish-1.1.11/jellyfish/compacted_dumper.hpp0000644015303500042660000001351512151455365016547 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include namespace jellyfish { template class compacted_dumper : public dumper_t { define_error_class(ErrorWriting); typedef typename storage_t::iterator iterator; typedef compacted_hash::writer writer_t; struct thread_info_t { pthread_t thread_id; uint_t id; locks::pthread::cond cond; volatile bool token; writer_t writer; compacted_dumper *self; }; uint_t threads; std::string file_prefix; size_t buffer_size; uint_t klen, vlen; uint_t key_len, val_len; size_t record_len, nb_records, nb_blocks; storage_t *ary; uint_t file_index; struct thread_info_t *thread_info; uint64_t max_count; uint64_t volatile unique, distinct, total; std::ofstream out; public: // klen: key field length in bits in hash (i.e before rounding up to bytes) // vlen: value field length in bits compacted_dumper(uint_t _threads, const char *_file_prefix, size_t _buffer_size, uint_t _vlen, storage_t *_ary) : threads(_threads), file_prefix(_file_prefix), buffer_size(_buffer_size), klen(_ary->get_key_len()), vlen(_vlen), ary(_ary), file_index(0) { std::cerr << "Compacted dumper init" << std::endl; key_len = bits_to_bytes(klen); val_len = bits_to_bytes(vlen); max_count = (((uint64_t)1) << (8*val_len)) - 1; record_len = key_len + val_len; nb_records = ary->floor_block(_buffer_size / record_len, nb_blocks); thread_info = new struct thread_info_t[threads]; for(uint_t i = 0; i < threads; i++) { thread_info[i].token = i == 0; thread_info[i].writer.initialize(nb_records, ary->get_key_len(), vlen, ary); thread_info[i].id = i; thread_info[i].self = this; } unique = distinct = total = 0; } ~compacted_dumper() { if(thread_info) { delete[] thread_info; } } static void *dump_to_file_thread(void *arg) { struct thread_info_t *info = (struct thread_info_t *)arg; info->self->dump_to_file(info); return NULL; } void dump_to_file(struct thread_info_t *my_info); virtual void dump(); void update_stats() { thread_info[0].writer.update_stats_with(&out, unique, distinct, total); } }; template void compacted_dumper::dump() { static const long file_len = pathconf("/", _PC_PATH_MAX); std::cerr << "dump()" << std::endl; char file[file_len + 1]; file[file_len] = '\0'; int off = snprintf(file, file_len, "%s", file_prefix.c_str()); if(off < 0) eraise(ErrorWriting) << "Error creating output path" << err::no; if(off > 0 && off < file_len) { int _off = snprintf(file + off, file_len - off, "_%uld", file_index++); if(_off < 0) eraise(ErrorWriting) << "Error creating output path" << err::no; off += _off; } if(off >= file_len) eraise(ErrorWriting) << "File path is too long"; // out.exceptions(std::ios::eofbit|std::ios::failbit|std::ios::badbit); std::cerr << "Open " << file << std::endl; out.open(file); if(!out.good()) eraise(ErrorWriting) << "'" << file << "': " << "Can't open file for writing" << err::no; out.write("JFLISTDN", 8); unique = distinct = total = 0; for(uint_t i = 0; i < threads; i++) thread_info[i].token = i == 0; for(uint_t i = 0; i < threads; i++) { pthread_create(&thread_info[i].thread_id, NULL, dump_to_file_thread, &thread_info[i]); } for(uint_t i = 0; i < threads; i++) pthread_join(thread_info[i].thread_id, NULL); update_stats(); out.close(); } template void compacted_dumper::dump_to_file(struct thread_info_t *my_info) { size_t i; struct thread_info_t *next_info = &thread_info[(my_info->id + 1) % threads]; atomic_t atomic; if(my_info->token) my_info->writer.write_header(&out); for(i = my_info->id; i * nb_records < ary->get_size(); i += threads) { // fill up buffer iterator it(ary, i * nb_records, (i + 1) * nb_records); while(it.next()) { my_info->writer.append(it.key, it.val); } // wait for token & write buffer my_info->cond.lock(); while(!my_info->token) { my_info->cond.wait(); } my_info->cond.unlock(); my_info->writer.dump(&out); // pass on token my_info->token = false; next_info->cond.lock(); next_info->token = true; next_info->cond.signal(); next_info->cond.unlock(); // zero out memory ary->zero_blocks(i * nb_blocks, nb_blocks); } atomic.add_fetch(&unique, my_info->writer.get_unique()); atomic.add_fetch(&distinct, my_info->writer.get_distinct()); atomic.add_fetch(&total, my_info->writer.get_total()); } } jellyfish-1.1.11/jellyfish/yaggo.cpp0000644015303500042660000001256512151455365014341 00000000000000/* Copyright (c) 2011 Guillaume Marcais * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #include namespace yaggo { uint32_t string::as_uint32(bool si_suffix) const { std::string err; uint32_t res = yaggo::conv_uint((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to uint32_t: "; msg += err; throw std::runtime_error(msg); } return res; } uint64_t string::as_uint64(bool si_suffix) const { std::string err; uint64_t res = yaggo::conv_uint((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to uint64_t: "; msg += err; throw std::runtime_error(msg); } return res; } int32_t string::as_int32(bool si_suffix) const { std::string err; int32_t res = yaggo::conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int32_t: "; msg += err; throw std::runtime_error(msg); } return res; } int64_t string::as_int64(bool si_suffix) const { std::string err; int64_t res = yaggo::conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int64_t: "; msg += err; throw std::runtime_error(msg); } return res; } int string::as_int(bool si_suffix) const { std::string err; int res = yaggo::conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int_t: "; msg += err; throw std::runtime_error(msg); } return res; } long string::as_long(bool si_suffix) const { std::string err; long res = yaggo::conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to long_t: "; msg += err; throw std::runtime_error(msg); } return res; } double string::as_double(bool si_suffix) const { std::string err; double res = yaggo::conv_double((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { std::string msg("Invalid conversion of '"); msg += *this; msg += "' to double_t: "; msg += err; throw std::runtime_error(msg); } return res; } int string::as_enum(const char* const strs[]) { std::string err; int res = yaggo::conv_enum((const char*)this->c_str(), err, strs); if(!err.empty()) throw std::runtime_error(err); return res; } bool adjust_double_si_suffix(double &res, const char *suffix) { if(*suffix == '\0') return true; if(*(suffix + 1) != '\0') return false; switch(*suffix) { case 'a': res *= 1e-18; break; case 'f': res *= 1e-15; break; case 'p': res *= 1e-12; break; case 'n': res *= 1e-9; break; case 'u': res *= 1e-6; break; case 'm': res *= 1e-3; break; case 'k': res *= 1e3; break; case 'M': res *= 1e6; break; case 'G': res *= 1e9; break; case 'T': res *= 1e12; break; case 'P': res *= 1e15; break; case 'E': res *= 1e18; break; default: return false; } return true; } double conv_double(const char *str, std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; double res = strtod(str, &endptr); if(errno) { err.assign(strerror(errno)); return (double)0.0; } bool invalid = si_suffix ? !adjust_double_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (double)0.0; } return res; } int conv_enum(const char* str, std::string& err, const char* const strs[]) { int res = 0; for(const char* const* cstr = strs; *cstr; ++cstr, ++res) if(!strcmp(*cstr, str)) return res; err += "Invalid constant '"; err += str; err += "'. Expected one of { "; for(const char* const* cstr = strs; *cstr; ++cstr) { if(cstr != strs) err += ", "; err += *cstr; } err += " }"; return -1; } } jellyfish-1.1.11/jellyfish/sequence_parser.hpp0000644015303500042660000000436412151455365016422 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_SEQUENCE_PARSER_HPP__ #define __JELLYFISH_SEQUENCE_PARSER_HPP__ #include #include #include #include #include namespace jellyfish { class sequence_parser : public file_parser { protected: public: sequence_parser(int fd, const char *path, const char *str, size_t len) : file_parser(fd, path, str, len) { } virtual ~sequence_parser() { } struct sequence_t { char *start; char *end; }; static sequence_parser *new_parser(const char *path); // parse some input data into the buffer [start, *end). Returns // false if there is no more data in the input. **end is an // input/output parameter. It points past the end of the buffer // when called and should point past the end of the data when // returned. virtual bool parse(char *start, char **end) = 0; }; class fasta_sequence_parser : public sequence_parser { public: fasta_sequence_parser(int fd, const char *path, const char *str, size_t len) : sequence_parser(fd, path, str, len) {} virtual ~fasta_sequence_parser() {} virtual bool parse(char *start, char **end); }; class fastq_sequence_parser : public sequence_parser { unsigned long seq_len; public: fastq_sequence_parser(int fd, const char *path, const char *str, size_t len) : sequence_parser(fd, path, str, len), seq_len(0) {} virtual ~fastq_sequence_parser() {} virtual bool parse(char *start, char **end); }; } #endif jellyfish-1.1.11/jellyfish/toFloat.h0000644015303500042660000364011012151455365014304 00000000000000// // This is an automatically generated file. // Do not edit. // { {0x00000000}, {0x33800000}, {0x34000000}, {0x34400000}, {0x34800000}, {0x34a00000}, {0x34c00000}, {0x34e00000}, {0x35000000}, {0x35100000}, {0x35200000}, {0x35300000}, {0x35400000}, {0x35500000}, {0x35600000}, {0x35700000}, {0x35800000}, {0x35880000}, {0x35900000}, {0x35980000}, {0x35a00000}, {0x35a80000}, {0x35b00000}, {0x35b80000}, {0x35c00000}, {0x35c80000}, {0x35d00000}, {0x35d80000}, {0x35e00000}, {0x35e80000}, {0x35f00000}, {0x35f80000}, {0x36000000}, {0x36040000}, {0x36080000}, {0x360c0000}, {0x36100000}, {0x36140000}, {0x36180000}, {0x361c0000}, {0x36200000}, {0x36240000}, {0x36280000}, {0x362c0000}, {0x36300000}, {0x36340000}, {0x36380000}, {0x363c0000}, {0x36400000}, {0x36440000}, {0x36480000}, {0x364c0000}, {0x36500000}, {0x36540000}, {0x36580000}, {0x365c0000}, {0x36600000}, {0x36640000}, {0x36680000}, {0x366c0000}, {0x36700000}, {0x36740000}, {0x36780000}, {0x367c0000}, {0x36800000}, {0x36820000}, {0x36840000}, {0x36860000}, {0x36880000}, {0x368a0000}, {0x368c0000}, {0x368e0000}, {0x36900000}, {0x36920000}, {0x36940000}, {0x36960000}, {0x36980000}, {0x369a0000}, {0x369c0000}, {0x369e0000}, {0x36a00000}, {0x36a20000}, {0x36a40000}, {0x36a60000}, {0x36a80000}, {0x36aa0000}, {0x36ac0000}, {0x36ae0000}, {0x36b00000}, {0x36b20000}, {0x36b40000}, {0x36b60000}, {0x36b80000}, {0x36ba0000}, {0x36bc0000}, {0x36be0000}, {0x36c00000}, {0x36c20000}, {0x36c40000}, {0x36c60000}, {0x36c80000}, {0x36ca0000}, {0x36cc0000}, {0x36ce0000}, {0x36d00000}, {0x36d20000}, {0x36d40000}, {0x36d60000}, {0x36d80000}, {0x36da0000}, {0x36dc0000}, {0x36de0000}, {0x36e00000}, {0x36e20000}, {0x36e40000}, {0x36e60000}, {0x36e80000}, {0x36ea0000}, {0x36ec0000}, {0x36ee0000}, {0x36f00000}, {0x36f20000}, {0x36f40000}, {0x36f60000}, {0x36f80000}, {0x36fa0000}, {0x36fc0000}, {0x36fe0000}, {0x37000000}, {0x37010000}, {0x37020000}, {0x37030000}, {0x37040000}, {0x37050000}, {0x37060000}, {0x37070000}, {0x37080000}, {0x37090000}, {0x370a0000}, {0x370b0000}, {0x370c0000}, {0x370d0000}, {0x370e0000}, {0x370f0000}, {0x37100000}, {0x37110000}, {0x37120000}, {0x37130000}, {0x37140000}, {0x37150000}, {0x37160000}, {0x37170000}, {0x37180000}, {0x37190000}, {0x371a0000}, {0x371b0000}, {0x371c0000}, {0x371d0000}, {0x371e0000}, {0x371f0000}, {0x37200000}, {0x37210000}, {0x37220000}, {0x37230000}, {0x37240000}, {0x37250000}, {0x37260000}, {0x37270000}, {0x37280000}, {0x37290000}, {0x372a0000}, {0x372b0000}, {0x372c0000}, {0x372d0000}, {0x372e0000}, {0x372f0000}, {0x37300000}, {0x37310000}, {0x37320000}, {0x37330000}, {0x37340000}, {0x37350000}, {0x37360000}, {0x37370000}, {0x37380000}, {0x37390000}, {0x373a0000}, {0x373b0000}, {0x373c0000}, {0x373d0000}, {0x373e0000}, {0x373f0000}, {0x37400000}, {0x37410000}, {0x37420000}, {0x37430000}, {0x37440000}, {0x37450000}, {0x37460000}, {0x37470000}, {0x37480000}, {0x37490000}, {0x374a0000}, {0x374b0000}, {0x374c0000}, {0x374d0000}, {0x374e0000}, {0x374f0000}, {0x37500000}, {0x37510000}, {0x37520000}, {0x37530000}, {0x37540000}, {0x37550000}, {0x37560000}, {0x37570000}, {0x37580000}, {0x37590000}, {0x375a0000}, {0x375b0000}, {0x375c0000}, {0x375d0000}, {0x375e0000}, {0x375f0000}, {0x37600000}, {0x37610000}, {0x37620000}, {0x37630000}, {0x37640000}, {0x37650000}, {0x37660000}, {0x37670000}, {0x37680000}, {0x37690000}, {0x376a0000}, {0x376b0000}, {0x376c0000}, {0x376d0000}, {0x376e0000}, {0x376f0000}, {0x37700000}, {0x37710000}, {0x37720000}, {0x37730000}, {0x37740000}, {0x37750000}, {0x37760000}, {0x37770000}, {0x37780000}, {0x37790000}, {0x377a0000}, {0x377b0000}, {0x377c0000}, {0x377d0000}, {0x377e0000}, {0x377f0000}, {0x37800000}, {0x37808000}, {0x37810000}, {0x37818000}, {0x37820000}, {0x37828000}, {0x37830000}, {0x37838000}, {0x37840000}, {0x37848000}, {0x37850000}, {0x37858000}, {0x37860000}, {0x37868000}, {0x37870000}, {0x37878000}, {0x37880000}, {0x37888000}, {0x37890000}, {0x37898000}, {0x378a0000}, {0x378a8000}, {0x378b0000}, {0x378b8000}, {0x378c0000}, {0x378c8000}, {0x378d0000}, {0x378d8000}, {0x378e0000}, {0x378e8000}, {0x378f0000}, {0x378f8000}, {0x37900000}, {0x37908000}, {0x37910000}, {0x37918000}, {0x37920000}, {0x37928000}, {0x37930000}, {0x37938000}, {0x37940000}, {0x37948000}, {0x37950000}, {0x37958000}, {0x37960000}, {0x37968000}, {0x37970000}, {0x37978000}, {0x37980000}, {0x37988000}, {0x37990000}, {0x37998000}, {0x379a0000}, {0x379a8000}, {0x379b0000}, {0x379b8000}, {0x379c0000}, {0x379c8000}, {0x379d0000}, {0x379d8000}, {0x379e0000}, {0x379e8000}, {0x379f0000}, {0x379f8000}, {0x37a00000}, {0x37a08000}, {0x37a10000}, {0x37a18000}, {0x37a20000}, {0x37a28000}, {0x37a30000}, {0x37a38000}, {0x37a40000}, {0x37a48000}, {0x37a50000}, {0x37a58000}, {0x37a60000}, {0x37a68000}, {0x37a70000}, {0x37a78000}, {0x37a80000}, {0x37a88000}, {0x37a90000}, {0x37a98000}, {0x37aa0000}, {0x37aa8000}, {0x37ab0000}, {0x37ab8000}, {0x37ac0000}, {0x37ac8000}, {0x37ad0000}, {0x37ad8000}, {0x37ae0000}, {0x37ae8000}, {0x37af0000}, {0x37af8000}, {0x37b00000}, {0x37b08000}, {0x37b10000}, {0x37b18000}, {0x37b20000}, {0x37b28000}, {0x37b30000}, {0x37b38000}, {0x37b40000}, {0x37b48000}, {0x37b50000}, {0x37b58000}, {0x37b60000}, {0x37b68000}, {0x37b70000}, {0x37b78000}, {0x37b80000}, {0x37b88000}, {0x37b90000}, {0x37b98000}, {0x37ba0000}, {0x37ba8000}, {0x37bb0000}, {0x37bb8000}, {0x37bc0000}, {0x37bc8000}, {0x37bd0000}, {0x37bd8000}, {0x37be0000}, {0x37be8000}, {0x37bf0000}, {0x37bf8000}, {0x37c00000}, {0x37c08000}, {0x37c10000}, {0x37c18000}, {0x37c20000}, {0x37c28000}, {0x37c30000}, {0x37c38000}, {0x37c40000}, {0x37c48000}, {0x37c50000}, {0x37c58000}, {0x37c60000}, {0x37c68000}, {0x37c70000}, {0x37c78000}, {0x37c80000}, {0x37c88000}, {0x37c90000}, {0x37c98000}, {0x37ca0000}, {0x37ca8000}, {0x37cb0000}, {0x37cb8000}, {0x37cc0000}, {0x37cc8000}, {0x37cd0000}, {0x37cd8000}, {0x37ce0000}, {0x37ce8000}, {0x37cf0000}, {0x37cf8000}, {0x37d00000}, {0x37d08000}, {0x37d10000}, {0x37d18000}, {0x37d20000}, {0x37d28000}, {0x37d30000}, {0x37d38000}, {0x37d40000}, {0x37d48000}, {0x37d50000}, {0x37d58000}, {0x37d60000}, {0x37d68000}, {0x37d70000}, {0x37d78000}, {0x37d80000}, {0x37d88000}, {0x37d90000}, {0x37d98000}, {0x37da0000}, {0x37da8000}, {0x37db0000}, {0x37db8000}, {0x37dc0000}, {0x37dc8000}, {0x37dd0000}, {0x37dd8000}, {0x37de0000}, {0x37de8000}, {0x37df0000}, {0x37df8000}, {0x37e00000}, {0x37e08000}, {0x37e10000}, {0x37e18000}, {0x37e20000}, {0x37e28000}, {0x37e30000}, {0x37e38000}, {0x37e40000}, {0x37e48000}, {0x37e50000}, {0x37e58000}, {0x37e60000}, {0x37e68000}, {0x37e70000}, {0x37e78000}, {0x37e80000}, {0x37e88000}, {0x37e90000}, {0x37e98000}, {0x37ea0000}, {0x37ea8000}, {0x37eb0000}, {0x37eb8000}, {0x37ec0000}, {0x37ec8000}, {0x37ed0000}, {0x37ed8000}, {0x37ee0000}, {0x37ee8000}, {0x37ef0000}, {0x37ef8000}, {0x37f00000}, {0x37f08000}, {0x37f10000}, {0x37f18000}, {0x37f20000}, {0x37f28000}, {0x37f30000}, {0x37f38000}, {0x37f40000}, {0x37f48000}, {0x37f50000}, {0x37f58000}, {0x37f60000}, {0x37f68000}, {0x37f70000}, {0x37f78000}, {0x37f80000}, {0x37f88000}, {0x37f90000}, {0x37f98000}, {0x37fa0000}, {0x37fa8000}, {0x37fb0000}, {0x37fb8000}, {0x37fc0000}, {0x37fc8000}, {0x37fd0000}, {0x37fd8000}, {0x37fe0000}, {0x37fe8000}, {0x37ff0000}, {0x37ff8000}, {0x38000000}, {0x38004000}, {0x38008000}, {0x3800c000}, {0x38010000}, {0x38014000}, {0x38018000}, {0x3801c000}, {0x38020000}, {0x38024000}, {0x38028000}, {0x3802c000}, {0x38030000}, {0x38034000}, {0x38038000}, {0x3803c000}, {0x38040000}, {0x38044000}, {0x38048000}, {0x3804c000}, {0x38050000}, {0x38054000}, {0x38058000}, {0x3805c000}, {0x38060000}, {0x38064000}, {0x38068000}, {0x3806c000}, {0x38070000}, {0x38074000}, {0x38078000}, {0x3807c000}, {0x38080000}, {0x38084000}, {0x38088000}, {0x3808c000}, {0x38090000}, {0x38094000}, {0x38098000}, {0x3809c000}, {0x380a0000}, {0x380a4000}, {0x380a8000}, {0x380ac000}, {0x380b0000}, {0x380b4000}, {0x380b8000}, {0x380bc000}, {0x380c0000}, {0x380c4000}, {0x380c8000}, {0x380cc000}, {0x380d0000}, {0x380d4000}, {0x380d8000}, {0x380dc000}, {0x380e0000}, {0x380e4000}, {0x380e8000}, {0x380ec000}, {0x380f0000}, {0x380f4000}, {0x380f8000}, {0x380fc000}, {0x38100000}, {0x38104000}, {0x38108000}, {0x3810c000}, {0x38110000}, {0x38114000}, {0x38118000}, {0x3811c000}, {0x38120000}, {0x38124000}, {0x38128000}, {0x3812c000}, {0x38130000}, {0x38134000}, {0x38138000}, {0x3813c000}, {0x38140000}, {0x38144000}, {0x38148000}, {0x3814c000}, {0x38150000}, {0x38154000}, {0x38158000}, {0x3815c000}, {0x38160000}, {0x38164000}, {0x38168000}, {0x3816c000}, {0x38170000}, {0x38174000}, {0x38178000}, {0x3817c000}, {0x38180000}, {0x38184000}, {0x38188000}, {0x3818c000}, {0x38190000}, {0x38194000}, {0x38198000}, {0x3819c000}, {0x381a0000}, {0x381a4000}, {0x381a8000}, {0x381ac000}, {0x381b0000}, {0x381b4000}, {0x381b8000}, {0x381bc000}, {0x381c0000}, {0x381c4000}, {0x381c8000}, {0x381cc000}, {0x381d0000}, {0x381d4000}, {0x381d8000}, {0x381dc000}, {0x381e0000}, {0x381e4000}, {0x381e8000}, {0x381ec000}, {0x381f0000}, {0x381f4000}, {0x381f8000}, {0x381fc000}, {0x38200000}, {0x38204000}, {0x38208000}, {0x3820c000}, {0x38210000}, {0x38214000}, {0x38218000}, {0x3821c000}, {0x38220000}, {0x38224000}, {0x38228000}, {0x3822c000}, {0x38230000}, {0x38234000}, {0x38238000}, {0x3823c000}, {0x38240000}, {0x38244000}, {0x38248000}, {0x3824c000}, {0x38250000}, {0x38254000}, {0x38258000}, {0x3825c000}, {0x38260000}, {0x38264000}, {0x38268000}, {0x3826c000}, {0x38270000}, {0x38274000}, {0x38278000}, {0x3827c000}, {0x38280000}, {0x38284000}, {0x38288000}, {0x3828c000}, {0x38290000}, {0x38294000}, {0x38298000}, {0x3829c000}, {0x382a0000}, {0x382a4000}, {0x382a8000}, {0x382ac000}, {0x382b0000}, {0x382b4000}, {0x382b8000}, {0x382bc000}, {0x382c0000}, {0x382c4000}, {0x382c8000}, {0x382cc000}, {0x382d0000}, {0x382d4000}, {0x382d8000}, {0x382dc000}, {0x382e0000}, {0x382e4000}, {0x382e8000}, {0x382ec000}, {0x382f0000}, {0x382f4000}, {0x382f8000}, {0x382fc000}, {0x38300000}, {0x38304000}, {0x38308000}, {0x3830c000}, {0x38310000}, {0x38314000}, {0x38318000}, {0x3831c000}, {0x38320000}, {0x38324000}, {0x38328000}, {0x3832c000}, {0x38330000}, {0x38334000}, {0x38338000}, {0x3833c000}, {0x38340000}, {0x38344000}, {0x38348000}, {0x3834c000}, {0x38350000}, {0x38354000}, {0x38358000}, {0x3835c000}, {0x38360000}, {0x38364000}, {0x38368000}, {0x3836c000}, {0x38370000}, {0x38374000}, {0x38378000}, {0x3837c000}, {0x38380000}, {0x38384000}, {0x38388000}, {0x3838c000}, {0x38390000}, {0x38394000}, {0x38398000}, {0x3839c000}, {0x383a0000}, {0x383a4000}, {0x383a8000}, {0x383ac000}, {0x383b0000}, {0x383b4000}, {0x383b8000}, {0x383bc000}, {0x383c0000}, {0x383c4000}, {0x383c8000}, {0x383cc000}, {0x383d0000}, {0x383d4000}, {0x383d8000}, {0x383dc000}, {0x383e0000}, {0x383e4000}, {0x383e8000}, {0x383ec000}, {0x383f0000}, {0x383f4000}, {0x383f8000}, {0x383fc000}, {0x38400000}, {0x38404000}, {0x38408000}, {0x3840c000}, {0x38410000}, {0x38414000}, {0x38418000}, {0x3841c000}, {0x38420000}, {0x38424000}, {0x38428000}, {0x3842c000}, {0x38430000}, {0x38434000}, {0x38438000}, {0x3843c000}, {0x38440000}, {0x38444000}, {0x38448000}, {0x3844c000}, {0x38450000}, {0x38454000}, {0x38458000}, {0x3845c000}, {0x38460000}, {0x38464000}, {0x38468000}, {0x3846c000}, {0x38470000}, {0x38474000}, {0x38478000}, {0x3847c000}, {0x38480000}, {0x38484000}, {0x38488000}, {0x3848c000}, {0x38490000}, {0x38494000}, {0x38498000}, {0x3849c000}, {0x384a0000}, {0x384a4000}, {0x384a8000}, {0x384ac000}, {0x384b0000}, {0x384b4000}, {0x384b8000}, {0x384bc000}, {0x384c0000}, {0x384c4000}, {0x384c8000}, {0x384cc000}, {0x384d0000}, {0x384d4000}, {0x384d8000}, {0x384dc000}, {0x384e0000}, {0x384e4000}, {0x384e8000}, {0x384ec000}, {0x384f0000}, {0x384f4000}, {0x384f8000}, {0x384fc000}, {0x38500000}, {0x38504000}, {0x38508000}, {0x3850c000}, {0x38510000}, {0x38514000}, {0x38518000}, {0x3851c000}, {0x38520000}, {0x38524000}, {0x38528000}, {0x3852c000}, {0x38530000}, {0x38534000}, {0x38538000}, {0x3853c000}, {0x38540000}, {0x38544000}, {0x38548000}, {0x3854c000}, {0x38550000}, {0x38554000}, {0x38558000}, {0x3855c000}, {0x38560000}, {0x38564000}, {0x38568000}, {0x3856c000}, {0x38570000}, {0x38574000}, {0x38578000}, {0x3857c000}, {0x38580000}, {0x38584000}, {0x38588000}, {0x3858c000}, {0x38590000}, {0x38594000}, {0x38598000}, {0x3859c000}, {0x385a0000}, {0x385a4000}, {0x385a8000}, {0x385ac000}, {0x385b0000}, {0x385b4000}, {0x385b8000}, {0x385bc000}, {0x385c0000}, {0x385c4000}, {0x385c8000}, {0x385cc000}, {0x385d0000}, {0x385d4000}, {0x385d8000}, {0x385dc000}, {0x385e0000}, {0x385e4000}, {0x385e8000}, {0x385ec000}, {0x385f0000}, {0x385f4000}, {0x385f8000}, {0x385fc000}, {0x38600000}, {0x38604000}, {0x38608000}, {0x3860c000}, {0x38610000}, {0x38614000}, {0x38618000}, {0x3861c000}, {0x38620000}, {0x38624000}, {0x38628000}, {0x3862c000}, {0x38630000}, {0x38634000}, {0x38638000}, {0x3863c000}, {0x38640000}, {0x38644000}, {0x38648000}, {0x3864c000}, {0x38650000}, {0x38654000}, {0x38658000}, {0x3865c000}, {0x38660000}, {0x38664000}, {0x38668000}, {0x3866c000}, {0x38670000}, {0x38674000}, {0x38678000}, {0x3867c000}, {0x38680000}, {0x38684000}, {0x38688000}, {0x3868c000}, {0x38690000}, {0x38694000}, {0x38698000}, {0x3869c000}, {0x386a0000}, {0x386a4000}, {0x386a8000}, {0x386ac000}, {0x386b0000}, {0x386b4000}, {0x386b8000}, {0x386bc000}, {0x386c0000}, {0x386c4000}, {0x386c8000}, {0x386cc000}, {0x386d0000}, {0x386d4000}, {0x386d8000}, {0x386dc000}, {0x386e0000}, {0x386e4000}, {0x386e8000}, {0x386ec000}, {0x386f0000}, {0x386f4000}, {0x386f8000}, {0x386fc000}, {0x38700000}, {0x38704000}, {0x38708000}, {0x3870c000}, {0x38710000}, {0x38714000}, {0x38718000}, {0x3871c000}, {0x38720000}, {0x38724000}, {0x38728000}, {0x3872c000}, {0x38730000}, {0x38734000}, {0x38738000}, {0x3873c000}, {0x38740000}, {0x38744000}, {0x38748000}, {0x3874c000}, {0x38750000}, {0x38754000}, {0x38758000}, {0x3875c000}, {0x38760000}, {0x38764000}, {0x38768000}, {0x3876c000}, {0x38770000}, {0x38774000}, {0x38778000}, {0x3877c000}, {0x38780000}, {0x38784000}, {0x38788000}, {0x3878c000}, {0x38790000}, {0x38794000}, {0x38798000}, {0x3879c000}, {0x387a0000}, {0x387a4000}, {0x387a8000}, {0x387ac000}, {0x387b0000}, {0x387b4000}, {0x387b8000}, {0x387bc000}, {0x387c0000}, {0x387c4000}, {0x387c8000}, {0x387cc000}, {0x387d0000}, {0x387d4000}, {0x387d8000}, {0x387dc000}, {0x387e0000}, {0x387e4000}, {0x387e8000}, {0x387ec000}, {0x387f0000}, {0x387f4000}, {0x387f8000}, {0x387fc000}, {0x38800000}, {0x38802000}, {0x38804000}, {0x38806000}, {0x38808000}, {0x3880a000}, {0x3880c000}, {0x3880e000}, {0x38810000}, {0x38812000}, {0x38814000}, {0x38816000}, {0x38818000}, {0x3881a000}, {0x3881c000}, {0x3881e000}, {0x38820000}, {0x38822000}, {0x38824000}, {0x38826000}, {0x38828000}, {0x3882a000}, {0x3882c000}, {0x3882e000}, {0x38830000}, {0x38832000}, {0x38834000}, {0x38836000}, {0x38838000}, {0x3883a000}, {0x3883c000}, {0x3883e000}, {0x38840000}, {0x38842000}, {0x38844000}, {0x38846000}, {0x38848000}, {0x3884a000}, {0x3884c000}, {0x3884e000}, {0x38850000}, {0x38852000}, {0x38854000}, {0x38856000}, {0x38858000}, {0x3885a000}, {0x3885c000}, {0x3885e000}, {0x38860000}, {0x38862000}, {0x38864000}, {0x38866000}, {0x38868000}, {0x3886a000}, {0x3886c000}, {0x3886e000}, {0x38870000}, {0x38872000}, {0x38874000}, {0x38876000}, {0x38878000}, {0x3887a000}, {0x3887c000}, {0x3887e000}, {0x38880000}, {0x38882000}, {0x38884000}, {0x38886000}, {0x38888000}, {0x3888a000}, {0x3888c000}, {0x3888e000}, {0x38890000}, {0x38892000}, {0x38894000}, {0x38896000}, {0x38898000}, {0x3889a000}, {0x3889c000}, {0x3889e000}, {0x388a0000}, {0x388a2000}, {0x388a4000}, {0x388a6000}, {0x388a8000}, {0x388aa000}, {0x388ac000}, {0x388ae000}, {0x388b0000}, {0x388b2000}, {0x388b4000}, {0x388b6000}, {0x388b8000}, {0x388ba000}, {0x388bc000}, {0x388be000}, {0x388c0000}, {0x388c2000}, {0x388c4000}, {0x388c6000}, {0x388c8000}, {0x388ca000}, {0x388cc000}, {0x388ce000}, {0x388d0000}, {0x388d2000}, {0x388d4000}, {0x388d6000}, {0x388d8000}, {0x388da000}, {0x388dc000}, {0x388de000}, {0x388e0000}, {0x388e2000}, {0x388e4000}, {0x388e6000}, {0x388e8000}, {0x388ea000}, {0x388ec000}, {0x388ee000}, {0x388f0000}, {0x388f2000}, {0x388f4000}, {0x388f6000}, {0x388f8000}, {0x388fa000}, {0x388fc000}, {0x388fe000}, {0x38900000}, {0x38902000}, {0x38904000}, {0x38906000}, {0x38908000}, {0x3890a000}, {0x3890c000}, {0x3890e000}, {0x38910000}, {0x38912000}, {0x38914000}, {0x38916000}, {0x38918000}, {0x3891a000}, {0x3891c000}, {0x3891e000}, {0x38920000}, {0x38922000}, {0x38924000}, {0x38926000}, {0x38928000}, {0x3892a000}, {0x3892c000}, {0x3892e000}, {0x38930000}, {0x38932000}, {0x38934000}, {0x38936000}, {0x38938000}, {0x3893a000}, {0x3893c000}, {0x3893e000}, {0x38940000}, {0x38942000}, {0x38944000}, {0x38946000}, {0x38948000}, {0x3894a000}, {0x3894c000}, {0x3894e000}, {0x38950000}, {0x38952000}, {0x38954000}, {0x38956000}, {0x38958000}, {0x3895a000}, {0x3895c000}, {0x3895e000}, {0x38960000}, {0x38962000}, {0x38964000}, {0x38966000}, {0x38968000}, {0x3896a000}, {0x3896c000}, {0x3896e000}, {0x38970000}, {0x38972000}, {0x38974000}, {0x38976000}, {0x38978000}, {0x3897a000}, {0x3897c000}, {0x3897e000}, {0x38980000}, {0x38982000}, {0x38984000}, {0x38986000}, {0x38988000}, {0x3898a000}, {0x3898c000}, {0x3898e000}, {0x38990000}, {0x38992000}, {0x38994000}, {0x38996000}, {0x38998000}, {0x3899a000}, {0x3899c000}, {0x3899e000}, {0x389a0000}, {0x389a2000}, {0x389a4000}, {0x389a6000}, {0x389a8000}, {0x389aa000}, {0x389ac000}, {0x389ae000}, {0x389b0000}, {0x389b2000}, {0x389b4000}, {0x389b6000}, {0x389b8000}, {0x389ba000}, {0x389bc000}, {0x389be000}, {0x389c0000}, {0x389c2000}, {0x389c4000}, {0x389c6000}, {0x389c8000}, {0x389ca000}, {0x389cc000}, {0x389ce000}, {0x389d0000}, {0x389d2000}, {0x389d4000}, {0x389d6000}, {0x389d8000}, {0x389da000}, {0x389dc000}, {0x389de000}, {0x389e0000}, {0x389e2000}, {0x389e4000}, {0x389e6000}, {0x389e8000}, {0x389ea000}, {0x389ec000}, {0x389ee000}, {0x389f0000}, {0x389f2000}, {0x389f4000}, {0x389f6000}, {0x389f8000}, {0x389fa000}, {0x389fc000}, {0x389fe000}, {0x38a00000}, {0x38a02000}, {0x38a04000}, {0x38a06000}, {0x38a08000}, {0x38a0a000}, {0x38a0c000}, {0x38a0e000}, {0x38a10000}, {0x38a12000}, {0x38a14000}, {0x38a16000}, {0x38a18000}, {0x38a1a000}, {0x38a1c000}, {0x38a1e000}, {0x38a20000}, {0x38a22000}, {0x38a24000}, {0x38a26000}, {0x38a28000}, {0x38a2a000}, {0x38a2c000}, {0x38a2e000}, {0x38a30000}, {0x38a32000}, {0x38a34000}, {0x38a36000}, {0x38a38000}, {0x38a3a000}, {0x38a3c000}, {0x38a3e000}, {0x38a40000}, {0x38a42000}, {0x38a44000}, {0x38a46000}, {0x38a48000}, {0x38a4a000}, {0x38a4c000}, {0x38a4e000}, {0x38a50000}, {0x38a52000}, {0x38a54000}, {0x38a56000}, {0x38a58000}, {0x38a5a000}, {0x38a5c000}, {0x38a5e000}, {0x38a60000}, {0x38a62000}, {0x38a64000}, {0x38a66000}, {0x38a68000}, {0x38a6a000}, {0x38a6c000}, {0x38a6e000}, {0x38a70000}, {0x38a72000}, {0x38a74000}, {0x38a76000}, {0x38a78000}, {0x38a7a000}, {0x38a7c000}, {0x38a7e000}, {0x38a80000}, {0x38a82000}, {0x38a84000}, {0x38a86000}, {0x38a88000}, {0x38a8a000}, {0x38a8c000}, {0x38a8e000}, {0x38a90000}, {0x38a92000}, {0x38a94000}, {0x38a96000}, {0x38a98000}, {0x38a9a000}, {0x38a9c000}, {0x38a9e000}, {0x38aa0000}, {0x38aa2000}, {0x38aa4000}, {0x38aa6000}, {0x38aa8000}, {0x38aaa000}, {0x38aac000}, {0x38aae000}, {0x38ab0000}, {0x38ab2000}, {0x38ab4000}, {0x38ab6000}, {0x38ab8000}, {0x38aba000}, {0x38abc000}, {0x38abe000}, {0x38ac0000}, {0x38ac2000}, {0x38ac4000}, {0x38ac6000}, {0x38ac8000}, {0x38aca000}, {0x38acc000}, {0x38ace000}, {0x38ad0000}, {0x38ad2000}, {0x38ad4000}, {0x38ad6000}, {0x38ad8000}, {0x38ada000}, {0x38adc000}, {0x38ade000}, {0x38ae0000}, {0x38ae2000}, {0x38ae4000}, {0x38ae6000}, {0x38ae8000}, {0x38aea000}, {0x38aec000}, {0x38aee000}, {0x38af0000}, {0x38af2000}, {0x38af4000}, {0x38af6000}, {0x38af8000}, {0x38afa000}, {0x38afc000}, {0x38afe000}, {0x38b00000}, {0x38b02000}, {0x38b04000}, {0x38b06000}, {0x38b08000}, {0x38b0a000}, {0x38b0c000}, {0x38b0e000}, {0x38b10000}, {0x38b12000}, {0x38b14000}, {0x38b16000}, {0x38b18000}, {0x38b1a000}, {0x38b1c000}, {0x38b1e000}, {0x38b20000}, {0x38b22000}, {0x38b24000}, {0x38b26000}, {0x38b28000}, {0x38b2a000}, {0x38b2c000}, {0x38b2e000}, {0x38b30000}, {0x38b32000}, {0x38b34000}, {0x38b36000}, {0x38b38000}, {0x38b3a000}, {0x38b3c000}, {0x38b3e000}, {0x38b40000}, {0x38b42000}, {0x38b44000}, {0x38b46000}, {0x38b48000}, {0x38b4a000}, {0x38b4c000}, {0x38b4e000}, {0x38b50000}, {0x38b52000}, {0x38b54000}, {0x38b56000}, {0x38b58000}, {0x38b5a000}, {0x38b5c000}, {0x38b5e000}, {0x38b60000}, {0x38b62000}, {0x38b64000}, {0x38b66000}, {0x38b68000}, {0x38b6a000}, {0x38b6c000}, {0x38b6e000}, {0x38b70000}, {0x38b72000}, {0x38b74000}, {0x38b76000}, {0x38b78000}, {0x38b7a000}, {0x38b7c000}, {0x38b7e000}, {0x38b80000}, {0x38b82000}, {0x38b84000}, {0x38b86000}, {0x38b88000}, {0x38b8a000}, {0x38b8c000}, {0x38b8e000}, {0x38b90000}, {0x38b92000}, {0x38b94000}, {0x38b96000}, {0x38b98000}, {0x38b9a000}, {0x38b9c000}, {0x38b9e000}, {0x38ba0000}, {0x38ba2000}, {0x38ba4000}, {0x38ba6000}, {0x38ba8000}, {0x38baa000}, {0x38bac000}, {0x38bae000}, {0x38bb0000}, {0x38bb2000}, {0x38bb4000}, {0x38bb6000}, {0x38bb8000}, {0x38bba000}, {0x38bbc000}, {0x38bbe000}, {0x38bc0000}, {0x38bc2000}, {0x38bc4000}, {0x38bc6000}, {0x38bc8000}, {0x38bca000}, {0x38bcc000}, {0x38bce000}, {0x38bd0000}, {0x38bd2000}, {0x38bd4000}, {0x38bd6000}, {0x38bd8000}, {0x38bda000}, {0x38bdc000}, {0x38bde000}, {0x38be0000}, {0x38be2000}, {0x38be4000}, {0x38be6000}, {0x38be8000}, {0x38bea000}, {0x38bec000}, {0x38bee000}, {0x38bf0000}, {0x38bf2000}, {0x38bf4000}, {0x38bf6000}, {0x38bf8000}, {0x38bfa000}, {0x38bfc000}, {0x38bfe000}, {0x38c00000}, {0x38c02000}, {0x38c04000}, {0x38c06000}, {0x38c08000}, {0x38c0a000}, {0x38c0c000}, {0x38c0e000}, {0x38c10000}, {0x38c12000}, {0x38c14000}, {0x38c16000}, {0x38c18000}, {0x38c1a000}, {0x38c1c000}, {0x38c1e000}, {0x38c20000}, {0x38c22000}, {0x38c24000}, {0x38c26000}, {0x38c28000}, {0x38c2a000}, {0x38c2c000}, {0x38c2e000}, {0x38c30000}, {0x38c32000}, {0x38c34000}, {0x38c36000}, {0x38c38000}, {0x38c3a000}, {0x38c3c000}, {0x38c3e000}, {0x38c40000}, {0x38c42000}, {0x38c44000}, {0x38c46000}, {0x38c48000}, {0x38c4a000}, {0x38c4c000}, {0x38c4e000}, {0x38c50000}, {0x38c52000}, {0x38c54000}, {0x38c56000}, {0x38c58000}, {0x38c5a000}, {0x38c5c000}, {0x38c5e000}, {0x38c60000}, {0x38c62000}, {0x38c64000}, {0x38c66000}, {0x38c68000}, {0x38c6a000}, {0x38c6c000}, {0x38c6e000}, {0x38c70000}, {0x38c72000}, {0x38c74000}, {0x38c76000}, {0x38c78000}, {0x38c7a000}, {0x38c7c000}, {0x38c7e000}, {0x38c80000}, {0x38c82000}, {0x38c84000}, {0x38c86000}, {0x38c88000}, {0x38c8a000}, {0x38c8c000}, {0x38c8e000}, {0x38c90000}, {0x38c92000}, {0x38c94000}, {0x38c96000}, {0x38c98000}, {0x38c9a000}, {0x38c9c000}, {0x38c9e000}, {0x38ca0000}, {0x38ca2000}, {0x38ca4000}, {0x38ca6000}, {0x38ca8000}, {0x38caa000}, {0x38cac000}, {0x38cae000}, {0x38cb0000}, {0x38cb2000}, {0x38cb4000}, {0x38cb6000}, {0x38cb8000}, {0x38cba000}, {0x38cbc000}, {0x38cbe000}, {0x38cc0000}, {0x38cc2000}, {0x38cc4000}, {0x38cc6000}, {0x38cc8000}, {0x38cca000}, {0x38ccc000}, {0x38cce000}, {0x38cd0000}, {0x38cd2000}, {0x38cd4000}, {0x38cd6000}, {0x38cd8000}, {0x38cda000}, {0x38cdc000}, {0x38cde000}, {0x38ce0000}, {0x38ce2000}, {0x38ce4000}, {0x38ce6000}, {0x38ce8000}, {0x38cea000}, {0x38cec000}, {0x38cee000}, {0x38cf0000}, {0x38cf2000}, {0x38cf4000}, {0x38cf6000}, {0x38cf8000}, {0x38cfa000}, {0x38cfc000}, {0x38cfe000}, {0x38d00000}, {0x38d02000}, {0x38d04000}, {0x38d06000}, {0x38d08000}, {0x38d0a000}, {0x38d0c000}, {0x38d0e000}, {0x38d10000}, {0x38d12000}, {0x38d14000}, {0x38d16000}, {0x38d18000}, {0x38d1a000}, {0x38d1c000}, {0x38d1e000}, {0x38d20000}, {0x38d22000}, {0x38d24000}, {0x38d26000}, {0x38d28000}, {0x38d2a000}, {0x38d2c000}, {0x38d2e000}, {0x38d30000}, {0x38d32000}, {0x38d34000}, {0x38d36000}, {0x38d38000}, {0x38d3a000}, {0x38d3c000}, {0x38d3e000}, {0x38d40000}, {0x38d42000}, {0x38d44000}, {0x38d46000}, {0x38d48000}, {0x38d4a000}, {0x38d4c000}, {0x38d4e000}, {0x38d50000}, {0x38d52000}, {0x38d54000}, {0x38d56000}, {0x38d58000}, {0x38d5a000}, {0x38d5c000}, {0x38d5e000}, {0x38d60000}, {0x38d62000}, {0x38d64000}, {0x38d66000}, {0x38d68000}, {0x38d6a000}, {0x38d6c000}, {0x38d6e000}, {0x38d70000}, {0x38d72000}, {0x38d74000}, {0x38d76000}, {0x38d78000}, {0x38d7a000}, {0x38d7c000}, {0x38d7e000}, {0x38d80000}, {0x38d82000}, {0x38d84000}, {0x38d86000}, {0x38d88000}, {0x38d8a000}, {0x38d8c000}, {0x38d8e000}, {0x38d90000}, {0x38d92000}, {0x38d94000}, {0x38d96000}, {0x38d98000}, {0x38d9a000}, {0x38d9c000}, {0x38d9e000}, {0x38da0000}, {0x38da2000}, {0x38da4000}, {0x38da6000}, {0x38da8000}, {0x38daa000}, {0x38dac000}, {0x38dae000}, {0x38db0000}, {0x38db2000}, {0x38db4000}, {0x38db6000}, {0x38db8000}, {0x38dba000}, {0x38dbc000}, {0x38dbe000}, {0x38dc0000}, {0x38dc2000}, {0x38dc4000}, {0x38dc6000}, {0x38dc8000}, {0x38dca000}, {0x38dcc000}, {0x38dce000}, {0x38dd0000}, {0x38dd2000}, {0x38dd4000}, {0x38dd6000}, {0x38dd8000}, {0x38dda000}, {0x38ddc000}, {0x38dde000}, {0x38de0000}, {0x38de2000}, {0x38de4000}, {0x38de6000}, {0x38de8000}, {0x38dea000}, {0x38dec000}, {0x38dee000}, {0x38df0000}, {0x38df2000}, {0x38df4000}, {0x38df6000}, {0x38df8000}, {0x38dfa000}, {0x38dfc000}, {0x38dfe000}, {0x38e00000}, {0x38e02000}, {0x38e04000}, {0x38e06000}, {0x38e08000}, {0x38e0a000}, {0x38e0c000}, {0x38e0e000}, {0x38e10000}, {0x38e12000}, {0x38e14000}, {0x38e16000}, {0x38e18000}, {0x38e1a000}, {0x38e1c000}, {0x38e1e000}, {0x38e20000}, {0x38e22000}, {0x38e24000}, {0x38e26000}, {0x38e28000}, {0x38e2a000}, {0x38e2c000}, {0x38e2e000}, {0x38e30000}, {0x38e32000}, {0x38e34000}, {0x38e36000}, {0x38e38000}, {0x38e3a000}, {0x38e3c000}, {0x38e3e000}, {0x38e40000}, {0x38e42000}, {0x38e44000}, {0x38e46000}, {0x38e48000}, {0x38e4a000}, {0x38e4c000}, {0x38e4e000}, {0x38e50000}, {0x38e52000}, {0x38e54000}, {0x38e56000}, {0x38e58000}, {0x38e5a000}, {0x38e5c000}, {0x38e5e000}, {0x38e60000}, {0x38e62000}, {0x38e64000}, {0x38e66000}, {0x38e68000}, {0x38e6a000}, {0x38e6c000}, {0x38e6e000}, {0x38e70000}, {0x38e72000}, {0x38e74000}, {0x38e76000}, {0x38e78000}, {0x38e7a000}, {0x38e7c000}, {0x38e7e000}, {0x38e80000}, {0x38e82000}, {0x38e84000}, {0x38e86000}, {0x38e88000}, {0x38e8a000}, {0x38e8c000}, {0x38e8e000}, {0x38e90000}, {0x38e92000}, {0x38e94000}, {0x38e96000}, {0x38e98000}, {0x38e9a000}, {0x38e9c000}, {0x38e9e000}, {0x38ea0000}, {0x38ea2000}, {0x38ea4000}, {0x38ea6000}, {0x38ea8000}, {0x38eaa000}, {0x38eac000}, {0x38eae000}, {0x38eb0000}, {0x38eb2000}, {0x38eb4000}, {0x38eb6000}, {0x38eb8000}, {0x38eba000}, {0x38ebc000}, {0x38ebe000}, {0x38ec0000}, {0x38ec2000}, {0x38ec4000}, {0x38ec6000}, {0x38ec8000}, {0x38eca000}, {0x38ecc000}, {0x38ece000}, {0x38ed0000}, {0x38ed2000}, {0x38ed4000}, {0x38ed6000}, {0x38ed8000}, {0x38eda000}, {0x38edc000}, {0x38ede000}, {0x38ee0000}, {0x38ee2000}, {0x38ee4000}, {0x38ee6000}, {0x38ee8000}, {0x38eea000}, {0x38eec000}, {0x38eee000}, {0x38ef0000}, {0x38ef2000}, {0x38ef4000}, {0x38ef6000}, {0x38ef8000}, {0x38efa000}, {0x38efc000}, {0x38efe000}, {0x38f00000}, {0x38f02000}, {0x38f04000}, {0x38f06000}, {0x38f08000}, {0x38f0a000}, {0x38f0c000}, {0x38f0e000}, {0x38f10000}, {0x38f12000}, {0x38f14000}, {0x38f16000}, {0x38f18000}, {0x38f1a000}, {0x38f1c000}, {0x38f1e000}, {0x38f20000}, {0x38f22000}, {0x38f24000}, {0x38f26000}, {0x38f28000}, {0x38f2a000}, {0x38f2c000}, {0x38f2e000}, {0x38f30000}, {0x38f32000}, {0x38f34000}, {0x38f36000}, {0x38f38000}, {0x38f3a000}, {0x38f3c000}, {0x38f3e000}, {0x38f40000}, {0x38f42000}, {0x38f44000}, {0x38f46000}, {0x38f48000}, {0x38f4a000}, {0x38f4c000}, {0x38f4e000}, {0x38f50000}, {0x38f52000}, {0x38f54000}, {0x38f56000}, {0x38f58000}, {0x38f5a000}, {0x38f5c000}, {0x38f5e000}, {0x38f60000}, {0x38f62000}, {0x38f64000}, {0x38f66000}, {0x38f68000}, {0x38f6a000}, {0x38f6c000}, {0x38f6e000}, {0x38f70000}, {0x38f72000}, {0x38f74000}, {0x38f76000}, {0x38f78000}, {0x38f7a000}, {0x38f7c000}, {0x38f7e000}, {0x38f80000}, {0x38f82000}, {0x38f84000}, {0x38f86000}, {0x38f88000}, {0x38f8a000}, {0x38f8c000}, {0x38f8e000}, {0x38f90000}, {0x38f92000}, {0x38f94000}, {0x38f96000}, {0x38f98000}, {0x38f9a000}, {0x38f9c000}, {0x38f9e000}, {0x38fa0000}, {0x38fa2000}, {0x38fa4000}, {0x38fa6000}, {0x38fa8000}, {0x38faa000}, {0x38fac000}, {0x38fae000}, {0x38fb0000}, {0x38fb2000}, {0x38fb4000}, {0x38fb6000}, {0x38fb8000}, {0x38fba000}, {0x38fbc000}, {0x38fbe000}, {0x38fc0000}, {0x38fc2000}, {0x38fc4000}, {0x38fc6000}, {0x38fc8000}, {0x38fca000}, {0x38fcc000}, {0x38fce000}, {0x38fd0000}, {0x38fd2000}, {0x38fd4000}, {0x38fd6000}, {0x38fd8000}, {0x38fda000}, {0x38fdc000}, {0x38fde000}, {0x38fe0000}, {0x38fe2000}, {0x38fe4000}, {0x38fe6000}, {0x38fe8000}, {0x38fea000}, {0x38fec000}, {0x38fee000}, {0x38ff0000}, {0x38ff2000}, {0x38ff4000}, {0x38ff6000}, {0x38ff8000}, {0x38ffa000}, {0x38ffc000}, {0x38ffe000}, {0x39000000}, {0x39002000}, {0x39004000}, {0x39006000}, {0x39008000}, {0x3900a000}, {0x3900c000}, {0x3900e000}, {0x39010000}, {0x39012000}, {0x39014000}, {0x39016000}, {0x39018000}, {0x3901a000}, {0x3901c000}, {0x3901e000}, {0x39020000}, {0x39022000}, {0x39024000}, {0x39026000}, {0x39028000}, {0x3902a000}, {0x3902c000}, {0x3902e000}, {0x39030000}, {0x39032000}, {0x39034000}, {0x39036000}, {0x39038000}, {0x3903a000}, {0x3903c000}, {0x3903e000}, {0x39040000}, {0x39042000}, {0x39044000}, {0x39046000}, {0x39048000}, {0x3904a000}, {0x3904c000}, {0x3904e000}, {0x39050000}, {0x39052000}, {0x39054000}, {0x39056000}, {0x39058000}, {0x3905a000}, {0x3905c000}, {0x3905e000}, {0x39060000}, {0x39062000}, {0x39064000}, {0x39066000}, {0x39068000}, {0x3906a000}, {0x3906c000}, {0x3906e000}, {0x39070000}, {0x39072000}, {0x39074000}, {0x39076000}, {0x39078000}, {0x3907a000}, {0x3907c000}, {0x3907e000}, {0x39080000}, {0x39082000}, {0x39084000}, {0x39086000}, {0x39088000}, {0x3908a000}, {0x3908c000}, {0x3908e000}, {0x39090000}, {0x39092000}, {0x39094000}, {0x39096000}, {0x39098000}, {0x3909a000}, {0x3909c000}, {0x3909e000}, {0x390a0000}, {0x390a2000}, {0x390a4000}, {0x390a6000}, {0x390a8000}, {0x390aa000}, {0x390ac000}, {0x390ae000}, {0x390b0000}, {0x390b2000}, {0x390b4000}, {0x390b6000}, {0x390b8000}, {0x390ba000}, {0x390bc000}, {0x390be000}, {0x390c0000}, {0x390c2000}, {0x390c4000}, {0x390c6000}, {0x390c8000}, {0x390ca000}, {0x390cc000}, {0x390ce000}, {0x390d0000}, {0x390d2000}, {0x390d4000}, {0x390d6000}, {0x390d8000}, {0x390da000}, {0x390dc000}, {0x390de000}, {0x390e0000}, {0x390e2000}, {0x390e4000}, {0x390e6000}, {0x390e8000}, {0x390ea000}, {0x390ec000}, {0x390ee000}, {0x390f0000}, {0x390f2000}, {0x390f4000}, {0x390f6000}, {0x390f8000}, {0x390fa000}, {0x390fc000}, {0x390fe000}, {0x39100000}, {0x39102000}, {0x39104000}, {0x39106000}, {0x39108000}, {0x3910a000}, {0x3910c000}, {0x3910e000}, {0x39110000}, {0x39112000}, {0x39114000}, {0x39116000}, {0x39118000}, {0x3911a000}, {0x3911c000}, {0x3911e000}, {0x39120000}, {0x39122000}, {0x39124000}, {0x39126000}, {0x39128000}, {0x3912a000}, {0x3912c000}, {0x3912e000}, {0x39130000}, {0x39132000}, {0x39134000}, {0x39136000}, {0x39138000}, {0x3913a000}, {0x3913c000}, {0x3913e000}, {0x39140000}, {0x39142000}, {0x39144000}, {0x39146000}, {0x39148000}, {0x3914a000}, {0x3914c000}, {0x3914e000}, {0x39150000}, {0x39152000}, {0x39154000}, {0x39156000}, {0x39158000}, {0x3915a000}, {0x3915c000}, {0x3915e000}, {0x39160000}, {0x39162000}, {0x39164000}, {0x39166000}, {0x39168000}, {0x3916a000}, {0x3916c000}, {0x3916e000}, {0x39170000}, {0x39172000}, {0x39174000}, {0x39176000}, {0x39178000}, {0x3917a000}, {0x3917c000}, {0x3917e000}, {0x39180000}, {0x39182000}, {0x39184000}, {0x39186000}, {0x39188000}, {0x3918a000}, {0x3918c000}, {0x3918e000}, {0x39190000}, {0x39192000}, {0x39194000}, {0x39196000}, {0x39198000}, {0x3919a000}, {0x3919c000}, {0x3919e000}, {0x391a0000}, {0x391a2000}, {0x391a4000}, {0x391a6000}, {0x391a8000}, {0x391aa000}, {0x391ac000}, {0x391ae000}, {0x391b0000}, {0x391b2000}, {0x391b4000}, {0x391b6000}, {0x391b8000}, {0x391ba000}, {0x391bc000}, {0x391be000}, {0x391c0000}, {0x391c2000}, {0x391c4000}, {0x391c6000}, {0x391c8000}, {0x391ca000}, {0x391cc000}, {0x391ce000}, {0x391d0000}, {0x391d2000}, {0x391d4000}, {0x391d6000}, {0x391d8000}, {0x391da000}, {0x391dc000}, {0x391de000}, {0x391e0000}, {0x391e2000}, {0x391e4000}, {0x391e6000}, {0x391e8000}, {0x391ea000}, {0x391ec000}, {0x391ee000}, {0x391f0000}, {0x391f2000}, {0x391f4000}, {0x391f6000}, {0x391f8000}, {0x391fa000}, {0x391fc000}, {0x391fe000}, {0x39200000}, {0x39202000}, {0x39204000}, {0x39206000}, {0x39208000}, {0x3920a000}, {0x3920c000}, {0x3920e000}, {0x39210000}, {0x39212000}, {0x39214000}, {0x39216000}, {0x39218000}, {0x3921a000}, {0x3921c000}, {0x3921e000}, {0x39220000}, {0x39222000}, {0x39224000}, {0x39226000}, {0x39228000}, {0x3922a000}, {0x3922c000}, {0x3922e000}, {0x39230000}, {0x39232000}, {0x39234000}, {0x39236000}, {0x39238000}, {0x3923a000}, {0x3923c000}, {0x3923e000}, {0x39240000}, {0x39242000}, {0x39244000}, {0x39246000}, {0x39248000}, {0x3924a000}, {0x3924c000}, {0x3924e000}, {0x39250000}, {0x39252000}, {0x39254000}, {0x39256000}, {0x39258000}, {0x3925a000}, {0x3925c000}, {0x3925e000}, {0x39260000}, {0x39262000}, {0x39264000}, {0x39266000}, {0x39268000}, {0x3926a000}, {0x3926c000}, {0x3926e000}, {0x39270000}, {0x39272000}, {0x39274000}, {0x39276000}, {0x39278000}, {0x3927a000}, {0x3927c000}, {0x3927e000}, {0x39280000}, {0x39282000}, {0x39284000}, {0x39286000}, {0x39288000}, {0x3928a000}, {0x3928c000}, {0x3928e000}, {0x39290000}, {0x39292000}, {0x39294000}, {0x39296000}, {0x39298000}, {0x3929a000}, {0x3929c000}, {0x3929e000}, {0x392a0000}, {0x392a2000}, {0x392a4000}, {0x392a6000}, {0x392a8000}, {0x392aa000}, {0x392ac000}, {0x392ae000}, {0x392b0000}, {0x392b2000}, {0x392b4000}, {0x392b6000}, {0x392b8000}, {0x392ba000}, {0x392bc000}, {0x392be000}, {0x392c0000}, {0x392c2000}, {0x392c4000}, {0x392c6000}, {0x392c8000}, {0x392ca000}, {0x392cc000}, {0x392ce000}, {0x392d0000}, {0x392d2000}, {0x392d4000}, {0x392d6000}, {0x392d8000}, {0x392da000}, {0x392dc000}, {0x392de000}, {0x392e0000}, {0x392e2000}, {0x392e4000}, {0x392e6000}, {0x392e8000}, {0x392ea000}, {0x392ec000}, {0x392ee000}, {0x392f0000}, {0x392f2000}, {0x392f4000}, {0x392f6000}, {0x392f8000}, {0x392fa000}, {0x392fc000}, {0x392fe000}, {0x39300000}, {0x39302000}, {0x39304000}, {0x39306000}, {0x39308000}, {0x3930a000}, {0x3930c000}, {0x3930e000}, {0x39310000}, {0x39312000}, {0x39314000}, {0x39316000}, {0x39318000}, {0x3931a000}, {0x3931c000}, {0x3931e000}, {0x39320000}, {0x39322000}, {0x39324000}, {0x39326000}, {0x39328000}, {0x3932a000}, {0x3932c000}, {0x3932e000}, {0x39330000}, {0x39332000}, {0x39334000}, {0x39336000}, {0x39338000}, {0x3933a000}, {0x3933c000}, {0x3933e000}, {0x39340000}, {0x39342000}, {0x39344000}, {0x39346000}, {0x39348000}, {0x3934a000}, {0x3934c000}, {0x3934e000}, {0x39350000}, {0x39352000}, {0x39354000}, {0x39356000}, {0x39358000}, {0x3935a000}, {0x3935c000}, {0x3935e000}, {0x39360000}, {0x39362000}, {0x39364000}, {0x39366000}, {0x39368000}, {0x3936a000}, {0x3936c000}, {0x3936e000}, {0x39370000}, {0x39372000}, {0x39374000}, {0x39376000}, {0x39378000}, {0x3937a000}, {0x3937c000}, {0x3937e000}, {0x39380000}, {0x39382000}, {0x39384000}, {0x39386000}, {0x39388000}, {0x3938a000}, {0x3938c000}, {0x3938e000}, {0x39390000}, {0x39392000}, {0x39394000}, {0x39396000}, {0x39398000}, {0x3939a000}, {0x3939c000}, {0x3939e000}, {0x393a0000}, {0x393a2000}, {0x393a4000}, {0x393a6000}, {0x393a8000}, {0x393aa000}, {0x393ac000}, {0x393ae000}, {0x393b0000}, {0x393b2000}, {0x393b4000}, {0x393b6000}, {0x393b8000}, {0x393ba000}, {0x393bc000}, {0x393be000}, {0x393c0000}, {0x393c2000}, {0x393c4000}, {0x393c6000}, {0x393c8000}, {0x393ca000}, {0x393cc000}, {0x393ce000}, {0x393d0000}, {0x393d2000}, {0x393d4000}, {0x393d6000}, {0x393d8000}, {0x393da000}, {0x393dc000}, {0x393de000}, {0x393e0000}, {0x393e2000}, {0x393e4000}, {0x393e6000}, {0x393e8000}, {0x393ea000}, {0x393ec000}, {0x393ee000}, {0x393f0000}, {0x393f2000}, {0x393f4000}, {0x393f6000}, {0x393f8000}, {0x393fa000}, {0x393fc000}, {0x393fe000}, {0x39400000}, {0x39402000}, {0x39404000}, {0x39406000}, {0x39408000}, {0x3940a000}, {0x3940c000}, {0x3940e000}, {0x39410000}, {0x39412000}, {0x39414000}, {0x39416000}, {0x39418000}, {0x3941a000}, {0x3941c000}, {0x3941e000}, {0x39420000}, {0x39422000}, {0x39424000}, {0x39426000}, {0x39428000}, {0x3942a000}, {0x3942c000}, {0x3942e000}, {0x39430000}, {0x39432000}, {0x39434000}, {0x39436000}, {0x39438000}, {0x3943a000}, {0x3943c000}, {0x3943e000}, {0x39440000}, {0x39442000}, {0x39444000}, {0x39446000}, {0x39448000}, {0x3944a000}, {0x3944c000}, {0x3944e000}, {0x39450000}, {0x39452000}, {0x39454000}, {0x39456000}, {0x39458000}, {0x3945a000}, {0x3945c000}, {0x3945e000}, {0x39460000}, {0x39462000}, {0x39464000}, {0x39466000}, {0x39468000}, {0x3946a000}, {0x3946c000}, {0x3946e000}, {0x39470000}, {0x39472000}, {0x39474000}, {0x39476000}, {0x39478000}, {0x3947a000}, {0x3947c000}, {0x3947e000}, {0x39480000}, {0x39482000}, {0x39484000}, {0x39486000}, {0x39488000}, {0x3948a000}, {0x3948c000}, {0x3948e000}, {0x39490000}, {0x39492000}, {0x39494000}, {0x39496000}, {0x39498000}, {0x3949a000}, {0x3949c000}, {0x3949e000}, {0x394a0000}, {0x394a2000}, {0x394a4000}, {0x394a6000}, {0x394a8000}, {0x394aa000}, {0x394ac000}, {0x394ae000}, {0x394b0000}, {0x394b2000}, {0x394b4000}, {0x394b6000}, {0x394b8000}, {0x394ba000}, {0x394bc000}, {0x394be000}, {0x394c0000}, {0x394c2000}, {0x394c4000}, {0x394c6000}, {0x394c8000}, {0x394ca000}, {0x394cc000}, {0x394ce000}, {0x394d0000}, {0x394d2000}, {0x394d4000}, {0x394d6000}, {0x394d8000}, {0x394da000}, {0x394dc000}, {0x394de000}, {0x394e0000}, {0x394e2000}, {0x394e4000}, {0x394e6000}, {0x394e8000}, {0x394ea000}, {0x394ec000}, {0x394ee000}, {0x394f0000}, {0x394f2000}, {0x394f4000}, {0x394f6000}, {0x394f8000}, {0x394fa000}, {0x394fc000}, {0x394fe000}, {0x39500000}, {0x39502000}, {0x39504000}, {0x39506000}, {0x39508000}, {0x3950a000}, {0x3950c000}, {0x3950e000}, {0x39510000}, {0x39512000}, {0x39514000}, {0x39516000}, {0x39518000}, {0x3951a000}, {0x3951c000}, {0x3951e000}, {0x39520000}, {0x39522000}, {0x39524000}, {0x39526000}, {0x39528000}, {0x3952a000}, {0x3952c000}, {0x3952e000}, {0x39530000}, {0x39532000}, {0x39534000}, {0x39536000}, {0x39538000}, {0x3953a000}, {0x3953c000}, {0x3953e000}, {0x39540000}, {0x39542000}, {0x39544000}, {0x39546000}, {0x39548000}, {0x3954a000}, {0x3954c000}, {0x3954e000}, {0x39550000}, {0x39552000}, {0x39554000}, {0x39556000}, {0x39558000}, {0x3955a000}, {0x3955c000}, {0x3955e000}, {0x39560000}, {0x39562000}, {0x39564000}, {0x39566000}, {0x39568000}, {0x3956a000}, {0x3956c000}, {0x3956e000}, {0x39570000}, {0x39572000}, {0x39574000}, {0x39576000}, {0x39578000}, {0x3957a000}, {0x3957c000}, {0x3957e000}, {0x39580000}, {0x39582000}, {0x39584000}, {0x39586000}, {0x39588000}, {0x3958a000}, {0x3958c000}, {0x3958e000}, {0x39590000}, {0x39592000}, {0x39594000}, {0x39596000}, {0x39598000}, {0x3959a000}, {0x3959c000}, {0x3959e000}, {0x395a0000}, {0x395a2000}, {0x395a4000}, {0x395a6000}, {0x395a8000}, {0x395aa000}, {0x395ac000}, {0x395ae000}, {0x395b0000}, {0x395b2000}, {0x395b4000}, {0x395b6000}, {0x395b8000}, {0x395ba000}, {0x395bc000}, {0x395be000}, {0x395c0000}, {0x395c2000}, {0x395c4000}, {0x395c6000}, {0x395c8000}, {0x395ca000}, {0x395cc000}, {0x395ce000}, {0x395d0000}, {0x395d2000}, {0x395d4000}, {0x395d6000}, {0x395d8000}, {0x395da000}, {0x395dc000}, {0x395de000}, {0x395e0000}, {0x395e2000}, {0x395e4000}, {0x395e6000}, {0x395e8000}, {0x395ea000}, {0x395ec000}, {0x395ee000}, {0x395f0000}, {0x395f2000}, {0x395f4000}, {0x395f6000}, {0x395f8000}, {0x395fa000}, {0x395fc000}, {0x395fe000}, {0x39600000}, {0x39602000}, {0x39604000}, {0x39606000}, {0x39608000}, {0x3960a000}, {0x3960c000}, {0x3960e000}, {0x39610000}, {0x39612000}, {0x39614000}, {0x39616000}, {0x39618000}, {0x3961a000}, {0x3961c000}, {0x3961e000}, {0x39620000}, {0x39622000}, {0x39624000}, {0x39626000}, {0x39628000}, {0x3962a000}, {0x3962c000}, {0x3962e000}, {0x39630000}, {0x39632000}, {0x39634000}, {0x39636000}, {0x39638000}, {0x3963a000}, {0x3963c000}, {0x3963e000}, {0x39640000}, {0x39642000}, {0x39644000}, {0x39646000}, {0x39648000}, {0x3964a000}, {0x3964c000}, {0x3964e000}, {0x39650000}, {0x39652000}, {0x39654000}, {0x39656000}, {0x39658000}, {0x3965a000}, {0x3965c000}, {0x3965e000}, {0x39660000}, {0x39662000}, {0x39664000}, {0x39666000}, {0x39668000}, {0x3966a000}, {0x3966c000}, {0x3966e000}, {0x39670000}, {0x39672000}, {0x39674000}, {0x39676000}, {0x39678000}, {0x3967a000}, {0x3967c000}, {0x3967e000}, {0x39680000}, {0x39682000}, {0x39684000}, {0x39686000}, {0x39688000}, {0x3968a000}, {0x3968c000}, {0x3968e000}, {0x39690000}, {0x39692000}, {0x39694000}, {0x39696000}, {0x39698000}, {0x3969a000}, {0x3969c000}, {0x3969e000}, {0x396a0000}, {0x396a2000}, {0x396a4000}, {0x396a6000}, {0x396a8000}, {0x396aa000}, {0x396ac000}, {0x396ae000}, {0x396b0000}, {0x396b2000}, {0x396b4000}, {0x396b6000}, {0x396b8000}, {0x396ba000}, {0x396bc000}, {0x396be000}, {0x396c0000}, {0x396c2000}, {0x396c4000}, {0x396c6000}, {0x396c8000}, {0x396ca000}, {0x396cc000}, {0x396ce000}, {0x396d0000}, {0x396d2000}, {0x396d4000}, {0x396d6000}, {0x396d8000}, {0x396da000}, {0x396dc000}, {0x396de000}, {0x396e0000}, {0x396e2000}, {0x396e4000}, {0x396e6000}, {0x396e8000}, {0x396ea000}, {0x396ec000}, {0x396ee000}, {0x396f0000}, {0x396f2000}, {0x396f4000}, {0x396f6000}, {0x396f8000}, {0x396fa000}, {0x396fc000}, {0x396fe000}, {0x39700000}, {0x39702000}, {0x39704000}, {0x39706000}, {0x39708000}, {0x3970a000}, {0x3970c000}, {0x3970e000}, {0x39710000}, {0x39712000}, {0x39714000}, {0x39716000}, {0x39718000}, {0x3971a000}, {0x3971c000}, {0x3971e000}, {0x39720000}, {0x39722000}, {0x39724000}, {0x39726000}, {0x39728000}, {0x3972a000}, {0x3972c000}, {0x3972e000}, {0x39730000}, {0x39732000}, {0x39734000}, {0x39736000}, {0x39738000}, {0x3973a000}, {0x3973c000}, {0x3973e000}, {0x39740000}, {0x39742000}, {0x39744000}, {0x39746000}, {0x39748000}, {0x3974a000}, {0x3974c000}, {0x3974e000}, {0x39750000}, {0x39752000}, {0x39754000}, {0x39756000}, {0x39758000}, {0x3975a000}, {0x3975c000}, {0x3975e000}, {0x39760000}, {0x39762000}, {0x39764000}, {0x39766000}, {0x39768000}, {0x3976a000}, {0x3976c000}, {0x3976e000}, {0x39770000}, {0x39772000}, {0x39774000}, {0x39776000}, {0x39778000}, {0x3977a000}, {0x3977c000}, {0x3977e000}, {0x39780000}, {0x39782000}, {0x39784000}, {0x39786000}, {0x39788000}, {0x3978a000}, {0x3978c000}, {0x3978e000}, {0x39790000}, {0x39792000}, {0x39794000}, {0x39796000}, {0x39798000}, {0x3979a000}, {0x3979c000}, {0x3979e000}, {0x397a0000}, {0x397a2000}, {0x397a4000}, {0x397a6000}, {0x397a8000}, {0x397aa000}, {0x397ac000}, {0x397ae000}, {0x397b0000}, {0x397b2000}, {0x397b4000}, {0x397b6000}, {0x397b8000}, {0x397ba000}, {0x397bc000}, {0x397be000}, {0x397c0000}, {0x397c2000}, {0x397c4000}, {0x397c6000}, {0x397c8000}, {0x397ca000}, {0x397cc000}, {0x397ce000}, {0x397d0000}, {0x397d2000}, {0x397d4000}, {0x397d6000}, {0x397d8000}, {0x397da000}, {0x397dc000}, {0x397de000}, {0x397e0000}, {0x397e2000}, {0x397e4000}, {0x397e6000}, {0x397e8000}, {0x397ea000}, {0x397ec000}, {0x397ee000}, {0x397f0000}, {0x397f2000}, {0x397f4000}, {0x397f6000}, {0x397f8000}, {0x397fa000}, {0x397fc000}, {0x397fe000}, {0x39800000}, {0x39802000}, {0x39804000}, {0x39806000}, {0x39808000}, {0x3980a000}, {0x3980c000}, {0x3980e000}, {0x39810000}, {0x39812000}, {0x39814000}, {0x39816000}, {0x39818000}, {0x3981a000}, {0x3981c000}, {0x3981e000}, {0x39820000}, {0x39822000}, {0x39824000}, {0x39826000}, {0x39828000}, {0x3982a000}, {0x3982c000}, {0x3982e000}, {0x39830000}, {0x39832000}, {0x39834000}, {0x39836000}, {0x39838000}, {0x3983a000}, {0x3983c000}, {0x3983e000}, {0x39840000}, {0x39842000}, {0x39844000}, {0x39846000}, {0x39848000}, {0x3984a000}, {0x3984c000}, {0x3984e000}, {0x39850000}, {0x39852000}, {0x39854000}, {0x39856000}, {0x39858000}, {0x3985a000}, {0x3985c000}, {0x3985e000}, {0x39860000}, {0x39862000}, {0x39864000}, {0x39866000}, {0x39868000}, {0x3986a000}, {0x3986c000}, {0x3986e000}, {0x39870000}, {0x39872000}, {0x39874000}, {0x39876000}, {0x39878000}, {0x3987a000}, {0x3987c000}, {0x3987e000}, {0x39880000}, {0x39882000}, {0x39884000}, {0x39886000}, {0x39888000}, {0x3988a000}, {0x3988c000}, {0x3988e000}, {0x39890000}, {0x39892000}, {0x39894000}, {0x39896000}, {0x39898000}, {0x3989a000}, {0x3989c000}, {0x3989e000}, {0x398a0000}, {0x398a2000}, {0x398a4000}, {0x398a6000}, {0x398a8000}, {0x398aa000}, {0x398ac000}, {0x398ae000}, {0x398b0000}, {0x398b2000}, {0x398b4000}, {0x398b6000}, {0x398b8000}, {0x398ba000}, {0x398bc000}, {0x398be000}, {0x398c0000}, {0x398c2000}, {0x398c4000}, {0x398c6000}, {0x398c8000}, {0x398ca000}, {0x398cc000}, {0x398ce000}, {0x398d0000}, {0x398d2000}, {0x398d4000}, {0x398d6000}, {0x398d8000}, {0x398da000}, {0x398dc000}, {0x398de000}, {0x398e0000}, {0x398e2000}, {0x398e4000}, {0x398e6000}, {0x398e8000}, {0x398ea000}, {0x398ec000}, {0x398ee000}, {0x398f0000}, {0x398f2000}, {0x398f4000}, {0x398f6000}, {0x398f8000}, {0x398fa000}, {0x398fc000}, {0x398fe000}, {0x39900000}, {0x39902000}, {0x39904000}, {0x39906000}, {0x39908000}, {0x3990a000}, {0x3990c000}, {0x3990e000}, {0x39910000}, {0x39912000}, {0x39914000}, {0x39916000}, {0x39918000}, {0x3991a000}, {0x3991c000}, {0x3991e000}, {0x39920000}, {0x39922000}, {0x39924000}, {0x39926000}, {0x39928000}, {0x3992a000}, {0x3992c000}, {0x3992e000}, {0x39930000}, {0x39932000}, {0x39934000}, {0x39936000}, {0x39938000}, {0x3993a000}, {0x3993c000}, {0x3993e000}, {0x39940000}, {0x39942000}, {0x39944000}, {0x39946000}, {0x39948000}, {0x3994a000}, {0x3994c000}, {0x3994e000}, {0x39950000}, {0x39952000}, {0x39954000}, {0x39956000}, {0x39958000}, {0x3995a000}, {0x3995c000}, {0x3995e000}, {0x39960000}, {0x39962000}, {0x39964000}, {0x39966000}, {0x39968000}, {0x3996a000}, {0x3996c000}, {0x3996e000}, {0x39970000}, {0x39972000}, {0x39974000}, {0x39976000}, {0x39978000}, {0x3997a000}, {0x3997c000}, {0x3997e000}, {0x39980000}, {0x39982000}, {0x39984000}, {0x39986000}, {0x39988000}, {0x3998a000}, {0x3998c000}, {0x3998e000}, {0x39990000}, {0x39992000}, {0x39994000}, {0x39996000}, {0x39998000}, {0x3999a000}, {0x3999c000}, {0x3999e000}, {0x399a0000}, {0x399a2000}, {0x399a4000}, {0x399a6000}, {0x399a8000}, {0x399aa000}, {0x399ac000}, {0x399ae000}, {0x399b0000}, {0x399b2000}, {0x399b4000}, {0x399b6000}, {0x399b8000}, {0x399ba000}, {0x399bc000}, {0x399be000}, {0x399c0000}, {0x399c2000}, {0x399c4000}, {0x399c6000}, {0x399c8000}, {0x399ca000}, {0x399cc000}, {0x399ce000}, {0x399d0000}, {0x399d2000}, {0x399d4000}, {0x399d6000}, {0x399d8000}, {0x399da000}, {0x399dc000}, {0x399de000}, {0x399e0000}, {0x399e2000}, {0x399e4000}, {0x399e6000}, {0x399e8000}, {0x399ea000}, {0x399ec000}, {0x399ee000}, {0x399f0000}, {0x399f2000}, {0x399f4000}, {0x399f6000}, {0x399f8000}, {0x399fa000}, {0x399fc000}, {0x399fe000}, {0x39a00000}, {0x39a02000}, {0x39a04000}, {0x39a06000}, {0x39a08000}, {0x39a0a000}, {0x39a0c000}, {0x39a0e000}, {0x39a10000}, {0x39a12000}, {0x39a14000}, {0x39a16000}, {0x39a18000}, {0x39a1a000}, {0x39a1c000}, {0x39a1e000}, {0x39a20000}, {0x39a22000}, {0x39a24000}, {0x39a26000}, {0x39a28000}, {0x39a2a000}, {0x39a2c000}, {0x39a2e000}, {0x39a30000}, {0x39a32000}, {0x39a34000}, {0x39a36000}, {0x39a38000}, {0x39a3a000}, {0x39a3c000}, {0x39a3e000}, {0x39a40000}, {0x39a42000}, {0x39a44000}, {0x39a46000}, {0x39a48000}, {0x39a4a000}, {0x39a4c000}, {0x39a4e000}, {0x39a50000}, {0x39a52000}, {0x39a54000}, {0x39a56000}, {0x39a58000}, {0x39a5a000}, {0x39a5c000}, {0x39a5e000}, {0x39a60000}, {0x39a62000}, {0x39a64000}, {0x39a66000}, {0x39a68000}, {0x39a6a000}, {0x39a6c000}, {0x39a6e000}, {0x39a70000}, {0x39a72000}, {0x39a74000}, {0x39a76000}, {0x39a78000}, {0x39a7a000}, {0x39a7c000}, {0x39a7e000}, {0x39a80000}, {0x39a82000}, {0x39a84000}, {0x39a86000}, {0x39a88000}, {0x39a8a000}, {0x39a8c000}, {0x39a8e000}, {0x39a90000}, {0x39a92000}, {0x39a94000}, {0x39a96000}, {0x39a98000}, {0x39a9a000}, {0x39a9c000}, {0x39a9e000}, {0x39aa0000}, {0x39aa2000}, {0x39aa4000}, {0x39aa6000}, {0x39aa8000}, {0x39aaa000}, {0x39aac000}, {0x39aae000}, {0x39ab0000}, {0x39ab2000}, {0x39ab4000}, {0x39ab6000}, {0x39ab8000}, {0x39aba000}, {0x39abc000}, {0x39abe000}, {0x39ac0000}, {0x39ac2000}, {0x39ac4000}, {0x39ac6000}, {0x39ac8000}, {0x39aca000}, {0x39acc000}, {0x39ace000}, {0x39ad0000}, {0x39ad2000}, {0x39ad4000}, {0x39ad6000}, {0x39ad8000}, {0x39ada000}, {0x39adc000}, {0x39ade000}, {0x39ae0000}, {0x39ae2000}, {0x39ae4000}, {0x39ae6000}, {0x39ae8000}, {0x39aea000}, {0x39aec000}, {0x39aee000}, {0x39af0000}, {0x39af2000}, {0x39af4000}, {0x39af6000}, {0x39af8000}, {0x39afa000}, {0x39afc000}, {0x39afe000}, {0x39b00000}, {0x39b02000}, {0x39b04000}, {0x39b06000}, {0x39b08000}, {0x39b0a000}, {0x39b0c000}, {0x39b0e000}, {0x39b10000}, {0x39b12000}, {0x39b14000}, {0x39b16000}, {0x39b18000}, {0x39b1a000}, {0x39b1c000}, {0x39b1e000}, {0x39b20000}, {0x39b22000}, {0x39b24000}, {0x39b26000}, {0x39b28000}, {0x39b2a000}, {0x39b2c000}, {0x39b2e000}, {0x39b30000}, {0x39b32000}, {0x39b34000}, {0x39b36000}, {0x39b38000}, {0x39b3a000}, {0x39b3c000}, {0x39b3e000}, {0x39b40000}, {0x39b42000}, {0x39b44000}, {0x39b46000}, {0x39b48000}, {0x39b4a000}, {0x39b4c000}, {0x39b4e000}, {0x39b50000}, {0x39b52000}, {0x39b54000}, {0x39b56000}, {0x39b58000}, {0x39b5a000}, {0x39b5c000}, {0x39b5e000}, {0x39b60000}, {0x39b62000}, {0x39b64000}, {0x39b66000}, {0x39b68000}, {0x39b6a000}, {0x39b6c000}, {0x39b6e000}, {0x39b70000}, {0x39b72000}, {0x39b74000}, {0x39b76000}, {0x39b78000}, {0x39b7a000}, {0x39b7c000}, {0x39b7e000}, {0x39b80000}, {0x39b82000}, {0x39b84000}, {0x39b86000}, {0x39b88000}, {0x39b8a000}, {0x39b8c000}, {0x39b8e000}, {0x39b90000}, {0x39b92000}, {0x39b94000}, {0x39b96000}, {0x39b98000}, {0x39b9a000}, {0x39b9c000}, {0x39b9e000}, {0x39ba0000}, {0x39ba2000}, {0x39ba4000}, {0x39ba6000}, {0x39ba8000}, {0x39baa000}, {0x39bac000}, {0x39bae000}, {0x39bb0000}, {0x39bb2000}, {0x39bb4000}, {0x39bb6000}, {0x39bb8000}, {0x39bba000}, {0x39bbc000}, {0x39bbe000}, {0x39bc0000}, {0x39bc2000}, {0x39bc4000}, {0x39bc6000}, {0x39bc8000}, {0x39bca000}, {0x39bcc000}, {0x39bce000}, {0x39bd0000}, {0x39bd2000}, {0x39bd4000}, {0x39bd6000}, {0x39bd8000}, {0x39bda000}, {0x39bdc000}, {0x39bde000}, {0x39be0000}, {0x39be2000}, {0x39be4000}, {0x39be6000}, {0x39be8000}, {0x39bea000}, {0x39bec000}, {0x39bee000}, {0x39bf0000}, {0x39bf2000}, {0x39bf4000}, {0x39bf6000}, {0x39bf8000}, {0x39bfa000}, {0x39bfc000}, {0x39bfe000}, {0x39c00000}, {0x39c02000}, {0x39c04000}, {0x39c06000}, {0x39c08000}, {0x39c0a000}, {0x39c0c000}, {0x39c0e000}, {0x39c10000}, {0x39c12000}, {0x39c14000}, {0x39c16000}, {0x39c18000}, {0x39c1a000}, {0x39c1c000}, {0x39c1e000}, {0x39c20000}, {0x39c22000}, {0x39c24000}, {0x39c26000}, {0x39c28000}, {0x39c2a000}, {0x39c2c000}, {0x39c2e000}, {0x39c30000}, {0x39c32000}, {0x39c34000}, {0x39c36000}, {0x39c38000}, {0x39c3a000}, {0x39c3c000}, {0x39c3e000}, {0x39c40000}, {0x39c42000}, {0x39c44000}, {0x39c46000}, {0x39c48000}, {0x39c4a000}, {0x39c4c000}, {0x39c4e000}, {0x39c50000}, {0x39c52000}, {0x39c54000}, {0x39c56000}, {0x39c58000}, {0x39c5a000}, {0x39c5c000}, {0x39c5e000}, {0x39c60000}, {0x39c62000}, {0x39c64000}, {0x39c66000}, {0x39c68000}, {0x39c6a000}, {0x39c6c000}, {0x39c6e000}, {0x39c70000}, {0x39c72000}, {0x39c74000}, {0x39c76000}, {0x39c78000}, {0x39c7a000}, {0x39c7c000}, {0x39c7e000}, {0x39c80000}, {0x39c82000}, {0x39c84000}, {0x39c86000}, {0x39c88000}, {0x39c8a000}, {0x39c8c000}, {0x39c8e000}, {0x39c90000}, {0x39c92000}, {0x39c94000}, {0x39c96000}, {0x39c98000}, {0x39c9a000}, {0x39c9c000}, {0x39c9e000}, {0x39ca0000}, {0x39ca2000}, {0x39ca4000}, {0x39ca6000}, {0x39ca8000}, {0x39caa000}, {0x39cac000}, {0x39cae000}, {0x39cb0000}, {0x39cb2000}, {0x39cb4000}, {0x39cb6000}, {0x39cb8000}, {0x39cba000}, {0x39cbc000}, {0x39cbe000}, {0x39cc0000}, {0x39cc2000}, {0x39cc4000}, {0x39cc6000}, {0x39cc8000}, {0x39cca000}, {0x39ccc000}, {0x39cce000}, {0x39cd0000}, {0x39cd2000}, {0x39cd4000}, {0x39cd6000}, {0x39cd8000}, {0x39cda000}, {0x39cdc000}, {0x39cde000}, {0x39ce0000}, {0x39ce2000}, {0x39ce4000}, {0x39ce6000}, {0x39ce8000}, {0x39cea000}, {0x39cec000}, {0x39cee000}, {0x39cf0000}, {0x39cf2000}, {0x39cf4000}, {0x39cf6000}, {0x39cf8000}, {0x39cfa000}, {0x39cfc000}, {0x39cfe000}, {0x39d00000}, {0x39d02000}, {0x39d04000}, {0x39d06000}, {0x39d08000}, {0x39d0a000}, {0x39d0c000}, {0x39d0e000}, {0x39d10000}, {0x39d12000}, {0x39d14000}, {0x39d16000}, {0x39d18000}, {0x39d1a000}, {0x39d1c000}, {0x39d1e000}, {0x39d20000}, {0x39d22000}, {0x39d24000}, {0x39d26000}, {0x39d28000}, {0x39d2a000}, {0x39d2c000}, {0x39d2e000}, {0x39d30000}, {0x39d32000}, {0x39d34000}, {0x39d36000}, {0x39d38000}, {0x39d3a000}, {0x39d3c000}, {0x39d3e000}, {0x39d40000}, {0x39d42000}, {0x39d44000}, {0x39d46000}, {0x39d48000}, {0x39d4a000}, {0x39d4c000}, {0x39d4e000}, {0x39d50000}, {0x39d52000}, {0x39d54000}, {0x39d56000}, {0x39d58000}, {0x39d5a000}, {0x39d5c000}, {0x39d5e000}, {0x39d60000}, {0x39d62000}, {0x39d64000}, {0x39d66000}, {0x39d68000}, {0x39d6a000}, {0x39d6c000}, {0x39d6e000}, {0x39d70000}, {0x39d72000}, {0x39d74000}, {0x39d76000}, {0x39d78000}, {0x39d7a000}, {0x39d7c000}, {0x39d7e000}, {0x39d80000}, {0x39d82000}, {0x39d84000}, {0x39d86000}, {0x39d88000}, {0x39d8a000}, {0x39d8c000}, {0x39d8e000}, {0x39d90000}, {0x39d92000}, {0x39d94000}, {0x39d96000}, {0x39d98000}, {0x39d9a000}, {0x39d9c000}, {0x39d9e000}, {0x39da0000}, {0x39da2000}, {0x39da4000}, {0x39da6000}, {0x39da8000}, {0x39daa000}, {0x39dac000}, {0x39dae000}, {0x39db0000}, {0x39db2000}, {0x39db4000}, {0x39db6000}, {0x39db8000}, {0x39dba000}, {0x39dbc000}, {0x39dbe000}, {0x39dc0000}, {0x39dc2000}, {0x39dc4000}, {0x39dc6000}, {0x39dc8000}, {0x39dca000}, {0x39dcc000}, {0x39dce000}, {0x39dd0000}, {0x39dd2000}, {0x39dd4000}, {0x39dd6000}, {0x39dd8000}, {0x39dda000}, {0x39ddc000}, {0x39dde000}, {0x39de0000}, {0x39de2000}, {0x39de4000}, {0x39de6000}, {0x39de8000}, {0x39dea000}, {0x39dec000}, {0x39dee000}, {0x39df0000}, {0x39df2000}, {0x39df4000}, {0x39df6000}, {0x39df8000}, {0x39dfa000}, {0x39dfc000}, {0x39dfe000}, {0x39e00000}, {0x39e02000}, {0x39e04000}, {0x39e06000}, {0x39e08000}, {0x39e0a000}, {0x39e0c000}, {0x39e0e000}, {0x39e10000}, {0x39e12000}, {0x39e14000}, {0x39e16000}, {0x39e18000}, {0x39e1a000}, {0x39e1c000}, {0x39e1e000}, {0x39e20000}, {0x39e22000}, {0x39e24000}, {0x39e26000}, {0x39e28000}, {0x39e2a000}, {0x39e2c000}, {0x39e2e000}, {0x39e30000}, {0x39e32000}, {0x39e34000}, {0x39e36000}, {0x39e38000}, {0x39e3a000}, {0x39e3c000}, {0x39e3e000}, {0x39e40000}, {0x39e42000}, {0x39e44000}, {0x39e46000}, {0x39e48000}, {0x39e4a000}, {0x39e4c000}, {0x39e4e000}, {0x39e50000}, {0x39e52000}, {0x39e54000}, {0x39e56000}, {0x39e58000}, {0x39e5a000}, {0x39e5c000}, {0x39e5e000}, {0x39e60000}, {0x39e62000}, {0x39e64000}, {0x39e66000}, {0x39e68000}, {0x39e6a000}, {0x39e6c000}, {0x39e6e000}, {0x39e70000}, {0x39e72000}, {0x39e74000}, {0x39e76000}, {0x39e78000}, {0x39e7a000}, {0x39e7c000}, {0x39e7e000}, {0x39e80000}, {0x39e82000}, {0x39e84000}, {0x39e86000}, {0x39e88000}, {0x39e8a000}, {0x39e8c000}, {0x39e8e000}, {0x39e90000}, {0x39e92000}, {0x39e94000}, {0x39e96000}, {0x39e98000}, {0x39e9a000}, {0x39e9c000}, {0x39e9e000}, {0x39ea0000}, {0x39ea2000}, {0x39ea4000}, {0x39ea6000}, {0x39ea8000}, {0x39eaa000}, {0x39eac000}, {0x39eae000}, {0x39eb0000}, {0x39eb2000}, {0x39eb4000}, {0x39eb6000}, {0x39eb8000}, {0x39eba000}, {0x39ebc000}, {0x39ebe000}, {0x39ec0000}, {0x39ec2000}, {0x39ec4000}, {0x39ec6000}, {0x39ec8000}, {0x39eca000}, {0x39ecc000}, {0x39ece000}, {0x39ed0000}, {0x39ed2000}, {0x39ed4000}, {0x39ed6000}, {0x39ed8000}, {0x39eda000}, {0x39edc000}, {0x39ede000}, {0x39ee0000}, {0x39ee2000}, {0x39ee4000}, {0x39ee6000}, {0x39ee8000}, {0x39eea000}, {0x39eec000}, {0x39eee000}, {0x39ef0000}, {0x39ef2000}, {0x39ef4000}, {0x39ef6000}, {0x39ef8000}, {0x39efa000}, {0x39efc000}, {0x39efe000}, {0x39f00000}, {0x39f02000}, {0x39f04000}, {0x39f06000}, {0x39f08000}, {0x39f0a000}, {0x39f0c000}, {0x39f0e000}, {0x39f10000}, {0x39f12000}, {0x39f14000}, {0x39f16000}, {0x39f18000}, {0x39f1a000}, {0x39f1c000}, {0x39f1e000}, {0x39f20000}, {0x39f22000}, {0x39f24000}, {0x39f26000}, {0x39f28000}, {0x39f2a000}, {0x39f2c000}, {0x39f2e000}, {0x39f30000}, {0x39f32000}, {0x39f34000}, {0x39f36000}, {0x39f38000}, {0x39f3a000}, {0x39f3c000}, {0x39f3e000}, {0x39f40000}, {0x39f42000}, {0x39f44000}, {0x39f46000}, {0x39f48000}, {0x39f4a000}, {0x39f4c000}, {0x39f4e000}, {0x39f50000}, {0x39f52000}, {0x39f54000}, {0x39f56000}, {0x39f58000}, {0x39f5a000}, {0x39f5c000}, {0x39f5e000}, {0x39f60000}, {0x39f62000}, {0x39f64000}, {0x39f66000}, {0x39f68000}, {0x39f6a000}, {0x39f6c000}, {0x39f6e000}, {0x39f70000}, {0x39f72000}, {0x39f74000}, {0x39f76000}, {0x39f78000}, {0x39f7a000}, {0x39f7c000}, {0x39f7e000}, {0x39f80000}, {0x39f82000}, {0x39f84000}, {0x39f86000}, {0x39f88000}, {0x39f8a000}, {0x39f8c000}, {0x39f8e000}, {0x39f90000}, {0x39f92000}, {0x39f94000}, {0x39f96000}, {0x39f98000}, {0x39f9a000}, {0x39f9c000}, {0x39f9e000}, {0x39fa0000}, {0x39fa2000}, {0x39fa4000}, {0x39fa6000}, {0x39fa8000}, {0x39faa000}, {0x39fac000}, {0x39fae000}, {0x39fb0000}, {0x39fb2000}, {0x39fb4000}, {0x39fb6000}, {0x39fb8000}, {0x39fba000}, {0x39fbc000}, {0x39fbe000}, {0x39fc0000}, {0x39fc2000}, {0x39fc4000}, {0x39fc6000}, {0x39fc8000}, {0x39fca000}, {0x39fcc000}, {0x39fce000}, {0x39fd0000}, {0x39fd2000}, {0x39fd4000}, {0x39fd6000}, {0x39fd8000}, {0x39fda000}, {0x39fdc000}, {0x39fde000}, {0x39fe0000}, {0x39fe2000}, {0x39fe4000}, {0x39fe6000}, {0x39fe8000}, {0x39fea000}, {0x39fec000}, {0x39fee000}, {0x39ff0000}, {0x39ff2000}, {0x39ff4000}, {0x39ff6000}, {0x39ff8000}, {0x39ffa000}, {0x39ffc000}, {0x39ffe000}, {0x3a000000}, {0x3a002000}, {0x3a004000}, {0x3a006000}, {0x3a008000}, {0x3a00a000}, {0x3a00c000}, {0x3a00e000}, {0x3a010000}, {0x3a012000}, {0x3a014000}, {0x3a016000}, {0x3a018000}, {0x3a01a000}, {0x3a01c000}, {0x3a01e000}, {0x3a020000}, {0x3a022000}, {0x3a024000}, {0x3a026000}, {0x3a028000}, {0x3a02a000}, {0x3a02c000}, {0x3a02e000}, {0x3a030000}, {0x3a032000}, {0x3a034000}, {0x3a036000}, {0x3a038000}, {0x3a03a000}, {0x3a03c000}, {0x3a03e000}, {0x3a040000}, {0x3a042000}, {0x3a044000}, {0x3a046000}, {0x3a048000}, {0x3a04a000}, {0x3a04c000}, {0x3a04e000}, {0x3a050000}, {0x3a052000}, {0x3a054000}, {0x3a056000}, {0x3a058000}, {0x3a05a000}, {0x3a05c000}, {0x3a05e000}, {0x3a060000}, {0x3a062000}, {0x3a064000}, {0x3a066000}, {0x3a068000}, {0x3a06a000}, {0x3a06c000}, {0x3a06e000}, {0x3a070000}, {0x3a072000}, {0x3a074000}, {0x3a076000}, {0x3a078000}, {0x3a07a000}, {0x3a07c000}, {0x3a07e000}, {0x3a080000}, {0x3a082000}, {0x3a084000}, {0x3a086000}, {0x3a088000}, {0x3a08a000}, {0x3a08c000}, {0x3a08e000}, {0x3a090000}, {0x3a092000}, {0x3a094000}, {0x3a096000}, {0x3a098000}, {0x3a09a000}, {0x3a09c000}, {0x3a09e000}, {0x3a0a0000}, {0x3a0a2000}, {0x3a0a4000}, {0x3a0a6000}, {0x3a0a8000}, {0x3a0aa000}, {0x3a0ac000}, {0x3a0ae000}, {0x3a0b0000}, {0x3a0b2000}, {0x3a0b4000}, {0x3a0b6000}, {0x3a0b8000}, {0x3a0ba000}, {0x3a0bc000}, {0x3a0be000}, {0x3a0c0000}, {0x3a0c2000}, {0x3a0c4000}, {0x3a0c6000}, {0x3a0c8000}, {0x3a0ca000}, {0x3a0cc000}, {0x3a0ce000}, {0x3a0d0000}, {0x3a0d2000}, {0x3a0d4000}, {0x3a0d6000}, {0x3a0d8000}, {0x3a0da000}, {0x3a0dc000}, {0x3a0de000}, {0x3a0e0000}, {0x3a0e2000}, {0x3a0e4000}, {0x3a0e6000}, {0x3a0e8000}, {0x3a0ea000}, {0x3a0ec000}, {0x3a0ee000}, {0x3a0f0000}, {0x3a0f2000}, {0x3a0f4000}, {0x3a0f6000}, {0x3a0f8000}, {0x3a0fa000}, {0x3a0fc000}, {0x3a0fe000}, {0x3a100000}, {0x3a102000}, {0x3a104000}, {0x3a106000}, {0x3a108000}, {0x3a10a000}, {0x3a10c000}, {0x3a10e000}, {0x3a110000}, {0x3a112000}, {0x3a114000}, {0x3a116000}, {0x3a118000}, {0x3a11a000}, {0x3a11c000}, {0x3a11e000}, {0x3a120000}, {0x3a122000}, {0x3a124000}, {0x3a126000}, {0x3a128000}, {0x3a12a000}, {0x3a12c000}, {0x3a12e000}, {0x3a130000}, {0x3a132000}, {0x3a134000}, {0x3a136000}, {0x3a138000}, {0x3a13a000}, {0x3a13c000}, {0x3a13e000}, {0x3a140000}, {0x3a142000}, {0x3a144000}, {0x3a146000}, {0x3a148000}, {0x3a14a000}, {0x3a14c000}, {0x3a14e000}, {0x3a150000}, {0x3a152000}, {0x3a154000}, {0x3a156000}, {0x3a158000}, {0x3a15a000}, {0x3a15c000}, {0x3a15e000}, {0x3a160000}, {0x3a162000}, {0x3a164000}, {0x3a166000}, {0x3a168000}, {0x3a16a000}, {0x3a16c000}, {0x3a16e000}, {0x3a170000}, {0x3a172000}, {0x3a174000}, {0x3a176000}, {0x3a178000}, {0x3a17a000}, {0x3a17c000}, {0x3a17e000}, {0x3a180000}, {0x3a182000}, {0x3a184000}, {0x3a186000}, {0x3a188000}, {0x3a18a000}, {0x3a18c000}, {0x3a18e000}, {0x3a190000}, {0x3a192000}, {0x3a194000}, {0x3a196000}, {0x3a198000}, {0x3a19a000}, {0x3a19c000}, {0x3a19e000}, {0x3a1a0000}, {0x3a1a2000}, {0x3a1a4000}, {0x3a1a6000}, {0x3a1a8000}, {0x3a1aa000}, {0x3a1ac000}, {0x3a1ae000}, {0x3a1b0000}, {0x3a1b2000}, {0x3a1b4000}, {0x3a1b6000}, {0x3a1b8000}, {0x3a1ba000}, {0x3a1bc000}, {0x3a1be000}, {0x3a1c0000}, {0x3a1c2000}, {0x3a1c4000}, {0x3a1c6000}, {0x3a1c8000}, {0x3a1ca000}, {0x3a1cc000}, {0x3a1ce000}, {0x3a1d0000}, {0x3a1d2000}, {0x3a1d4000}, {0x3a1d6000}, {0x3a1d8000}, {0x3a1da000}, {0x3a1dc000}, {0x3a1de000}, {0x3a1e0000}, {0x3a1e2000}, {0x3a1e4000}, {0x3a1e6000}, {0x3a1e8000}, {0x3a1ea000}, {0x3a1ec000}, {0x3a1ee000}, {0x3a1f0000}, {0x3a1f2000}, {0x3a1f4000}, {0x3a1f6000}, {0x3a1f8000}, {0x3a1fa000}, {0x3a1fc000}, {0x3a1fe000}, {0x3a200000}, {0x3a202000}, {0x3a204000}, {0x3a206000}, {0x3a208000}, {0x3a20a000}, {0x3a20c000}, {0x3a20e000}, {0x3a210000}, {0x3a212000}, {0x3a214000}, {0x3a216000}, {0x3a218000}, {0x3a21a000}, {0x3a21c000}, {0x3a21e000}, {0x3a220000}, {0x3a222000}, {0x3a224000}, {0x3a226000}, {0x3a228000}, {0x3a22a000}, {0x3a22c000}, {0x3a22e000}, {0x3a230000}, {0x3a232000}, {0x3a234000}, {0x3a236000}, {0x3a238000}, {0x3a23a000}, {0x3a23c000}, {0x3a23e000}, {0x3a240000}, {0x3a242000}, {0x3a244000}, {0x3a246000}, {0x3a248000}, {0x3a24a000}, {0x3a24c000}, {0x3a24e000}, {0x3a250000}, {0x3a252000}, {0x3a254000}, {0x3a256000}, {0x3a258000}, {0x3a25a000}, {0x3a25c000}, {0x3a25e000}, {0x3a260000}, {0x3a262000}, {0x3a264000}, {0x3a266000}, {0x3a268000}, {0x3a26a000}, {0x3a26c000}, {0x3a26e000}, {0x3a270000}, {0x3a272000}, {0x3a274000}, {0x3a276000}, {0x3a278000}, {0x3a27a000}, {0x3a27c000}, {0x3a27e000}, {0x3a280000}, {0x3a282000}, {0x3a284000}, {0x3a286000}, {0x3a288000}, {0x3a28a000}, {0x3a28c000}, {0x3a28e000}, {0x3a290000}, {0x3a292000}, {0x3a294000}, {0x3a296000}, {0x3a298000}, {0x3a29a000}, {0x3a29c000}, {0x3a29e000}, {0x3a2a0000}, {0x3a2a2000}, {0x3a2a4000}, {0x3a2a6000}, {0x3a2a8000}, {0x3a2aa000}, {0x3a2ac000}, {0x3a2ae000}, {0x3a2b0000}, {0x3a2b2000}, {0x3a2b4000}, {0x3a2b6000}, {0x3a2b8000}, {0x3a2ba000}, {0x3a2bc000}, {0x3a2be000}, {0x3a2c0000}, {0x3a2c2000}, {0x3a2c4000}, {0x3a2c6000}, {0x3a2c8000}, {0x3a2ca000}, {0x3a2cc000}, {0x3a2ce000}, {0x3a2d0000}, {0x3a2d2000}, {0x3a2d4000}, {0x3a2d6000}, {0x3a2d8000}, {0x3a2da000}, {0x3a2dc000}, {0x3a2de000}, {0x3a2e0000}, {0x3a2e2000}, {0x3a2e4000}, {0x3a2e6000}, {0x3a2e8000}, {0x3a2ea000}, {0x3a2ec000}, {0x3a2ee000}, {0x3a2f0000}, {0x3a2f2000}, {0x3a2f4000}, {0x3a2f6000}, {0x3a2f8000}, {0x3a2fa000}, {0x3a2fc000}, {0x3a2fe000}, {0x3a300000}, {0x3a302000}, {0x3a304000}, {0x3a306000}, {0x3a308000}, {0x3a30a000}, {0x3a30c000}, {0x3a30e000}, {0x3a310000}, {0x3a312000}, {0x3a314000}, {0x3a316000}, {0x3a318000}, {0x3a31a000}, {0x3a31c000}, {0x3a31e000}, {0x3a320000}, {0x3a322000}, {0x3a324000}, {0x3a326000}, {0x3a328000}, {0x3a32a000}, {0x3a32c000}, {0x3a32e000}, {0x3a330000}, {0x3a332000}, {0x3a334000}, {0x3a336000}, {0x3a338000}, {0x3a33a000}, {0x3a33c000}, {0x3a33e000}, {0x3a340000}, {0x3a342000}, {0x3a344000}, {0x3a346000}, {0x3a348000}, {0x3a34a000}, {0x3a34c000}, {0x3a34e000}, {0x3a350000}, {0x3a352000}, {0x3a354000}, {0x3a356000}, {0x3a358000}, {0x3a35a000}, {0x3a35c000}, {0x3a35e000}, {0x3a360000}, {0x3a362000}, {0x3a364000}, {0x3a366000}, {0x3a368000}, {0x3a36a000}, {0x3a36c000}, {0x3a36e000}, {0x3a370000}, {0x3a372000}, {0x3a374000}, {0x3a376000}, {0x3a378000}, {0x3a37a000}, {0x3a37c000}, {0x3a37e000}, {0x3a380000}, {0x3a382000}, {0x3a384000}, {0x3a386000}, {0x3a388000}, {0x3a38a000}, {0x3a38c000}, {0x3a38e000}, {0x3a390000}, {0x3a392000}, {0x3a394000}, {0x3a396000}, {0x3a398000}, {0x3a39a000}, {0x3a39c000}, {0x3a39e000}, {0x3a3a0000}, {0x3a3a2000}, {0x3a3a4000}, {0x3a3a6000}, {0x3a3a8000}, {0x3a3aa000}, {0x3a3ac000}, {0x3a3ae000}, {0x3a3b0000}, {0x3a3b2000}, {0x3a3b4000}, {0x3a3b6000}, {0x3a3b8000}, {0x3a3ba000}, {0x3a3bc000}, {0x3a3be000}, {0x3a3c0000}, {0x3a3c2000}, {0x3a3c4000}, {0x3a3c6000}, {0x3a3c8000}, {0x3a3ca000}, {0x3a3cc000}, {0x3a3ce000}, {0x3a3d0000}, {0x3a3d2000}, {0x3a3d4000}, {0x3a3d6000}, {0x3a3d8000}, {0x3a3da000}, {0x3a3dc000}, {0x3a3de000}, {0x3a3e0000}, {0x3a3e2000}, {0x3a3e4000}, {0x3a3e6000}, {0x3a3e8000}, {0x3a3ea000}, {0x3a3ec000}, {0x3a3ee000}, {0x3a3f0000}, {0x3a3f2000}, {0x3a3f4000}, {0x3a3f6000}, {0x3a3f8000}, {0x3a3fa000}, {0x3a3fc000}, {0x3a3fe000}, {0x3a400000}, {0x3a402000}, {0x3a404000}, {0x3a406000}, {0x3a408000}, {0x3a40a000}, {0x3a40c000}, {0x3a40e000}, {0x3a410000}, {0x3a412000}, {0x3a414000}, {0x3a416000}, {0x3a418000}, {0x3a41a000}, {0x3a41c000}, {0x3a41e000}, {0x3a420000}, {0x3a422000}, {0x3a424000}, {0x3a426000}, {0x3a428000}, {0x3a42a000}, {0x3a42c000}, {0x3a42e000}, {0x3a430000}, {0x3a432000}, {0x3a434000}, {0x3a436000}, {0x3a438000}, {0x3a43a000}, {0x3a43c000}, {0x3a43e000}, {0x3a440000}, {0x3a442000}, {0x3a444000}, {0x3a446000}, {0x3a448000}, {0x3a44a000}, {0x3a44c000}, {0x3a44e000}, {0x3a450000}, {0x3a452000}, {0x3a454000}, {0x3a456000}, {0x3a458000}, {0x3a45a000}, {0x3a45c000}, {0x3a45e000}, {0x3a460000}, {0x3a462000}, {0x3a464000}, {0x3a466000}, {0x3a468000}, {0x3a46a000}, {0x3a46c000}, {0x3a46e000}, {0x3a470000}, {0x3a472000}, {0x3a474000}, {0x3a476000}, {0x3a478000}, {0x3a47a000}, {0x3a47c000}, {0x3a47e000}, {0x3a480000}, {0x3a482000}, {0x3a484000}, {0x3a486000}, {0x3a488000}, {0x3a48a000}, {0x3a48c000}, {0x3a48e000}, {0x3a490000}, {0x3a492000}, {0x3a494000}, {0x3a496000}, {0x3a498000}, {0x3a49a000}, {0x3a49c000}, {0x3a49e000}, {0x3a4a0000}, {0x3a4a2000}, {0x3a4a4000}, {0x3a4a6000}, {0x3a4a8000}, {0x3a4aa000}, {0x3a4ac000}, {0x3a4ae000}, {0x3a4b0000}, {0x3a4b2000}, {0x3a4b4000}, {0x3a4b6000}, {0x3a4b8000}, {0x3a4ba000}, {0x3a4bc000}, {0x3a4be000}, {0x3a4c0000}, {0x3a4c2000}, {0x3a4c4000}, {0x3a4c6000}, {0x3a4c8000}, {0x3a4ca000}, {0x3a4cc000}, {0x3a4ce000}, {0x3a4d0000}, {0x3a4d2000}, {0x3a4d4000}, {0x3a4d6000}, {0x3a4d8000}, {0x3a4da000}, {0x3a4dc000}, {0x3a4de000}, {0x3a4e0000}, {0x3a4e2000}, {0x3a4e4000}, {0x3a4e6000}, {0x3a4e8000}, {0x3a4ea000}, {0x3a4ec000}, {0x3a4ee000}, {0x3a4f0000}, {0x3a4f2000}, {0x3a4f4000}, {0x3a4f6000}, {0x3a4f8000}, {0x3a4fa000}, {0x3a4fc000}, {0x3a4fe000}, {0x3a500000}, {0x3a502000}, {0x3a504000}, {0x3a506000}, {0x3a508000}, {0x3a50a000}, {0x3a50c000}, {0x3a50e000}, {0x3a510000}, {0x3a512000}, {0x3a514000}, {0x3a516000}, {0x3a518000}, {0x3a51a000}, {0x3a51c000}, {0x3a51e000}, {0x3a520000}, {0x3a522000}, {0x3a524000}, {0x3a526000}, {0x3a528000}, {0x3a52a000}, {0x3a52c000}, {0x3a52e000}, {0x3a530000}, {0x3a532000}, {0x3a534000}, {0x3a536000}, {0x3a538000}, {0x3a53a000}, {0x3a53c000}, {0x3a53e000}, {0x3a540000}, {0x3a542000}, {0x3a544000}, {0x3a546000}, {0x3a548000}, {0x3a54a000}, {0x3a54c000}, {0x3a54e000}, {0x3a550000}, {0x3a552000}, {0x3a554000}, {0x3a556000}, {0x3a558000}, {0x3a55a000}, {0x3a55c000}, {0x3a55e000}, {0x3a560000}, {0x3a562000}, {0x3a564000}, {0x3a566000}, {0x3a568000}, {0x3a56a000}, {0x3a56c000}, {0x3a56e000}, {0x3a570000}, {0x3a572000}, {0x3a574000}, {0x3a576000}, {0x3a578000}, {0x3a57a000}, {0x3a57c000}, {0x3a57e000}, {0x3a580000}, {0x3a582000}, {0x3a584000}, {0x3a586000}, {0x3a588000}, {0x3a58a000}, {0x3a58c000}, {0x3a58e000}, {0x3a590000}, {0x3a592000}, {0x3a594000}, {0x3a596000}, {0x3a598000}, {0x3a59a000}, {0x3a59c000}, {0x3a59e000}, {0x3a5a0000}, {0x3a5a2000}, {0x3a5a4000}, {0x3a5a6000}, {0x3a5a8000}, {0x3a5aa000}, {0x3a5ac000}, {0x3a5ae000}, {0x3a5b0000}, {0x3a5b2000}, {0x3a5b4000}, {0x3a5b6000}, {0x3a5b8000}, {0x3a5ba000}, {0x3a5bc000}, {0x3a5be000}, {0x3a5c0000}, {0x3a5c2000}, {0x3a5c4000}, {0x3a5c6000}, {0x3a5c8000}, {0x3a5ca000}, {0x3a5cc000}, {0x3a5ce000}, {0x3a5d0000}, {0x3a5d2000}, {0x3a5d4000}, {0x3a5d6000}, {0x3a5d8000}, {0x3a5da000}, {0x3a5dc000}, {0x3a5de000}, {0x3a5e0000}, {0x3a5e2000}, {0x3a5e4000}, {0x3a5e6000}, {0x3a5e8000}, {0x3a5ea000}, {0x3a5ec000}, {0x3a5ee000}, {0x3a5f0000}, {0x3a5f2000}, {0x3a5f4000}, {0x3a5f6000}, {0x3a5f8000}, {0x3a5fa000}, {0x3a5fc000}, {0x3a5fe000}, {0x3a600000}, {0x3a602000}, {0x3a604000}, {0x3a606000}, {0x3a608000}, {0x3a60a000}, {0x3a60c000}, {0x3a60e000}, {0x3a610000}, {0x3a612000}, {0x3a614000}, {0x3a616000}, {0x3a618000}, {0x3a61a000}, {0x3a61c000}, {0x3a61e000}, {0x3a620000}, {0x3a622000}, {0x3a624000}, {0x3a626000}, {0x3a628000}, {0x3a62a000}, {0x3a62c000}, {0x3a62e000}, {0x3a630000}, {0x3a632000}, {0x3a634000}, {0x3a636000}, {0x3a638000}, {0x3a63a000}, {0x3a63c000}, {0x3a63e000}, {0x3a640000}, {0x3a642000}, {0x3a644000}, {0x3a646000}, {0x3a648000}, {0x3a64a000}, {0x3a64c000}, {0x3a64e000}, {0x3a650000}, {0x3a652000}, {0x3a654000}, {0x3a656000}, {0x3a658000}, {0x3a65a000}, {0x3a65c000}, {0x3a65e000}, {0x3a660000}, {0x3a662000}, {0x3a664000}, {0x3a666000}, {0x3a668000}, {0x3a66a000}, {0x3a66c000}, {0x3a66e000}, {0x3a670000}, {0x3a672000}, {0x3a674000}, {0x3a676000}, {0x3a678000}, {0x3a67a000}, {0x3a67c000}, {0x3a67e000}, {0x3a680000}, {0x3a682000}, {0x3a684000}, {0x3a686000}, {0x3a688000}, {0x3a68a000}, {0x3a68c000}, {0x3a68e000}, {0x3a690000}, {0x3a692000}, {0x3a694000}, {0x3a696000}, {0x3a698000}, {0x3a69a000}, {0x3a69c000}, {0x3a69e000}, {0x3a6a0000}, {0x3a6a2000}, {0x3a6a4000}, {0x3a6a6000}, {0x3a6a8000}, {0x3a6aa000}, {0x3a6ac000}, {0x3a6ae000}, {0x3a6b0000}, {0x3a6b2000}, {0x3a6b4000}, {0x3a6b6000}, {0x3a6b8000}, {0x3a6ba000}, {0x3a6bc000}, {0x3a6be000}, {0x3a6c0000}, {0x3a6c2000}, {0x3a6c4000}, {0x3a6c6000}, {0x3a6c8000}, {0x3a6ca000}, {0x3a6cc000}, {0x3a6ce000}, {0x3a6d0000}, {0x3a6d2000}, {0x3a6d4000}, {0x3a6d6000}, {0x3a6d8000}, {0x3a6da000}, {0x3a6dc000}, {0x3a6de000}, {0x3a6e0000}, {0x3a6e2000}, {0x3a6e4000}, {0x3a6e6000}, {0x3a6e8000}, {0x3a6ea000}, {0x3a6ec000}, {0x3a6ee000}, {0x3a6f0000}, {0x3a6f2000}, {0x3a6f4000}, {0x3a6f6000}, {0x3a6f8000}, {0x3a6fa000}, {0x3a6fc000}, {0x3a6fe000}, {0x3a700000}, {0x3a702000}, {0x3a704000}, {0x3a706000}, {0x3a708000}, {0x3a70a000}, {0x3a70c000}, {0x3a70e000}, {0x3a710000}, {0x3a712000}, {0x3a714000}, {0x3a716000}, {0x3a718000}, {0x3a71a000}, {0x3a71c000}, {0x3a71e000}, {0x3a720000}, {0x3a722000}, {0x3a724000}, {0x3a726000}, {0x3a728000}, {0x3a72a000}, {0x3a72c000}, {0x3a72e000}, {0x3a730000}, {0x3a732000}, {0x3a734000}, {0x3a736000}, {0x3a738000}, {0x3a73a000}, {0x3a73c000}, {0x3a73e000}, {0x3a740000}, {0x3a742000}, {0x3a744000}, {0x3a746000}, {0x3a748000}, {0x3a74a000}, {0x3a74c000}, {0x3a74e000}, {0x3a750000}, {0x3a752000}, {0x3a754000}, {0x3a756000}, {0x3a758000}, {0x3a75a000}, {0x3a75c000}, {0x3a75e000}, {0x3a760000}, {0x3a762000}, {0x3a764000}, {0x3a766000}, {0x3a768000}, {0x3a76a000}, {0x3a76c000}, {0x3a76e000}, {0x3a770000}, {0x3a772000}, {0x3a774000}, {0x3a776000}, {0x3a778000}, {0x3a77a000}, {0x3a77c000}, {0x3a77e000}, {0x3a780000}, {0x3a782000}, {0x3a784000}, {0x3a786000}, {0x3a788000}, {0x3a78a000}, {0x3a78c000}, {0x3a78e000}, {0x3a790000}, {0x3a792000}, {0x3a794000}, {0x3a796000}, {0x3a798000}, {0x3a79a000}, {0x3a79c000}, {0x3a79e000}, {0x3a7a0000}, {0x3a7a2000}, {0x3a7a4000}, {0x3a7a6000}, {0x3a7a8000}, {0x3a7aa000}, {0x3a7ac000}, {0x3a7ae000}, {0x3a7b0000}, {0x3a7b2000}, {0x3a7b4000}, {0x3a7b6000}, {0x3a7b8000}, {0x3a7ba000}, {0x3a7bc000}, {0x3a7be000}, {0x3a7c0000}, {0x3a7c2000}, {0x3a7c4000}, {0x3a7c6000}, {0x3a7c8000}, {0x3a7ca000}, {0x3a7cc000}, {0x3a7ce000}, {0x3a7d0000}, {0x3a7d2000}, {0x3a7d4000}, {0x3a7d6000}, {0x3a7d8000}, {0x3a7da000}, {0x3a7dc000}, {0x3a7de000}, {0x3a7e0000}, {0x3a7e2000}, {0x3a7e4000}, {0x3a7e6000}, {0x3a7e8000}, {0x3a7ea000}, {0x3a7ec000}, {0x3a7ee000}, {0x3a7f0000}, {0x3a7f2000}, {0x3a7f4000}, {0x3a7f6000}, {0x3a7f8000}, {0x3a7fa000}, {0x3a7fc000}, {0x3a7fe000}, {0x3a800000}, {0x3a802000}, {0x3a804000}, {0x3a806000}, {0x3a808000}, {0x3a80a000}, {0x3a80c000}, {0x3a80e000}, {0x3a810000}, {0x3a812000}, {0x3a814000}, {0x3a816000}, {0x3a818000}, {0x3a81a000}, {0x3a81c000}, {0x3a81e000}, {0x3a820000}, {0x3a822000}, {0x3a824000}, {0x3a826000}, {0x3a828000}, {0x3a82a000}, {0x3a82c000}, {0x3a82e000}, {0x3a830000}, {0x3a832000}, {0x3a834000}, {0x3a836000}, {0x3a838000}, {0x3a83a000}, {0x3a83c000}, {0x3a83e000}, {0x3a840000}, {0x3a842000}, {0x3a844000}, {0x3a846000}, {0x3a848000}, {0x3a84a000}, {0x3a84c000}, {0x3a84e000}, {0x3a850000}, {0x3a852000}, {0x3a854000}, {0x3a856000}, {0x3a858000}, {0x3a85a000}, {0x3a85c000}, {0x3a85e000}, {0x3a860000}, {0x3a862000}, {0x3a864000}, {0x3a866000}, {0x3a868000}, {0x3a86a000}, {0x3a86c000}, {0x3a86e000}, {0x3a870000}, {0x3a872000}, {0x3a874000}, {0x3a876000}, {0x3a878000}, {0x3a87a000}, {0x3a87c000}, {0x3a87e000}, {0x3a880000}, {0x3a882000}, {0x3a884000}, {0x3a886000}, {0x3a888000}, {0x3a88a000}, {0x3a88c000}, {0x3a88e000}, {0x3a890000}, {0x3a892000}, {0x3a894000}, {0x3a896000}, {0x3a898000}, {0x3a89a000}, {0x3a89c000}, {0x3a89e000}, {0x3a8a0000}, {0x3a8a2000}, {0x3a8a4000}, {0x3a8a6000}, {0x3a8a8000}, {0x3a8aa000}, {0x3a8ac000}, {0x3a8ae000}, {0x3a8b0000}, {0x3a8b2000}, {0x3a8b4000}, {0x3a8b6000}, {0x3a8b8000}, {0x3a8ba000}, {0x3a8bc000}, {0x3a8be000}, {0x3a8c0000}, {0x3a8c2000}, {0x3a8c4000}, {0x3a8c6000}, {0x3a8c8000}, {0x3a8ca000}, {0x3a8cc000}, {0x3a8ce000}, {0x3a8d0000}, {0x3a8d2000}, {0x3a8d4000}, {0x3a8d6000}, {0x3a8d8000}, {0x3a8da000}, {0x3a8dc000}, {0x3a8de000}, {0x3a8e0000}, {0x3a8e2000}, {0x3a8e4000}, {0x3a8e6000}, {0x3a8e8000}, {0x3a8ea000}, {0x3a8ec000}, {0x3a8ee000}, {0x3a8f0000}, {0x3a8f2000}, {0x3a8f4000}, {0x3a8f6000}, {0x3a8f8000}, {0x3a8fa000}, {0x3a8fc000}, {0x3a8fe000}, {0x3a900000}, {0x3a902000}, {0x3a904000}, {0x3a906000}, {0x3a908000}, {0x3a90a000}, {0x3a90c000}, {0x3a90e000}, {0x3a910000}, {0x3a912000}, {0x3a914000}, {0x3a916000}, {0x3a918000}, {0x3a91a000}, {0x3a91c000}, {0x3a91e000}, {0x3a920000}, {0x3a922000}, {0x3a924000}, {0x3a926000}, {0x3a928000}, {0x3a92a000}, {0x3a92c000}, {0x3a92e000}, {0x3a930000}, {0x3a932000}, {0x3a934000}, {0x3a936000}, {0x3a938000}, {0x3a93a000}, {0x3a93c000}, {0x3a93e000}, {0x3a940000}, {0x3a942000}, {0x3a944000}, {0x3a946000}, {0x3a948000}, {0x3a94a000}, {0x3a94c000}, {0x3a94e000}, {0x3a950000}, {0x3a952000}, {0x3a954000}, {0x3a956000}, {0x3a958000}, {0x3a95a000}, {0x3a95c000}, {0x3a95e000}, {0x3a960000}, {0x3a962000}, {0x3a964000}, {0x3a966000}, {0x3a968000}, {0x3a96a000}, {0x3a96c000}, {0x3a96e000}, {0x3a970000}, {0x3a972000}, {0x3a974000}, {0x3a976000}, {0x3a978000}, {0x3a97a000}, {0x3a97c000}, {0x3a97e000}, {0x3a980000}, {0x3a982000}, {0x3a984000}, {0x3a986000}, {0x3a988000}, {0x3a98a000}, {0x3a98c000}, {0x3a98e000}, {0x3a990000}, {0x3a992000}, {0x3a994000}, {0x3a996000}, {0x3a998000}, {0x3a99a000}, {0x3a99c000}, {0x3a99e000}, {0x3a9a0000}, {0x3a9a2000}, {0x3a9a4000}, {0x3a9a6000}, {0x3a9a8000}, {0x3a9aa000}, {0x3a9ac000}, {0x3a9ae000}, {0x3a9b0000}, {0x3a9b2000}, {0x3a9b4000}, {0x3a9b6000}, {0x3a9b8000}, {0x3a9ba000}, {0x3a9bc000}, {0x3a9be000}, {0x3a9c0000}, {0x3a9c2000}, {0x3a9c4000}, {0x3a9c6000}, {0x3a9c8000}, {0x3a9ca000}, {0x3a9cc000}, {0x3a9ce000}, {0x3a9d0000}, {0x3a9d2000}, {0x3a9d4000}, {0x3a9d6000}, {0x3a9d8000}, {0x3a9da000}, {0x3a9dc000}, {0x3a9de000}, {0x3a9e0000}, {0x3a9e2000}, {0x3a9e4000}, {0x3a9e6000}, {0x3a9e8000}, {0x3a9ea000}, {0x3a9ec000}, {0x3a9ee000}, {0x3a9f0000}, {0x3a9f2000}, {0x3a9f4000}, {0x3a9f6000}, {0x3a9f8000}, {0x3a9fa000}, {0x3a9fc000}, {0x3a9fe000}, {0x3aa00000}, {0x3aa02000}, {0x3aa04000}, {0x3aa06000}, {0x3aa08000}, {0x3aa0a000}, {0x3aa0c000}, {0x3aa0e000}, {0x3aa10000}, {0x3aa12000}, {0x3aa14000}, {0x3aa16000}, {0x3aa18000}, {0x3aa1a000}, {0x3aa1c000}, {0x3aa1e000}, {0x3aa20000}, {0x3aa22000}, {0x3aa24000}, {0x3aa26000}, {0x3aa28000}, {0x3aa2a000}, {0x3aa2c000}, {0x3aa2e000}, {0x3aa30000}, {0x3aa32000}, {0x3aa34000}, {0x3aa36000}, {0x3aa38000}, {0x3aa3a000}, {0x3aa3c000}, {0x3aa3e000}, {0x3aa40000}, {0x3aa42000}, {0x3aa44000}, {0x3aa46000}, {0x3aa48000}, {0x3aa4a000}, {0x3aa4c000}, {0x3aa4e000}, {0x3aa50000}, {0x3aa52000}, {0x3aa54000}, {0x3aa56000}, {0x3aa58000}, {0x3aa5a000}, {0x3aa5c000}, {0x3aa5e000}, {0x3aa60000}, {0x3aa62000}, {0x3aa64000}, {0x3aa66000}, {0x3aa68000}, {0x3aa6a000}, {0x3aa6c000}, {0x3aa6e000}, {0x3aa70000}, {0x3aa72000}, {0x3aa74000}, {0x3aa76000}, {0x3aa78000}, {0x3aa7a000}, {0x3aa7c000}, {0x3aa7e000}, {0x3aa80000}, {0x3aa82000}, {0x3aa84000}, {0x3aa86000}, {0x3aa88000}, {0x3aa8a000}, {0x3aa8c000}, {0x3aa8e000}, {0x3aa90000}, {0x3aa92000}, {0x3aa94000}, {0x3aa96000}, {0x3aa98000}, {0x3aa9a000}, {0x3aa9c000}, {0x3aa9e000}, {0x3aaa0000}, {0x3aaa2000}, {0x3aaa4000}, {0x3aaa6000}, {0x3aaa8000}, {0x3aaaa000}, {0x3aaac000}, {0x3aaae000}, {0x3aab0000}, {0x3aab2000}, {0x3aab4000}, {0x3aab6000}, {0x3aab8000}, {0x3aaba000}, {0x3aabc000}, {0x3aabe000}, {0x3aac0000}, {0x3aac2000}, {0x3aac4000}, {0x3aac6000}, {0x3aac8000}, {0x3aaca000}, {0x3aacc000}, {0x3aace000}, {0x3aad0000}, {0x3aad2000}, {0x3aad4000}, {0x3aad6000}, {0x3aad8000}, {0x3aada000}, {0x3aadc000}, {0x3aade000}, {0x3aae0000}, {0x3aae2000}, {0x3aae4000}, {0x3aae6000}, {0x3aae8000}, {0x3aaea000}, {0x3aaec000}, {0x3aaee000}, {0x3aaf0000}, {0x3aaf2000}, {0x3aaf4000}, {0x3aaf6000}, {0x3aaf8000}, {0x3aafa000}, {0x3aafc000}, {0x3aafe000}, {0x3ab00000}, {0x3ab02000}, {0x3ab04000}, {0x3ab06000}, {0x3ab08000}, {0x3ab0a000}, {0x3ab0c000}, {0x3ab0e000}, {0x3ab10000}, {0x3ab12000}, {0x3ab14000}, {0x3ab16000}, {0x3ab18000}, {0x3ab1a000}, {0x3ab1c000}, {0x3ab1e000}, {0x3ab20000}, {0x3ab22000}, {0x3ab24000}, {0x3ab26000}, {0x3ab28000}, {0x3ab2a000}, {0x3ab2c000}, {0x3ab2e000}, {0x3ab30000}, {0x3ab32000}, {0x3ab34000}, {0x3ab36000}, {0x3ab38000}, {0x3ab3a000}, {0x3ab3c000}, {0x3ab3e000}, {0x3ab40000}, {0x3ab42000}, {0x3ab44000}, {0x3ab46000}, {0x3ab48000}, {0x3ab4a000}, {0x3ab4c000}, {0x3ab4e000}, {0x3ab50000}, {0x3ab52000}, {0x3ab54000}, {0x3ab56000}, {0x3ab58000}, {0x3ab5a000}, {0x3ab5c000}, {0x3ab5e000}, {0x3ab60000}, {0x3ab62000}, {0x3ab64000}, {0x3ab66000}, {0x3ab68000}, {0x3ab6a000}, {0x3ab6c000}, {0x3ab6e000}, {0x3ab70000}, {0x3ab72000}, {0x3ab74000}, {0x3ab76000}, {0x3ab78000}, {0x3ab7a000}, {0x3ab7c000}, {0x3ab7e000}, {0x3ab80000}, {0x3ab82000}, {0x3ab84000}, {0x3ab86000}, {0x3ab88000}, {0x3ab8a000}, {0x3ab8c000}, {0x3ab8e000}, {0x3ab90000}, {0x3ab92000}, {0x3ab94000}, {0x3ab96000}, {0x3ab98000}, {0x3ab9a000}, {0x3ab9c000}, {0x3ab9e000}, {0x3aba0000}, {0x3aba2000}, {0x3aba4000}, {0x3aba6000}, {0x3aba8000}, {0x3abaa000}, {0x3abac000}, {0x3abae000}, {0x3abb0000}, {0x3abb2000}, {0x3abb4000}, {0x3abb6000}, {0x3abb8000}, {0x3abba000}, {0x3abbc000}, {0x3abbe000}, {0x3abc0000}, {0x3abc2000}, {0x3abc4000}, {0x3abc6000}, {0x3abc8000}, {0x3abca000}, {0x3abcc000}, {0x3abce000}, {0x3abd0000}, {0x3abd2000}, {0x3abd4000}, {0x3abd6000}, {0x3abd8000}, {0x3abda000}, {0x3abdc000}, {0x3abde000}, {0x3abe0000}, {0x3abe2000}, {0x3abe4000}, {0x3abe6000}, {0x3abe8000}, {0x3abea000}, {0x3abec000}, {0x3abee000}, {0x3abf0000}, {0x3abf2000}, {0x3abf4000}, {0x3abf6000}, {0x3abf8000}, {0x3abfa000}, {0x3abfc000}, {0x3abfe000}, {0x3ac00000}, {0x3ac02000}, {0x3ac04000}, {0x3ac06000}, {0x3ac08000}, {0x3ac0a000}, {0x3ac0c000}, {0x3ac0e000}, {0x3ac10000}, {0x3ac12000}, {0x3ac14000}, {0x3ac16000}, {0x3ac18000}, {0x3ac1a000}, {0x3ac1c000}, {0x3ac1e000}, {0x3ac20000}, {0x3ac22000}, {0x3ac24000}, {0x3ac26000}, {0x3ac28000}, {0x3ac2a000}, {0x3ac2c000}, {0x3ac2e000}, {0x3ac30000}, {0x3ac32000}, {0x3ac34000}, {0x3ac36000}, {0x3ac38000}, {0x3ac3a000}, {0x3ac3c000}, {0x3ac3e000}, {0x3ac40000}, {0x3ac42000}, {0x3ac44000}, {0x3ac46000}, {0x3ac48000}, {0x3ac4a000}, {0x3ac4c000}, {0x3ac4e000}, {0x3ac50000}, {0x3ac52000}, {0x3ac54000}, {0x3ac56000}, {0x3ac58000}, {0x3ac5a000}, {0x3ac5c000}, {0x3ac5e000}, {0x3ac60000}, {0x3ac62000}, {0x3ac64000}, {0x3ac66000}, {0x3ac68000}, {0x3ac6a000}, {0x3ac6c000}, {0x3ac6e000}, {0x3ac70000}, {0x3ac72000}, {0x3ac74000}, {0x3ac76000}, {0x3ac78000}, {0x3ac7a000}, {0x3ac7c000}, {0x3ac7e000}, {0x3ac80000}, {0x3ac82000}, {0x3ac84000}, {0x3ac86000}, {0x3ac88000}, {0x3ac8a000}, {0x3ac8c000}, {0x3ac8e000}, {0x3ac90000}, {0x3ac92000}, {0x3ac94000}, {0x3ac96000}, {0x3ac98000}, {0x3ac9a000}, {0x3ac9c000}, {0x3ac9e000}, {0x3aca0000}, {0x3aca2000}, {0x3aca4000}, {0x3aca6000}, {0x3aca8000}, {0x3acaa000}, {0x3acac000}, {0x3acae000}, {0x3acb0000}, {0x3acb2000}, {0x3acb4000}, {0x3acb6000}, {0x3acb8000}, {0x3acba000}, {0x3acbc000}, {0x3acbe000}, {0x3acc0000}, {0x3acc2000}, {0x3acc4000}, {0x3acc6000}, {0x3acc8000}, {0x3acca000}, {0x3accc000}, {0x3acce000}, {0x3acd0000}, {0x3acd2000}, {0x3acd4000}, {0x3acd6000}, {0x3acd8000}, {0x3acda000}, {0x3acdc000}, {0x3acde000}, {0x3ace0000}, {0x3ace2000}, {0x3ace4000}, {0x3ace6000}, {0x3ace8000}, {0x3acea000}, {0x3acec000}, {0x3acee000}, {0x3acf0000}, {0x3acf2000}, {0x3acf4000}, {0x3acf6000}, {0x3acf8000}, {0x3acfa000}, {0x3acfc000}, {0x3acfe000}, {0x3ad00000}, {0x3ad02000}, {0x3ad04000}, {0x3ad06000}, {0x3ad08000}, {0x3ad0a000}, {0x3ad0c000}, {0x3ad0e000}, {0x3ad10000}, {0x3ad12000}, {0x3ad14000}, {0x3ad16000}, {0x3ad18000}, {0x3ad1a000}, {0x3ad1c000}, {0x3ad1e000}, {0x3ad20000}, {0x3ad22000}, {0x3ad24000}, {0x3ad26000}, {0x3ad28000}, {0x3ad2a000}, {0x3ad2c000}, {0x3ad2e000}, {0x3ad30000}, {0x3ad32000}, {0x3ad34000}, {0x3ad36000}, {0x3ad38000}, {0x3ad3a000}, {0x3ad3c000}, {0x3ad3e000}, {0x3ad40000}, {0x3ad42000}, {0x3ad44000}, {0x3ad46000}, {0x3ad48000}, {0x3ad4a000}, {0x3ad4c000}, {0x3ad4e000}, {0x3ad50000}, {0x3ad52000}, {0x3ad54000}, {0x3ad56000}, {0x3ad58000}, {0x3ad5a000}, {0x3ad5c000}, {0x3ad5e000}, {0x3ad60000}, {0x3ad62000}, {0x3ad64000}, {0x3ad66000}, {0x3ad68000}, {0x3ad6a000}, {0x3ad6c000}, {0x3ad6e000}, {0x3ad70000}, {0x3ad72000}, {0x3ad74000}, {0x3ad76000}, {0x3ad78000}, {0x3ad7a000}, {0x3ad7c000}, {0x3ad7e000}, {0x3ad80000}, {0x3ad82000}, {0x3ad84000}, {0x3ad86000}, {0x3ad88000}, {0x3ad8a000}, {0x3ad8c000}, {0x3ad8e000}, {0x3ad90000}, {0x3ad92000}, {0x3ad94000}, {0x3ad96000}, {0x3ad98000}, {0x3ad9a000}, {0x3ad9c000}, {0x3ad9e000}, {0x3ada0000}, {0x3ada2000}, {0x3ada4000}, {0x3ada6000}, {0x3ada8000}, {0x3adaa000}, {0x3adac000}, {0x3adae000}, {0x3adb0000}, {0x3adb2000}, {0x3adb4000}, {0x3adb6000}, {0x3adb8000}, {0x3adba000}, {0x3adbc000}, {0x3adbe000}, {0x3adc0000}, {0x3adc2000}, {0x3adc4000}, {0x3adc6000}, {0x3adc8000}, {0x3adca000}, {0x3adcc000}, {0x3adce000}, {0x3add0000}, {0x3add2000}, {0x3add4000}, {0x3add6000}, {0x3add8000}, {0x3adda000}, {0x3addc000}, {0x3adde000}, {0x3ade0000}, {0x3ade2000}, {0x3ade4000}, {0x3ade6000}, {0x3ade8000}, {0x3adea000}, {0x3adec000}, {0x3adee000}, {0x3adf0000}, {0x3adf2000}, {0x3adf4000}, {0x3adf6000}, {0x3adf8000}, {0x3adfa000}, {0x3adfc000}, {0x3adfe000}, {0x3ae00000}, {0x3ae02000}, {0x3ae04000}, {0x3ae06000}, {0x3ae08000}, {0x3ae0a000}, {0x3ae0c000}, {0x3ae0e000}, {0x3ae10000}, {0x3ae12000}, {0x3ae14000}, {0x3ae16000}, {0x3ae18000}, {0x3ae1a000}, {0x3ae1c000}, {0x3ae1e000}, {0x3ae20000}, {0x3ae22000}, {0x3ae24000}, {0x3ae26000}, {0x3ae28000}, {0x3ae2a000}, {0x3ae2c000}, {0x3ae2e000}, {0x3ae30000}, {0x3ae32000}, {0x3ae34000}, {0x3ae36000}, {0x3ae38000}, {0x3ae3a000}, {0x3ae3c000}, {0x3ae3e000}, {0x3ae40000}, {0x3ae42000}, {0x3ae44000}, {0x3ae46000}, {0x3ae48000}, {0x3ae4a000}, {0x3ae4c000}, {0x3ae4e000}, {0x3ae50000}, {0x3ae52000}, {0x3ae54000}, {0x3ae56000}, {0x3ae58000}, {0x3ae5a000}, {0x3ae5c000}, {0x3ae5e000}, {0x3ae60000}, {0x3ae62000}, {0x3ae64000}, {0x3ae66000}, {0x3ae68000}, {0x3ae6a000}, {0x3ae6c000}, {0x3ae6e000}, {0x3ae70000}, {0x3ae72000}, {0x3ae74000}, {0x3ae76000}, {0x3ae78000}, {0x3ae7a000}, {0x3ae7c000}, {0x3ae7e000}, {0x3ae80000}, {0x3ae82000}, {0x3ae84000}, {0x3ae86000}, {0x3ae88000}, {0x3ae8a000}, {0x3ae8c000}, {0x3ae8e000}, {0x3ae90000}, {0x3ae92000}, {0x3ae94000}, {0x3ae96000}, {0x3ae98000}, {0x3ae9a000}, {0x3ae9c000}, {0x3ae9e000}, {0x3aea0000}, {0x3aea2000}, {0x3aea4000}, {0x3aea6000}, {0x3aea8000}, {0x3aeaa000}, {0x3aeac000}, {0x3aeae000}, {0x3aeb0000}, {0x3aeb2000}, {0x3aeb4000}, {0x3aeb6000}, {0x3aeb8000}, {0x3aeba000}, {0x3aebc000}, {0x3aebe000}, {0x3aec0000}, {0x3aec2000}, {0x3aec4000}, {0x3aec6000}, {0x3aec8000}, {0x3aeca000}, {0x3aecc000}, {0x3aece000}, {0x3aed0000}, {0x3aed2000}, {0x3aed4000}, {0x3aed6000}, {0x3aed8000}, {0x3aeda000}, {0x3aedc000}, {0x3aede000}, {0x3aee0000}, {0x3aee2000}, {0x3aee4000}, {0x3aee6000}, {0x3aee8000}, {0x3aeea000}, {0x3aeec000}, {0x3aeee000}, {0x3aef0000}, {0x3aef2000}, {0x3aef4000}, {0x3aef6000}, {0x3aef8000}, {0x3aefa000}, {0x3aefc000}, {0x3aefe000}, {0x3af00000}, {0x3af02000}, {0x3af04000}, {0x3af06000}, {0x3af08000}, {0x3af0a000}, {0x3af0c000}, {0x3af0e000}, {0x3af10000}, {0x3af12000}, {0x3af14000}, {0x3af16000}, {0x3af18000}, {0x3af1a000}, {0x3af1c000}, {0x3af1e000}, {0x3af20000}, {0x3af22000}, {0x3af24000}, {0x3af26000}, {0x3af28000}, {0x3af2a000}, {0x3af2c000}, {0x3af2e000}, {0x3af30000}, {0x3af32000}, {0x3af34000}, {0x3af36000}, {0x3af38000}, {0x3af3a000}, {0x3af3c000}, {0x3af3e000}, {0x3af40000}, {0x3af42000}, {0x3af44000}, {0x3af46000}, {0x3af48000}, {0x3af4a000}, {0x3af4c000}, {0x3af4e000}, {0x3af50000}, {0x3af52000}, {0x3af54000}, {0x3af56000}, {0x3af58000}, {0x3af5a000}, {0x3af5c000}, {0x3af5e000}, {0x3af60000}, {0x3af62000}, {0x3af64000}, {0x3af66000}, {0x3af68000}, {0x3af6a000}, {0x3af6c000}, {0x3af6e000}, {0x3af70000}, {0x3af72000}, {0x3af74000}, {0x3af76000}, {0x3af78000}, {0x3af7a000}, {0x3af7c000}, {0x3af7e000}, {0x3af80000}, {0x3af82000}, {0x3af84000}, {0x3af86000}, {0x3af88000}, {0x3af8a000}, {0x3af8c000}, {0x3af8e000}, {0x3af90000}, {0x3af92000}, {0x3af94000}, {0x3af96000}, {0x3af98000}, {0x3af9a000}, {0x3af9c000}, {0x3af9e000}, {0x3afa0000}, {0x3afa2000}, {0x3afa4000}, {0x3afa6000}, {0x3afa8000}, {0x3afaa000}, {0x3afac000}, {0x3afae000}, {0x3afb0000}, {0x3afb2000}, {0x3afb4000}, {0x3afb6000}, {0x3afb8000}, {0x3afba000}, {0x3afbc000}, {0x3afbe000}, {0x3afc0000}, {0x3afc2000}, {0x3afc4000}, {0x3afc6000}, {0x3afc8000}, {0x3afca000}, {0x3afcc000}, {0x3afce000}, {0x3afd0000}, {0x3afd2000}, {0x3afd4000}, {0x3afd6000}, {0x3afd8000}, {0x3afda000}, {0x3afdc000}, {0x3afde000}, {0x3afe0000}, {0x3afe2000}, {0x3afe4000}, {0x3afe6000}, {0x3afe8000}, {0x3afea000}, {0x3afec000}, {0x3afee000}, {0x3aff0000}, {0x3aff2000}, {0x3aff4000}, {0x3aff6000}, {0x3aff8000}, {0x3affa000}, {0x3affc000}, {0x3affe000}, {0x3b000000}, {0x3b002000}, {0x3b004000}, {0x3b006000}, {0x3b008000}, {0x3b00a000}, {0x3b00c000}, {0x3b00e000}, {0x3b010000}, {0x3b012000}, {0x3b014000}, {0x3b016000}, {0x3b018000}, {0x3b01a000}, {0x3b01c000}, {0x3b01e000}, {0x3b020000}, {0x3b022000}, {0x3b024000}, {0x3b026000}, {0x3b028000}, {0x3b02a000}, {0x3b02c000}, {0x3b02e000}, {0x3b030000}, {0x3b032000}, {0x3b034000}, {0x3b036000}, {0x3b038000}, {0x3b03a000}, {0x3b03c000}, {0x3b03e000}, {0x3b040000}, {0x3b042000}, {0x3b044000}, {0x3b046000}, {0x3b048000}, {0x3b04a000}, {0x3b04c000}, {0x3b04e000}, {0x3b050000}, {0x3b052000}, {0x3b054000}, {0x3b056000}, {0x3b058000}, {0x3b05a000}, {0x3b05c000}, {0x3b05e000}, {0x3b060000}, {0x3b062000}, {0x3b064000}, {0x3b066000}, {0x3b068000}, {0x3b06a000}, {0x3b06c000}, {0x3b06e000}, {0x3b070000}, {0x3b072000}, {0x3b074000}, {0x3b076000}, {0x3b078000}, {0x3b07a000}, {0x3b07c000}, {0x3b07e000}, {0x3b080000}, {0x3b082000}, {0x3b084000}, {0x3b086000}, {0x3b088000}, {0x3b08a000}, {0x3b08c000}, {0x3b08e000}, {0x3b090000}, {0x3b092000}, {0x3b094000}, {0x3b096000}, {0x3b098000}, {0x3b09a000}, {0x3b09c000}, {0x3b09e000}, {0x3b0a0000}, {0x3b0a2000}, {0x3b0a4000}, {0x3b0a6000}, {0x3b0a8000}, {0x3b0aa000}, {0x3b0ac000}, {0x3b0ae000}, {0x3b0b0000}, {0x3b0b2000}, {0x3b0b4000}, {0x3b0b6000}, {0x3b0b8000}, {0x3b0ba000}, {0x3b0bc000}, {0x3b0be000}, {0x3b0c0000}, {0x3b0c2000}, {0x3b0c4000}, {0x3b0c6000}, {0x3b0c8000}, {0x3b0ca000}, {0x3b0cc000}, {0x3b0ce000}, {0x3b0d0000}, {0x3b0d2000}, {0x3b0d4000}, {0x3b0d6000}, {0x3b0d8000}, {0x3b0da000}, {0x3b0dc000}, {0x3b0de000}, {0x3b0e0000}, {0x3b0e2000}, {0x3b0e4000}, {0x3b0e6000}, {0x3b0e8000}, {0x3b0ea000}, {0x3b0ec000}, {0x3b0ee000}, {0x3b0f0000}, {0x3b0f2000}, {0x3b0f4000}, {0x3b0f6000}, {0x3b0f8000}, {0x3b0fa000}, {0x3b0fc000}, {0x3b0fe000}, {0x3b100000}, {0x3b102000}, {0x3b104000}, {0x3b106000}, {0x3b108000}, {0x3b10a000}, {0x3b10c000}, {0x3b10e000}, {0x3b110000}, {0x3b112000}, {0x3b114000}, {0x3b116000}, {0x3b118000}, {0x3b11a000}, {0x3b11c000}, {0x3b11e000}, {0x3b120000}, {0x3b122000}, {0x3b124000}, {0x3b126000}, {0x3b128000}, {0x3b12a000}, {0x3b12c000}, {0x3b12e000}, {0x3b130000}, {0x3b132000}, {0x3b134000}, {0x3b136000}, {0x3b138000}, {0x3b13a000}, {0x3b13c000}, {0x3b13e000}, {0x3b140000}, {0x3b142000}, {0x3b144000}, {0x3b146000}, {0x3b148000}, {0x3b14a000}, {0x3b14c000}, {0x3b14e000}, {0x3b150000}, {0x3b152000}, {0x3b154000}, {0x3b156000}, {0x3b158000}, {0x3b15a000}, {0x3b15c000}, {0x3b15e000}, {0x3b160000}, {0x3b162000}, {0x3b164000}, {0x3b166000}, {0x3b168000}, {0x3b16a000}, {0x3b16c000}, {0x3b16e000}, {0x3b170000}, {0x3b172000}, {0x3b174000}, {0x3b176000}, {0x3b178000}, {0x3b17a000}, {0x3b17c000}, {0x3b17e000}, {0x3b180000}, {0x3b182000}, {0x3b184000}, {0x3b186000}, {0x3b188000}, {0x3b18a000}, {0x3b18c000}, {0x3b18e000}, {0x3b190000}, {0x3b192000}, {0x3b194000}, {0x3b196000}, {0x3b198000}, {0x3b19a000}, {0x3b19c000}, {0x3b19e000}, {0x3b1a0000}, {0x3b1a2000}, {0x3b1a4000}, {0x3b1a6000}, {0x3b1a8000}, {0x3b1aa000}, {0x3b1ac000}, {0x3b1ae000}, {0x3b1b0000}, {0x3b1b2000}, {0x3b1b4000}, {0x3b1b6000}, {0x3b1b8000}, {0x3b1ba000}, {0x3b1bc000}, {0x3b1be000}, {0x3b1c0000}, {0x3b1c2000}, {0x3b1c4000}, {0x3b1c6000}, {0x3b1c8000}, {0x3b1ca000}, {0x3b1cc000}, {0x3b1ce000}, {0x3b1d0000}, {0x3b1d2000}, {0x3b1d4000}, {0x3b1d6000}, {0x3b1d8000}, {0x3b1da000}, {0x3b1dc000}, {0x3b1de000}, {0x3b1e0000}, {0x3b1e2000}, {0x3b1e4000}, {0x3b1e6000}, {0x3b1e8000}, {0x3b1ea000}, {0x3b1ec000}, {0x3b1ee000}, {0x3b1f0000}, {0x3b1f2000}, {0x3b1f4000}, {0x3b1f6000}, {0x3b1f8000}, {0x3b1fa000}, {0x3b1fc000}, {0x3b1fe000}, {0x3b200000}, {0x3b202000}, {0x3b204000}, {0x3b206000}, {0x3b208000}, {0x3b20a000}, {0x3b20c000}, {0x3b20e000}, {0x3b210000}, {0x3b212000}, {0x3b214000}, {0x3b216000}, {0x3b218000}, {0x3b21a000}, {0x3b21c000}, {0x3b21e000}, {0x3b220000}, {0x3b222000}, {0x3b224000}, {0x3b226000}, {0x3b228000}, {0x3b22a000}, {0x3b22c000}, {0x3b22e000}, {0x3b230000}, {0x3b232000}, {0x3b234000}, {0x3b236000}, {0x3b238000}, {0x3b23a000}, {0x3b23c000}, {0x3b23e000}, {0x3b240000}, {0x3b242000}, {0x3b244000}, {0x3b246000}, {0x3b248000}, {0x3b24a000}, {0x3b24c000}, {0x3b24e000}, {0x3b250000}, {0x3b252000}, {0x3b254000}, {0x3b256000}, {0x3b258000}, {0x3b25a000}, {0x3b25c000}, {0x3b25e000}, {0x3b260000}, {0x3b262000}, {0x3b264000}, {0x3b266000}, {0x3b268000}, {0x3b26a000}, {0x3b26c000}, {0x3b26e000}, {0x3b270000}, {0x3b272000}, {0x3b274000}, {0x3b276000}, {0x3b278000}, {0x3b27a000}, {0x3b27c000}, {0x3b27e000}, {0x3b280000}, {0x3b282000}, {0x3b284000}, {0x3b286000}, {0x3b288000}, {0x3b28a000}, {0x3b28c000}, {0x3b28e000}, {0x3b290000}, {0x3b292000}, {0x3b294000}, {0x3b296000}, {0x3b298000}, {0x3b29a000}, {0x3b29c000}, {0x3b29e000}, {0x3b2a0000}, {0x3b2a2000}, {0x3b2a4000}, {0x3b2a6000}, {0x3b2a8000}, {0x3b2aa000}, {0x3b2ac000}, {0x3b2ae000}, {0x3b2b0000}, {0x3b2b2000}, {0x3b2b4000}, {0x3b2b6000}, {0x3b2b8000}, {0x3b2ba000}, {0x3b2bc000}, {0x3b2be000}, {0x3b2c0000}, {0x3b2c2000}, {0x3b2c4000}, {0x3b2c6000}, {0x3b2c8000}, {0x3b2ca000}, {0x3b2cc000}, {0x3b2ce000}, {0x3b2d0000}, {0x3b2d2000}, {0x3b2d4000}, {0x3b2d6000}, {0x3b2d8000}, {0x3b2da000}, {0x3b2dc000}, {0x3b2de000}, {0x3b2e0000}, {0x3b2e2000}, {0x3b2e4000}, {0x3b2e6000}, {0x3b2e8000}, {0x3b2ea000}, {0x3b2ec000}, {0x3b2ee000}, {0x3b2f0000}, {0x3b2f2000}, {0x3b2f4000}, {0x3b2f6000}, {0x3b2f8000}, {0x3b2fa000}, {0x3b2fc000}, {0x3b2fe000}, {0x3b300000}, {0x3b302000}, {0x3b304000}, {0x3b306000}, {0x3b308000}, {0x3b30a000}, {0x3b30c000}, {0x3b30e000}, {0x3b310000}, {0x3b312000}, {0x3b314000}, {0x3b316000}, {0x3b318000}, {0x3b31a000}, {0x3b31c000}, {0x3b31e000}, {0x3b320000}, {0x3b322000}, {0x3b324000}, {0x3b326000}, {0x3b328000}, {0x3b32a000}, {0x3b32c000}, {0x3b32e000}, {0x3b330000}, {0x3b332000}, {0x3b334000}, {0x3b336000}, {0x3b338000}, {0x3b33a000}, {0x3b33c000}, {0x3b33e000}, {0x3b340000}, {0x3b342000}, {0x3b344000}, {0x3b346000}, {0x3b348000}, {0x3b34a000}, {0x3b34c000}, {0x3b34e000}, {0x3b350000}, {0x3b352000}, {0x3b354000}, {0x3b356000}, {0x3b358000}, {0x3b35a000}, {0x3b35c000}, {0x3b35e000}, {0x3b360000}, {0x3b362000}, {0x3b364000}, {0x3b366000}, {0x3b368000}, {0x3b36a000}, {0x3b36c000}, {0x3b36e000}, {0x3b370000}, {0x3b372000}, {0x3b374000}, {0x3b376000}, {0x3b378000}, {0x3b37a000}, {0x3b37c000}, {0x3b37e000}, {0x3b380000}, {0x3b382000}, {0x3b384000}, {0x3b386000}, {0x3b388000}, {0x3b38a000}, {0x3b38c000}, {0x3b38e000}, {0x3b390000}, {0x3b392000}, {0x3b394000}, {0x3b396000}, {0x3b398000}, {0x3b39a000}, {0x3b39c000}, {0x3b39e000}, {0x3b3a0000}, {0x3b3a2000}, {0x3b3a4000}, {0x3b3a6000}, {0x3b3a8000}, {0x3b3aa000}, {0x3b3ac000}, {0x3b3ae000}, {0x3b3b0000}, {0x3b3b2000}, {0x3b3b4000}, {0x3b3b6000}, {0x3b3b8000}, {0x3b3ba000}, {0x3b3bc000}, {0x3b3be000}, {0x3b3c0000}, {0x3b3c2000}, {0x3b3c4000}, {0x3b3c6000}, {0x3b3c8000}, {0x3b3ca000}, {0x3b3cc000}, {0x3b3ce000}, {0x3b3d0000}, {0x3b3d2000}, {0x3b3d4000}, {0x3b3d6000}, {0x3b3d8000}, {0x3b3da000}, {0x3b3dc000}, {0x3b3de000}, {0x3b3e0000}, {0x3b3e2000}, {0x3b3e4000}, {0x3b3e6000}, {0x3b3e8000}, {0x3b3ea000}, {0x3b3ec000}, {0x3b3ee000}, {0x3b3f0000}, {0x3b3f2000}, {0x3b3f4000}, {0x3b3f6000}, {0x3b3f8000}, {0x3b3fa000}, {0x3b3fc000}, {0x3b3fe000}, {0x3b400000}, {0x3b402000}, {0x3b404000}, {0x3b406000}, {0x3b408000}, {0x3b40a000}, {0x3b40c000}, {0x3b40e000}, {0x3b410000}, {0x3b412000}, {0x3b414000}, {0x3b416000}, {0x3b418000}, {0x3b41a000}, {0x3b41c000}, {0x3b41e000}, {0x3b420000}, {0x3b422000}, {0x3b424000}, {0x3b426000}, {0x3b428000}, {0x3b42a000}, {0x3b42c000}, {0x3b42e000}, {0x3b430000}, {0x3b432000}, {0x3b434000}, {0x3b436000}, {0x3b438000}, {0x3b43a000}, {0x3b43c000}, {0x3b43e000}, {0x3b440000}, {0x3b442000}, {0x3b444000}, {0x3b446000}, {0x3b448000}, {0x3b44a000}, {0x3b44c000}, {0x3b44e000}, {0x3b450000}, {0x3b452000}, {0x3b454000}, {0x3b456000}, {0x3b458000}, {0x3b45a000}, {0x3b45c000}, {0x3b45e000}, {0x3b460000}, {0x3b462000}, {0x3b464000}, {0x3b466000}, {0x3b468000}, {0x3b46a000}, {0x3b46c000}, {0x3b46e000}, {0x3b470000}, {0x3b472000}, {0x3b474000}, {0x3b476000}, {0x3b478000}, {0x3b47a000}, {0x3b47c000}, {0x3b47e000}, {0x3b480000}, {0x3b482000}, {0x3b484000}, {0x3b486000}, {0x3b488000}, {0x3b48a000}, {0x3b48c000}, {0x3b48e000}, {0x3b490000}, {0x3b492000}, {0x3b494000}, {0x3b496000}, {0x3b498000}, {0x3b49a000}, {0x3b49c000}, {0x3b49e000}, {0x3b4a0000}, {0x3b4a2000}, {0x3b4a4000}, {0x3b4a6000}, {0x3b4a8000}, {0x3b4aa000}, {0x3b4ac000}, {0x3b4ae000}, {0x3b4b0000}, {0x3b4b2000}, {0x3b4b4000}, {0x3b4b6000}, {0x3b4b8000}, {0x3b4ba000}, {0x3b4bc000}, {0x3b4be000}, {0x3b4c0000}, {0x3b4c2000}, {0x3b4c4000}, {0x3b4c6000}, {0x3b4c8000}, {0x3b4ca000}, {0x3b4cc000}, {0x3b4ce000}, {0x3b4d0000}, {0x3b4d2000}, {0x3b4d4000}, {0x3b4d6000}, {0x3b4d8000}, {0x3b4da000}, {0x3b4dc000}, {0x3b4de000}, {0x3b4e0000}, {0x3b4e2000}, {0x3b4e4000}, {0x3b4e6000}, {0x3b4e8000}, {0x3b4ea000}, {0x3b4ec000}, {0x3b4ee000}, {0x3b4f0000}, {0x3b4f2000}, {0x3b4f4000}, {0x3b4f6000}, {0x3b4f8000}, {0x3b4fa000}, {0x3b4fc000}, {0x3b4fe000}, {0x3b500000}, {0x3b502000}, {0x3b504000}, {0x3b506000}, {0x3b508000}, {0x3b50a000}, {0x3b50c000}, {0x3b50e000}, {0x3b510000}, {0x3b512000}, {0x3b514000}, {0x3b516000}, {0x3b518000}, {0x3b51a000}, {0x3b51c000}, {0x3b51e000}, {0x3b520000}, {0x3b522000}, {0x3b524000}, {0x3b526000}, {0x3b528000}, {0x3b52a000}, {0x3b52c000}, {0x3b52e000}, {0x3b530000}, {0x3b532000}, {0x3b534000}, {0x3b536000}, {0x3b538000}, {0x3b53a000}, {0x3b53c000}, {0x3b53e000}, {0x3b540000}, {0x3b542000}, {0x3b544000}, {0x3b546000}, {0x3b548000}, {0x3b54a000}, {0x3b54c000}, {0x3b54e000}, {0x3b550000}, {0x3b552000}, {0x3b554000}, {0x3b556000}, {0x3b558000}, {0x3b55a000}, {0x3b55c000}, {0x3b55e000}, {0x3b560000}, {0x3b562000}, {0x3b564000}, {0x3b566000}, {0x3b568000}, {0x3b56a000}, {0x3b56c000}, {0x3b56e000}, {0x3b570000}, {0x3b572000}, {0x3b574000}, {0x3b576000}, {0x3b578000}, {0x3b57a000}, {0x3b57c000}, {0x3b57e000}, {0x3b580000}, {0x3b582000}, {0x3b584000}, {0x3b586000}, {0x3b588000}, {0x3b58a000}, {0x3b58c000}, {0x3b58e000}, {0x3b590000}, {0x3b592000}, {0x3b594000}, {0x3b596000}, {0x3b598000}, {0x3b59a000}, {0x3b59c000}, {0x3b59e000}, {0x3b5a0000}, {0x3b5a2000}, {0x3b5a4000}, {0x3b5a6000}, {0x3b5a8000}, {0x3b5aa000}, {0x3b5ac000}, {0x3b5ae000}, {0x3b5b0000}, {0x3b5b2000}, {0x3b5b4000}, {0x3b5b6000}, {0x3b5b8000}, {0x3b5ba000}, {0x3b5bc000}, {0x3b5be000}, {0x3b5c0000}, {0x3b5c2000}, {0x3b5c4000}, {0x3b5c6000}, {0x3b5c8000}, {0x3b5ca000}, {0x3b5cc000}, {0x3b5ce000}, {0x3b5d0000}, {0x3b5d2000}, {0x3b5d4000}, {0x3b5d6000}, {0x3b5d8000}, {0x3b5da000}, {0x3b5dc000}, {0x3b5de000}, {0x3b5e0000}, {0x3b5e2000}, {0x3b5e4000}, {0x3b5e6000}, {0x3b5e8000}, {0x3b5ea000}, {0x3b5ec000}, {0x3b5ee000}, {0x3b5f0000}, {0x3b5f2000}, {0x3b5f4000}, {0x3b5f6000}, {0x3b5f8000}, {0x3b5fa000}, {0x3b5fc000}, {0x3b5fe000}, {0x3b600000}, {0x3b602000}, {0x3b604000}, {0x3b606000}, {0x3b608000}, {0x3b60a000}, {0x3b60c000}, {0x3b60e000}, {0x3b610000}, {0x3b612000}, {0x3b614000}, {0x3b616000}, {0x3b618000}, {0x3b61a000}, {0x3b61c000}, {0x3b61e000}, {0x3b620000}, {0x3b622000}, {0x3b624000}, {0x3b626000}, {0x3b628000}, {0x3b62a000}, {0x3b62c000}, {0x3b62e000}, {0x3b630000}, {0x3b632000}, {0x3b634000}, {0x3b636000}, {0x3b638000}, {0x3b63a000}, {0x3b63c000}, {0x3b63e000}, {0x3b640000}, {0x3b642000}, {0x3b644000}, {0x3b646000}, {0x3b648000}, {0x3b64a000}, {0x3b64c000}, {0x3b64e000}, {0x3b650000}, {0x3b652000}, {0x3b654000}, {0x3b656000}, {0x3b658000}, {0x3b65a000}, {0x3b65c000}, {0x3b65e000}, {0x3b660000}, {0x3b662000}, {0x3b664000}, {0x3b666000}, {0x3b668000}, {0x3b66a000}, {0x3b66c000}, {0x3b66e000}, {0x3b670000}, {0x3b672000}, {0x3b674000}, {0x3b676000}, {0x3b678000}, {0x3b67a000}, {0x3b67c000}, {0x3b67e000}, {0x3b680000}, {0x3b682000}, {0x3b684000}, {0x3b686000}, {0x3b688000}, {0x3b68a000}, {0x3b68c000}, {0x3b68e000}, {0x3b690000}, {0x3b692000}, {0x3b694000}, {0x3b696000}, {0x3b698000}, {0x3b69a000}, {0x3b69c000}, {0x3b69e000}, {0x3b6a0000}, {0x3b6a2000}, {0x3b6a4000}, {0x3b6a6000}, {0x3b6a8000}, {0x3b6aa000}, {0x3b6ac000}, {0x3b6ae000}, {0x3b6b0000}, {0x3b6b2000}, {0x3b6b4000}, {0x3b6b6000}, {0x3b6b8000}, {0x3b6ba000}, {0x3b6bc000}, {0x3b6be000}, {0x3b6c0000}, {0x3b6c2000}, {0x3b6c4000}, {0x3b6c6000}, {0x3b6c8000}, {0x3b6ca000}, {0x3b6cc000}, {0x3b6ce000}, {0x3b6d0000}, {0x3b6d2000}, {0x3b6d4000}, {0x3b6d6000}, {0x3b6d8000}, {0x3b6da000}, {0x3b6dc000}, {0x3b6de000}, {0x3b6e0000}, {0x3b6e2000}, {0x3b6e4000}, {0x3b6e6000}, {0x3b6e8000}, {0x3b6ea000}, {0x3b6ec000}, {0x3b6ee000}, {0x3b6f0000}, {0x3b6f2000}, {0x3b6f4000}, {0x3b6f6000}, {0x3b6f8000}, {0x3b6fa000}, {0x3b6fc000}, {0x3b6fe000}, {0x3b700000}, {0x3b702000}, {0x3b704000}, {0x3b706000}, {0x3b708000}, {0x3b70a000}, {0x3b70c000}, {0x3b70e000}, {0x3b710000}, {0x3b712000}, {0x3b714000}, {0x3b716000}, {0x3b718000}, {0x3b71a000}, {0x3b71c000}, {0x3b71e000}, {0x3b720000}, {0x3b722000}, {0x3b724000}, {0x3b726000}, {0x3b728000}, {0x3b72a000}, {0x3b72c000}, {0x3b72e000}, {0x3b730000}, {0x3b732000}, {0x3b734000}, {0x3b736000}, {0x3b738000}, {0x3b73a000}, {0x3b73c000}, {0x3b73e000}, {0x3b740000}, {0x3b742000}, {0x3b744000}, {0x3b746000}, {0x3b748000}, {0x3b74a000}, {0x3b74c000}, {0x3b74e000}, {0x3b750000}, {0x3b752000}, {0x3b754000}, {0x3b756000}, {0x3b758000}, {0x3b75a000}, {0x3b75c000}, {0x3b75e000}, {0x3b760000}, {0x3b762000}, {0x3b764000}, {0x3b766000}, {0x3b768000}, {0x3b76a000}, {0x3b76c000}, {0x3b76e000}, {0x3b770000}, {0x3b772000}, {0x3b774000}, {0x3b776000}, {0x3b778000}, {0x3b77a000}, {0x3b77c000}, {0x3b77e000}, {0x3b780000}, {0x3b782000}, {0x3b784000}, {0x3b786000}, {0x3b788000}, {0x3b78a000}, {0x3b78c000}, {0x3b78e000}, {0x3b790000}, {0x3b792000}, {0x3b794000}, {0x3b796000}, {0x3b798000}, {0x3b79a000}, {0x3b79c000}, {0x3b79e000}, {0x3b7a0000}, {0x3b7a2000}, {0x3b7a4000}, {0x3b7a6000}, {0x3b7a8000}, {0x3b7aa000}, {0x3b7ac000}, {0x3b7ae000}, {0x3b7b0000}, {0x3b7b2000}, {0x3b7b4000}, {0x3b7b6000}, {0x3b7b8000}, {0x3b7ba000}, {0x3b7bc000}, {0x3b7be000}, {0x3b7c0000}, {0x3b7c2000}, {0x3b7c4000}, {0x3b7c6000}, {0x3b7c8000}, {0x3b7ca000}, {0x3b7cc000}, {0x3b7ce000}, {0x3b7d0000}, {0x3b7d2000}, {0x3b7d4000}, {0x3b7d6000}, {0x3b7d8000}, {0x3b7da000}, {0x3b7dc000}, {0x3b7de000}, {0x3b7e0000}, {0x3b7e2000}, {0x3b7e4000}, {0x3b7e6000}, {0x3b7e8000}, {0x3b7ea000}, {0x3b7ec000}, {0x3b7ee000}, {0x3b7f0000}, {0x3b7f2000}, {0x3b7f4000}, {0x3b7f6000}, {0x3b7f8000}, {0x3b7fa000}, {0x3b7fc000}, {0x3b7fe000}, {0x3b800000}, {0x3b802000}, {0x3b804000}, {0x3b806000}, {0x3b808000}, {0x3b80a000}, {0x3b80c000}, {0x3b80e000}, {0x3b810000}, {0x3b812000}, {0x3b814000}, {0x3b816000}, {0x3b818000}, {0x3b81a000}, {0x3b81c000}, {0x3b81e000}, {0x3b820000}, {0x3b822000}, {0x3b824000}, {0x3b826000}, {0x3b828000}, {0x3b82a000}, {0x3b82c000}, {0x3b82e000}, {0x3b830000}, {0x3b832000}, {0x3b834000}, {0x3b836000}, {0x3b838000}, {0x3b83a000}, {0x3b83c000}, {0x3b83e000}, {0x3b840000}, {0x3b842000}, {0x3b844000}, {0x3b846000}, {0x3b848000}, {0x3b84a000}, {0x3b84c000}, {0x3b84e000}, {0x3b850000}, {0x3b852000}, {0x3b854000}, {0x3b856000}, {0x3b858000}, {0x3b85a000}, {0x3b85c000}, {0x3b85e000}, {0x3b860000}, {0x3b862000}, {0x3b864000}, {0x3b866000}, {0x3b868000}, {0x3b86a000}, {0x3b86c000}, {0x3b86e000}, {0x3b870000}, {0x3b872000}, {0x3b874000}, {0x3b876000}, {0x3b878000}, {0x3b87a000}, {0x3b87c000}, {0x3b87e000}, {0x3b880000}, {0x3b882000}, {0x3b884000}, {0x3b886000}, {0x3b888000}, {0x3b88a000}, {0x3b88c000}, {0x3b88e000}, {0x3b890000}, {0x3b892000}, {0x3b894000}, {0x3b896000}, {0x3b898000}, {0x3b89a000}, {0x3b89c000}, {0x3b89e000}, {0x3b8a0000}, {0x3b8a2000}, {0x3b8a4000}, {0x3b8a6000}, {0x3b8a8000}, {0x3b8aa000}, {0x3b8ac000}, {0x3b8ae000}, {0x3b8b0000}, {0x3b8b2000}, {0x3b8b4000}, {0x3b8b6000}, {0x3b8b8000}, {0x3b8ba000}, {0x3b8bc000}, {0x3b8be000}, {0x3b8c0000}, {0x3b8c2000}, {0x3b8c4000}, {0x3b8c6000}, {0x3b8c8000}, {0x3b8ca000}, {0x3b8cc000}, {0x3b8ce000}, {0x3b8d0000}, {0x3b8d2000}, {0x3b8d4000}, {0x3b8d6000}, {0x3b8d8000}, {0x3b8da000}, {0x3b8dc000}, {0x3b8de000}, {0x3b8e0000}, {0x3b8e2000}, {0x3b8e4000}, {0x3b8e6000}, {0x3b8e8000}, {0x3b8ea000}, {0x3b8ec000}, {0x3b8ee000}, {0x3b8f0000}, {0x3b8f2000}, {0x3b8f4000}, {0x3b8f6000}, {0x3b8f8000}, {0x3b8fa000}, {0x3b8fc000}, {0x3b8fe000}, {0x3b900000}, {0x3b902000}, {0x3b904000}, {0x3b906000}, {0x3b908000}, {0x3b90a000}, {0x3b90c000}, {0x3b90e000}, {0x3b910000}, {0x3b912000}, {0x3b914000}, {0x3b916000}, {0x3b918000}, {0x3b91a000}, {0x3b91c000}, {0x3b91e000}, {0x3b920000}, {0x3b922000}, {0x3b924000}, {0x3b926000}, {0x3b928000}, {0x3b92a000}, {0x3b92c000}, {0x3b92e000}, {0x3b930000}, {0x3b932000}, {0x3b934000}, {0x3b936000}, {0x3b938000}, {0x3b93a000}, {0x3b93c000}, {0x3b93e000}, {0x3b940000}, {0x3b942000}, {0x3b944000}, {0x3b946000}, {0x3b948000}, {0x3b94a000}, {0x3b94c000}, {0x3b94e000}, {0x3b950000}, {0x3b952000}, {0x3b954000}, {0x3b956000}, {0x3b958000}, {0x3b95a000}, {0x3b95c000}, {0x3b95e000}, {0x3b960000}, {0x3b962000}, {0x3b964000}, {0x3b966000}, {0x3b968000}, {0x3b96a000}, {0x3b96c000}, {0x3b96e000}, {0x3b970000}, {0x3b972000}, {0x3b974000}, {0x3b976000}, {0x3b978000}, {0x3b97a000}, {0x3b97c000}, {0x3b97e000}, {0x3b980000}, {0x3b982000}, {0x3b984000}, {0x3b986000}, {0x3b988000}, {0x3b98a000}, {0x3b98c000}, {0x3b98e000}, {0x3b990000}, {0x3b992000}, {0x3b994000}, {0x3b996000}, {0x3b998000}, {0x3b99a000}, {0x3b99c000}, {0x3b99e000}, {0x3b9a0000}, {0x3b9a2000}, {0x3b9a4000}, {0x3b9a6000}, {0x3b9a8000}, {0x3b9aa000}, {0x3b9ac000}, {0x3b9ae000}, {0x3b9b0000}, {0x3b9b2000}, {0x3b9b4000}, {0x3b9b6000}, {0x3b9b8000}, {0x3b9ba000}, {0x3b9bc000}, {0x3b9be000}, {0x3b9c0000}, {0x3b9c2000}, {0x3b9c4000}, {0x3b9c6000}, {0x3b9c8000}, {0x3b9ca000}, {0x3b9cc000}, {0x3b9ce000}, {0x3b9d0000}, {0x3b9d2000}, {0x3b9d4000}, {0x3b9d6000}, {0x3b9d8000}, {0x3b9da000}, {0x3b9dc000}, {0x3b9de000}, {0x3b9e0000}, {0x3b9e2000}, {0x3b9e4000}, {0x3b9e6000}, {0x3b9e8000}, {0x3b9ea000}, {0x3b9ec000}, {0x3b9ee000}, {0x3b9f0000}, {0x3b9f2000}, {0x3b9f4000}, {0x3b9f6000}, {0x3b9f8000}, {0x3b9fa000}, {0x3b9fc000}, {0x3b9fe000}, {0x3ba00000}, {0x3ba02000}, {0x3ba04000}, {0x3ba06000}, {0x3ba08000}, {0x3ba0a000}, {0x3ba0c000}, {0x3ba0e000}, {0x3ba10000}, {0x3ba12000}, {0x3ba14000}, {0x3ba16000}, {0x3ba18000}, {0x3ba1a000}, {0x3ba1c000}, {0x3ba1e000}, {0x3ba20000}, {0x3ba22000}, {0x3ba24000}, {0x3ba26000}, {0x3ba28000}, {0x3ba2a000}, {0x3ba2c000}, {0x3ba2e000}, {0x3ba30000}, {0x3ba32000}, {0x3ba34000}, {0x3ba36000}, {0x3ba38000}, {0x3ba3a000}, {0x3ba3c000}, {0x3ba3e000}, {0x3ba40000}, {0x3ba42000}, {0x3ba44000}, {0x3ba46000}, {0x3ba48000}, {0x3ba4a000}, {0x3ba4c000}, {0x3ba4e000}, {0x3ba50000}, {0x3ba52000}, {0x3ba54000}, {0x3ba56000}, {0x3ba58000}, {0x3ba5a000}, {0x3ba5c000}, {0x3ba5e000}, {0x3ba60000}, {0x3ba62000}, {0x3ba64000}, {0x3ba66000}, {0x3ba68000}, {0x3ba6a000}, {0x3ba6c000}, {0x3ba6e000}, {0x3ba70000}, {0x3ba72000}, {0x3ba74000}, {0x3ba76000}, {0x3ba78000}, {0x3ba7a000}, {0x3ba7c000}, {0x3ba7e000}, {0x3ba80000}, {0x3ba82000}, {0x3ba84000}, {0x3ba86000}, {0x3ba88000}, {0x3ba8a000}, {0x3ba8c000}, {0x3ba8e000}, {0x3ba90000}, {0x3ba92000}, {0x3ba94000}, {0x3ba96000}, {0x3ba98000}, {0x3ba9a000}, {0x3ba9c000}, {0x3ba9e000}, {0x3baa0000}, {0x3baa2000}, {0x3baa4000}, {0x3baa6000}, {0x3baa8000}, {0x3baaa000}, {0x3baac000}, {0x3baae000}, {0x3bab0000}, {0x3bab2000}, {0x3bab4000}, {0x3bab6000}, {0x3bab8000}, {0x3baba000}, {0x3babc000}, {0x3babe000}, {0x3bac0000}, {0x3bac2000}, {0x3bac4000}, {0x3bac6000}, {0x3bac8000}, {0x3baca000}, {0x3bacc000}, {0x3bace000}, {0x3bad0000}, {0x3bad2000}, {0x3bad4000}, {0x3bad6000}, {0x3bad8000}, {0x3bada000}, {0x3badc000}, {0x3bade000}, {0x3bae0000}, {0x3bae2000}, {0x3bae4000}, {0x3bae6000}, {0x3bae8000}, {0x3baea000}, {0x3baec000}, {0x3baee000}, {0x3baf0000}, {0x3baf2000}, {0x3baf4000}, {0x3baf6000}, {0x3baf8000}, {0x3bafa000}, {0x3bafc000}, {0x3bafe000}, {0x3bb00000}, {0x3bb02000}, {0x3bb04000}, {0x3bb06000}, {0x3bb08000}, {0x3bb0a000}, {0x3bb0c000}, {0x3bb0e000}, {0x3bb10000}, {0x3bb12000}, {0x3bb14000}, {0x3bb16000}, {0x3bb18000}, {0x3bb1a000}, {0x3bb1c000}, {0x3bb1e000}, {0x3bb20000}, {0x3bb22000}, {0x3bb24000}, {0x3bb26000}, {0x3bb28000}, {0x3bb2a000}, {0x3bb2c000}, {0x3bb2e000}, {0x3bb30000}, {0x3bb32000}, {0x3bb34000}, {0x3bb36000}, {0x3bb38000}, {0x3bb3a000}, {0x3bb3c000}, {0x3bb3e000}, {0x3bb40000}, {0x3bb42000}, {0x3bb44000}, {0x3bb46000}, {0x3bb48000}, {0x3bb4a000}, {0x3bb4c000}, {0x3bb4e000}, {0x3bb50000}, {0x3bb52000}, {0x3bb54000}, {0x3bb56000}, {0x3bb58000}, {0x3bb5a000}, {0x3bb5c000}, {0x3bb5e000}, {0x3bb60000}, {0x3bb62000}, {0x3bb64000}, {0x3bb66000}, {0x3bb68000}, {0x3bb6a000}, {0x3bb6c000}, {0x3bb6e000}, {0x3bb70000}, {0x3bb72000}, {0x3bb74000}, {0x3bb76000}, {0x3bb78000}, {0x3bb7a000}, {0x3bb7c000}, {0x3bb7e000}, {0x3bb80000}, {0x3bb82000}, {0x3bb84000}, {0x3bb86000}, {0x3bb88000}, {0x3bb8a000}, {0x3bb8c000}, {0x3bb8e000}, {0x3bb90000}, {0x3bb92000}, {0x3bb94000}, {0x3bb96000}, {0x3bb98000}, {0x3bb9a000}, {0x3bb9c000}, {0x3bb9e000}, {0x3bba0000}, {0x3bba2000}, {0x3bba4000}, {0x3bba6000}, {0x3bba8000}, {0x3bbaa000}, {0x3bbac000}, {0x3bbae000}, {0x3bbb0000}, {0x3bbb2000}, {0x3bbb4000}, {0x3bbb6000}, {0x3bbb8000}, {0x3bbba000}, {0x3bbbc000}, {0x3bbbe000}, {0x3bbc0000}, {0x3bbc2000}, {0x3bbc4000}, {0x3bbc6000}, {0x3bbc8000}, {0x3bbca000}, {0x3bbcc000}, {0x3bbce000}, {0x3bbd0000}, {0x3bbd2000}, {0x3bbd4000}, {0x3bbd6000}, {0x3bbd8000}, {0x3bbda000}, {0x3bbdc000}, {0x3bbde000}, {0x3bbe0000}, {0x3bbe2000}, {0x3bbe4000}, {0x3bbe6000}, {0x3bbe8000}, {0x3bbea000}, {0x3bbec000}, {0x3bbee000}, {0x3bbf0000}, {0x3bbf2000}, {0x3bbf4000}, {0x3bbf6000}, {0x3bbf8000}, {0x3bbfa000}, {0x3bbfc000}, {0x3bbfe000}, {0x3bc00000}, {0x3bc02000}, {0x3bc04000}, {0x3bc06000}, {0x3bc08000}, {0x3bc0a000}, {0x3bc0c000}, {0x3bc0e000}, {0x3bc10000}, {0x3bc12000}, {0x3bc14000}, {0x3bc16000}, {0x3bc18000}, {0x3bc1a000}, {0x3bc1c000}, {0x3bc1e000}, {0x3bc20000}, {0x3bc22000}, {0x3bc24000}, {0x3bc26000}, {0x3bc28000}, {0x3bc2a000}, {0x3bc2c000}, {0x3bc2e000}, {0x3bc30000}, {0x3bc32000}, {0x3bc34000}, {0x3bc36000}, {0x3bc38000}, {0x3bc3a000}, {0x3bc3c000}, {0x3bc3e000}, {0x3bc40000}, {0x3bc42000}, {0x3bc44000}, {0x3bc46000}, {0x3bc48000}, {0x3bc4a000}, {0x3bc4c000}, {0x3bc4e000}, {0x3bc50000}, {0x3bc52000}, {0x3bc54000}, {0x3bc56000}, {0x3bc58000}, {0x3bc5a000}, {0x3bc5c000}, {0x3bc5e000}, {0x3bc60000}, {0x3bc62000}, {0x3bc64000}, {0x3bc66000}, {0x3bc68000}, {0x3bc6a000}, {0x3bc6c000}, {0x3bc6e000}, {0x3bc70000}, {0x3bc72000}, {0x3bc74000}, {0x3bc76000}, {0x3bc78000}, {0x3bc7a000}, {0x3bc7c000}, {0x3bc7e000}, {0x3bc80000}, {0x3bc82000}, {0x3bc84000}, {0x3bc86000}, {0x3bc88000}, {0x3bc8a000}, {0x3bc8c000}, {0x3bc8e000}, {0x3bc90000}, {0x3bc92000}, {0x3bc94000}, {0x3bc96000}, {0x3bc98000}, {0x3bc9a000}, {0x3bc9c000}, {0x3bc9e000}, {0x3bca0000}, {0x3bca2000}, {0x3bca4000}, {0x3bca6000}, {0x3bca8000}, {0x3bcaa000}, {0x3bcac000}, {0x3bcae000}, {0x3bcb0000}, {0x3bcb2000}, {0x3bcb4000}, {0x3bcb6000}, {0x3bcb8000}, {0x3bcba000}, {0x3bcbc000}, {0x3bcbe000}, {0x3bcc0000}, {0x3bcc2000}, {0x3bcc4000}, {0x3bcc6000}, {0x3bcc8000}, {0x3bcca000}, {0x3bccc000}, {0x3bcce000}, {0x3bcd0000}, {0x3bcd2000}, {0x3bcd4000}, {0x3bcd6000}, {0x3bcd8000}, {0x3bcda000}, {0x3bcdc000}, {0x3bcde000}, {0x3bce0000}, {0x3bce2000}, {0x3bce4000}, {0x3bce6000}, {0x3bce8000}, {0x3bcea000}, {0x3bcec000}, {0x3bcee000}, {0x3bcf0000}, {0x3bcf2000}, {0x3bcf4000}, {0x3bcf6000}, {0x3bcf8000}, {0x3bcfa000}, {0x3bcfc000}, {0x3bcfe000}, {0x3bd00000}, {0x3bd02000}, {0x3bd04000}, {0x3bd06000}, {0x3bd08000}, {0x3bd0a000}, {0x3bd0c000}, {0x3bd0e000}, {0x3bd10000}, {0x3bd12000}, {0x3bd14000}, {0x3bd16000}, {0x3bd18000}, {0x3bd1a000}, {0x3bd1c000}, {0x3bd1e000}, {0x3bd20000}, {0x3bd22000}, {0x3bd24000}, {0x3bd26000}, {0x3bd28000}, {0x3bd2a000}, {0x3bd2c000}, {0x3bd2e000}, {0x3bd30000}, {0x3bd32000}, {0x3bd34000}, {0x3bd36000}, {0x3bd38000}, {0x3bd3a000}, {0x3bd3c000}, {0x3bd3e000}, {0x3bd40000}, {0x3bd42000}, {0x3bd44000}, {0x3bd46000}, {0x3bd48000}, {0x3bd4a000}, {0x3bd4c000}, {0x3bd4e000}, {0x3bd50000}, {0x3bd52000}, {0x3bd54000}, {0x3bd56000}, {0x3bd58000}, {0x3bd5a000}, {0x3bd5c000}, {0x3bd5e000}, {0x3bd60000}, {0x3bd62000}, {0x3bd64000}, {0x3bd66000}, {0x3bd68000}, {0x3bd6a000}, {0x3bd6c000}, {0x3bd6e000}, {0x3bd70000}, {0x3bd72000}, {0x3bd74000}, {0x3bd76000}, {0x3bd78000}, {0x3bd7a000}, {0x3bd7c000}, {0x3bd7e000}, {0x3bd80000}, {0x3bd82000}, {0x3bd84000}, {0x3bd86000}, {0x3bd88000}, {0x3bd8a000}, {0x3bd8c000}, {0x3bd8e000}, {0x3bd90000}, {0x3bd92000}, {0x3bd94000}, {0x3bd96000}, {0x3bd98000}, {0x3bd9a000}, {0x3bd9c000}, {0x3bd9e000}, {0x3bda0000}, {0x3bda2000}, {0x3bda4000}, {0x3bda6000}, {0x3bda8000}, {0x3bdaa000}, {0x3bdac000}, {0x3bdae000}, {0x3bdb0000}, {0x3bdb2000}, {0x3bdb4000}, {0x3bdb6000}, {0x3bdb8000}, {0x3bdba000}, {0x3bdbc000}, {0x3bdbe000}, {0x3bdc0000}, {0x3bdc2000}, {0x3bdc4000}, {0x3bdc6000}, {0x3bdc8000}, {0x3bdca000}, {0x3bdcc000}, {0x3bdce000}, {0x3bdd0000}, {0x3bdd2000}, {0x3bdd4000}, {0x3bdd6000}, {0x3bdd8000}, {0x3bdda000}, {0x3bddc000}, {0x3bdde000}, {0x3bde0000}, {0x3bde2000}, {0x3bde4000}, {0x3bde6000}, {0x3bde8000}, {0x3bdea000}, {0x3bdec000}, {0x3bdee000}, {0x3bdf0000}, {0x3bdf2000}, {0x3bdf4000}, {0x3bdf6000}, {0x3bdf8000}, {0x3bdfa000}, {0x3bdfc000}, {0x3bdfe000}, {0x3be00000}, {0x3be02000}, {0x3be04000}, {0x3be06000}, {0x3be08000}, {0x3be0a000}, {0x3be0c000}, {0x3be0e000}, {0x3be10000}, {0x3be12000}, {0x3be14000}, {0x3be16000}, {0x3be18000}, {0x3be1a000}, {0x3be1c000}, {0x3be1e000}, {0x3be20000}, {0x3be22000}, {0x3be24000}, {0x3be26000}, {0x3be28000}, {0x3be2a000}, {0x3be2c000}, {0x3be2e000}, {0x3be30000}, {0x3be32000}, {0x3be34000}, {0x3be36000}, {0x3be38000}, {0x3be3a000}, {0x3be3c000}, {0x3be3e000}, {0x3be40000}, {0x3be42000}, {0x3be44000}, {0x3be46000}, {0x3be48000}, {0x3be4a000}, {0x3be4c000}, {0x3be4e000}, {0x3be50000}, {0x3be52000}, {0x3be54000}, {0x3be56000}, {0x3be58000}, {0x3be5a000}, {0x3be5c000}, {0x3be5e000}, {0x3be60000}, {0x3be62000}, {0x3be64000}, {0x3be66000}, {0x3be68000}, {0x3be6a000}, {0x3be6c000}, {0x3be6e000}, {0x3be70000}, {0x3be72000}, {0x3be74000}, {0x3be76000}, {0x3be78000}, {0x3be7a000}, {0x3be7c000}, {0x3be7e000}, {0x3be80000}, {0x3be82000}, {0x3be84000}, {0x3be86000}, {0x3be88000}, {0x3be8a000}, {0x3be8c000}, {0x3be8e000}, {0x3be90000}, {0x3be92000}, {0x3be94000}, {0x3be96000}, {0x3be98000}, {0x3be9a000}, {0x3be9c000}, {0x3be9e000}, {0x3bea0000}, {0x3bea2000}, {0x3bea4000}, {0x3bea6000}, {0x3bea8000}, {0x3beaa000}, {0x3beac000}, {0x3beae000}, {0x3beb0000}, {0x3beb2000}, {0x3beb4000}, {0x3beb6000}, {0x3beb8000}, {0x3beba000}, {0x3bebc000}, {0x3bebe000}, {0x3bec0000}, {0x3bec2000}, {0x3bec4000}, {0x3bec6000}, {0x3bec8000}, {0x3beca000}, {0x3becc000}, {0x3bece000}, {0x3bed0000}, {0x3bed2000}, {0x3bed4000}, {0x3bed6000}, {0x3bed8000}, {0x3beda000}, {0x3bedc000}, {0x3bede000}, {0x3bee0000}, {0x3bee2000}, {0x3bee4000}, {0x3bee6000}, {0x3bee8000}, {0x3beea000}, {0x3beec000}, {0x3beee000}, {0x3bef0000}, {0x3bef2000}, {0x3bef4000}, {0x3bef6000}, {0x3bef8000}, {0x3befa000}, {0x3befc000}, {0x3befe000}, {0x3bf00000}, {0x3bf02000}, {0x3bf04000}, {0x3bf06000}, {0x3bf08000}, {0x3bf0a000}, {0x3bf0c000}, {0x3bf0e000}, {0x3bf10000}, {0x3bf12000}, {0x3bf14000}, {0x3bf16000}, {0x3bf18000}, {0x3bf1a000}, {0x3bf1c000}, {0x3bf1e000}, {0x3bf20000}, {0x3bf22000}, {0x3bf24000}, {0x3bf26000}, {0x3bf28000}, {0x3bf2a000}, {0x3bf2c000}, {0x3bf2e000}, {0x3bf30000}, {0x3bf32000}, {0x3bf34000}, {0x3bf36000}, {0x3bf38000}, {0x3bf3a000}, {0x3bf3c000}, {0x3bf3e000}, {0x3bf40000}, {0x3bf42000}, {0x3bf44000}, {0x3bf46000}, {0x3bf48000}, {0x3bf4a000}, {0x3bf4c000}, {0x3bf4e000}, {0x3bf50000}, {0x3bf52000}, {0x3bf54000}, {0x3bf56000}, {0x3bf58000}, {0x3bf5a000}, {0x3bf5c000}, {0x3bf5e000}, {0x3bf60000}, {0x3bf62000}, {0x3bf64000}, {0x3bf66000}, {0x3bf68000}, {0x3bf6a000}, {0x3bf6c000}, {0x3bf6e000}, {0x3bf70000}, {0x3bf72000}, {0x3bf74000}, {0x3bf76000}, {0x3bf78000}, {0x3bf7a000}, {0x3bf7c000}, {0x3bf7e000}, {0x3bf80000}, {0x3bf82000}, {0x3bf84000}, {0x3bf86000}, {0x3bf88000}, {0x3bf8a000}, {0x3bf8c000}, {0x3bf8e000}, {0x3bf90000}, {0x3bf92000}, {0x3bf94000}, {0x3bf96000}, {0x3bf98000}, {0x3bf9a000}, {0x3bf9c000}, {0x3bf9e000}, {0x3bfa0000}, {0x3bfa2000}, {0x3bfa4000}, {0x3bfa6000}, {0x3bfa8000}, {0x3bfaa000}, {0x3bfac000}, {0x3bfae000}, {0x3bfb0000}, {0x3bfb2000}, {0x3bfb4000}, {0x3bfb6000}, {0x3bfb8000}, {0x3bfba000}, {0x3bfbc000}, {0x3bfbe000}, {0x3bfc0000}, {0x3bfc2000}, {0x3bfc4000}, {0x3bfc6000}, {0x3bfc8000}, {0x3bfca000}, {0x3bfcc000}, {0x3bfce000}, {0x3bfd0000}, {0x3bfd2000}, {0x3bfd4000}, {0x3bfd6000}, {0x3bfd8000}, {0x3bfda000}, {0x3bfdc000}, {0x3bfde000}, {0x3bfe0000}, {0x3bfe2000}, {0x3bfe4000}, {0x3bfe6000}, {0x3bfe8000}, {0x3bfea000}, {0x3bfec000}, {0x3bfee000}, {0x3bff0000}, {0x3bff2000}, {0x3bff4000}, {0x3bff6000}, {0x3bff8000}, {0x3bffa000}, {0x3bffc000}, {0x3bffe000}, {0x3c000000}, {0x3c002000}, {0x3c004000}, {0x3c006000}, {0x3c008000}, {0x3c00a000}, {0x3c00c000}, {0x3c00e000}, {0x3c010000}, {0x3c012000}, {0x3c014000}, {0x3c016000}, {0x3c018000}, {0x3c01a000}, {0x3c01c000}, {0x3c01e000}, {0x3c020000}, {0x3c022000}, {0x3c024000}, {0x3c026000}, {0x3c028000}, {0x3c02a000}, {0x3c02c000}, {0x3c02e000}, {0x3c030000}, {0x3c032000}, {0x3c034000}, {0x3c036000}, {0x3c038000}, {0x3c03a000}, {0x3c03c000}, {0x3c03e000}, {0x3c040000}, {0x3c042000}, {0x3c044000}, {0x3c046000}, {0x3c048000}, {0x3c04a000}, {0x3c04c000}, {0x3c04e000}, {0x3c050000}, {0x3c052000}, {0x3c054000}, {0x3c056000}, {0x3c058000}, {0x3c05a000}, {0x3c05c000}, {0x3c05e000}, {0x3c060000}, {0x3c062000}, {0x3c064000}, {0x3c066000}, {0x3c068000}, {0x3c06a000}, {0x3c06c000}, {0x3c06e000}, {0x3c070000}, {0x3c072000}, {0x3c074000}, {0x3c076000}, {0x3c078000}, {0x3c07a000}, {0x3c07c000}, {0x3c07e000}, {0x3c080000}, {0x3c082000}, {0x3c084000}, {0x3c086000}, {0x3c088000}, {0x3c08a000}, {0x3c08c000}, {0x3c08e000}, {0x3c090000}, {0x3c092000}, {0x3c094000}, {0x3c096000}, {0x3c098000}, {0x3c09a000}, {0x3c09c000}, {0x3c09e000}, {0x3c0a0000}, {0x3c0a2000}, {0x3c0a4000}, {0x3c0a6000}, {0x3c0a8000}, {0x3c0aa000}, {0x3c0ac000}, {0x3c0ae000}, {0x3c0b0000}, {0x3c0b2000}, {0x3c0b4000}, {0x3c0b6000}, {0x3c0b8000}, {0x3c0ba000}, {0x3c0bc000}, {0x3c0be000}, {0x3c0c0000}, {0x3c0c2000}, {0x3c0c4000}, {0x3c0c6000}, {0x3c0c8000}, {0x3c0ca000}, {0x3c0cc000}, {0x3c0ce000}, {0x3c0d0000}, {0x3c0d2000}, {0x3c0d4000}, {0x3c0d6000}, {0x3c0d8000}, {0x3c0da000}, {0x3c0dc000}, {0x3c0de000}, {0x3c0e0000}, {0x3c0e2000}, {0x3c0e4000}, {0x3c0e6000}, {0x3c0e8000}, {0x3c0ea000}, {0x3c0ec000}, {0x3c0ee000}, {0x3c0f0000}, {0x3c0f2000}, {0x3c0f4000}, {0x3c0f6000}, {0x3c0f8000}, {0x3c0fa000}, {0x3c0fc000}, {0x3c0fe000}, {0x3c100000}, {0x3c102000}, {0x3c104000}, {0x3c106000}, {0x3c108000}, {0x3c10a000}, {0x3c10c000}, {0x3c10e000}, {0x3c110000}, {0x3c112000}, {0x3c114000}, {0x3c116000}, {0x3c118000}, {0x3c11a000}, {0x3c11c000}, {0x3c11e000}, {0x3c120000}, {0x3c122000}, {0x3c124000}, {0x3c126000}, {0x3c128000}, {0x3c12a000}, {0x3c12c000}, {0x3c12e000}, {0x3c130000}, {0x3c132000}, {0x3c134000}, {0x3c136000}, {0x3c138000}, {0x3c13a000}, {0x3c13c000}, {0x3c13e000}, {0x3c140000}, {0x3c142000}, {0x3c144000}, {0x3c146000}, {0x3c148000}, {0x3c14a000}, {0x3c14c000}, {0x3c14e000}, {0x3c150000}, {0x3c152000}, {0x3c154000}, {0x3c156000}, {0x3c158000}, {0x3c15a000}, {0x3c15c000}, {0x3c15e000}, {0x3c160000}, {0x3c162000}, {0x3c164000}, {0x3c166000}, {0x3c168000}, {0x3c16a000}, {0x3c16c000}, {0x3c16e000}, {0x3c170000}, {0x3c172000}, {0x3c174000}, {0x3c176000}, {0x3c178000}, {0x3c17a000}, {0x3c17c000}, {0x3c17e000}, {0x3c180000}, {0x3c182000}, {0x3c184000}, {0x3c186000}, {0x3c188000}, {0x3c18a000}, {0x3c18c000}, {0x3c18e000}, {0x3c190000}, {0x3c192000}, {0x3c194000}, {0x3c196000}, {0x3c198000}, {0x3c19a000}, {0x3c19c000}, {0x3c19e000}, {0x3c1a0000}, {0x3c1a2000}, {0x3c1a4000}, {0x3c1a6000}, {0x3c1a8000}, {0x3c1aa000}, {0x3c1ac000}, {0x3c1ae000}, {0x3c1b0000}, {0x3c1b2000}, {0x3c1b4000}, {0x3c1b6000}, {0x3c1b8000}, {0x3c1ba000}, {0x3c1bc000}, {0x3c1be000}, {0x3c1c0000}, {0x3c1c2000}, {0x3c1c4000}, {0x3c1c6000}, {0x3c1c8000}, {0x3c1ca000}, {0x3c1cc000}, {0x3c1ce000}, {0x3c1d0000}, {0x3c1d2000}, {0x3c1d4000}, {0x3c1d6000}, {0x3c1d8000}, {0x3c1da000}, {0x3c1dc000}, {0x3c1de000}, {0x3c1e0000}, {0x3c1e2000}, {0x3c1e4000}, {0x3c1e6000}, {0x3c1e8000}, {0x3c1ea000}, {0x3c1ec000}, {0x3c1ee000}, {0x3c1f0000}, {0x3c1f2000}, {0x3c1f4000}, {0x3c1f6000}, {0x3c1f8000}, {0x3c1fa000}, {0x3c1fc000}, {0x3c1fe000}, {0x3c200000}, {0x3c202000}, {0x3c204000}, {0x3c206000}, {0x3c208000}, {0x3c20a000}, {0x3c20c000}, {0x3c20e000}, {0x3c210000}, {0x3c212000}, {0x3c214000}, {0x3c216000}, {0x3c218000}, {0x3c21a000}, {0x3c21c000}, {0x3c21e000}, {0x3c220000}, {0x3c222000}, {0x3c224000}, {0x3c226000}, {0x3c228000}, {0x3c22a000}, {0x3c22c000}, {0x3c22e000}, {0x3c230000}, {0x3c232000}, {0x3c234000}, {0x3c236000}, {0x3c238000}, {0x3c23a000}, {0x3c23c000}, {0x3c23e000}, {0x3c240000}, {0x3c242000}, {0x3c244000}, {0x3c246000}, {0x3c248000}, {0x3c24a000}, {0x3c24c000}, {0x3c24e000}, {0x3c250000}, {0x3c252000}, {0x3c254000}, {0x3c256000}, {0x3c258000}, {0x3c25a000}, {0x3c25c000}, {0x3c25e000}, {0x3c260000}, {0x3c262000}, {0x3c264000}, {0x3c266000}, {0x3c268000}, {0x3c26a000}, {0x3c26c000}, {0x3c26e000}, {0x3c270000}, {0x3c272000}, {0x3c274000}, {0x3c276000}, {0x3c278000}, {0x3c27a000}, {0x3c27c000}, {0x3c27e000}, {0x3c280000}, {0x3c282000}, {0x3c284000}, {0x3c286000}, {0x3c288000}, {0x3c28a000}, {0x3c28c000}, {0x3c28e000}, {0x3c290000}, {0x3c292000}, {0x3c294000}, {0x3c296000}, {0x3c298000}, {0x3c29a000}, {0x3c29c000}, {0x3c29e000}, {0x3c2a0000}, {0x3c2a2000}, {0x3c2a4000}, {0x3c2a6000}, {0x3c2a8000}, {0x3c2aa000}, {0x3c2ac000}, {0x3c2ae000}, {0x3c2b0000}, {0x3c2b2000}, {0x3c2b4000}, {0x3c2b6000}, {0x3c2b8000}, {0x3c2ba000}, {0x3c2bc000}, {0x3c2be000}, {0x3c2c0000}, {0x3c2c2000}, {0x3c2c4000}, {0x3c2c6000}, {0x3c2c8000}, {0x3c2ca000}, {0x3c2cc000}, {0x3c2ce000}, {0x3c2d0000}, {0x3c2d2000}, {0x3c2d4000}, {0x3c2d6000}, {0x3c2d8000}, {0x3c2da000}, {0x3c2dc000}, {0x3c2de000}, {0x3c2e0000}, {0x3c2e2000}, {0x3c2e4000}, {0x3c2e6000}, {0x3c2e8000}, {0x3c2ea000}, {0x3c2ec000}, {0x3c2ee000}, {0x3c2f0000}, {0x3c2f2000}, {0x3c2f4000}, {0x3c2f6000}, {0x3c2f8000}, {0x3c2fa000}, {0x3c2fc000}, {0x3c2fe000}, {0x3c300000}, {0x3c302000}, {0x3c304000}, {0x3c306000}, {0x3c308000}, {0x3c30a000}, {0x3c30c000}, {0x3c30e000}, {0x3c310000}, {0x3c312000}, {0x3c314000}, {0x3c316000}, {0x3c318000}, {0x3c31a000}, {0x3c31c000}, {0x3c31e000}, {0x3c320000}, {0x3c322000}, {0x3c324000}, {0x3c326000}, {0x3c328000}, {0x3c32a000}, {0x3c32c000}, {0x3c32e000}, {0x3c330000}, {0x3c332000}, {0x3c334000}, {0x3c336000}, {0x3c338000}, {0x3c33a000}, {0x3c33c000}, {0x3c33e000}, {0x3c340000}, {0x3c342000}, {0x3c344000}, {0x3c346000}, {0x3c348000}, {0x3c34a000}, {0x3c34c000}, {0x3c34e000}, {0x3c350000}, {0x3c352000}, {0x3c354000}, {0x3c356000}, {0x3c358000}, {0x3c35a000}, {0x3c35c000}, {0x3c35e000}, {0x3c360000}, {0x3c362000}, {0x3c364000}, {0x3c366000}, {0x3c368000}, {0x3c36a000}, {0x3c36c000}, {0x3c36e000}, {0x3c370000}, {0x3c372000}, {0x3c374000}, {0x3c376000}, {0x3c378000}, {0x3c37a000}, {0x3c37c000}, {0x3c37e000}, {0x3c380000}, {0x3c382000}, {0x3c384000}, {0x3c386000}, {0x3c388000}, {0x3c38a000}, {0x3c38c000}, {0x3c38e000}, {0x3c390000}, {0x3c392000}, {0x3c394000}, {0x3c396000}, {0x3c398000}, {0x3c39a000}, {0x3c39c000}, {0x3c39e000}, {0x3c3a0000}, {0x3c3a2000}, {0x3c3a4000}, {0x3c3a6000}, {0x3c3a8000}, {0x3c3aa000}, {0x3c3ac000}, {0x3c3ae000}, {0x3c3b0000}, {0x3c3b2000}, {0x3c3b4000}, {0x3c3b6000}, {0x3c3b8000}, {0x3c3ba000}, {0x3c3bc000}, {0x3c3be000}, {0x3c3c0000}, {0x3c3c2000}, {0x3c3c4000}, {0x3c3c6000}, {0x3c3c8000}, {0x3c3ca000}, {0x3c3cc000}, {0x3c3ce000}, {0x3c3d0000}, {0x3c3d2000}, {0x3c3d4000}, {0x3c3d6000}, {0x3c3d8000}, {0x3c3da000}, {0x3c3dc000}, {0x3c3de000}, {0x3c3e0000}, {0x3c3e2000}, {0x3c3e4000}, {0x3c3e6000}, {0x3c3e8000}, {0x3c3ea000}, {0x3c3ec000}, {0x3c3ee000}, {0x3c3f0000}, {0x3c3f2000}, {0x3c3f4000}, {0x3c3f6000}, {0x3c3f8000}, {0x3c3fa000}, {0x3c3fc000}, {0x3c3fe000}, {0x3c400000}, {0x3c402000}, {0x3c404000}, {0x3c406000}, {0x3c408000}, {0x3c40a000}, {0x3c40c000}, {0x3c40e000}, {0x3c410000}, {0x3c412000}, {0x3c414000}, {0x3c416000}, {0x3c418000}, {0x3c41a000}, {0x3c41c000}, {0x3c41e000}, {0x3c420000}, {0x3c422000}, {0x3c424000}, {0x3c426000}, {0x3c428000}, {0x3c42a000}, {0x3c42c000}, {0x3c42e000}, {0x3c430000}, {0x3c432000}, {0x3c434000}, {0x3c436000}, {0x3c438000}, {0x3c43a000}, {0x3c43c000}, {0x3c43e000}, {0x3c440000}, {0x3c442000}, {0x3c444000}, {0x3c446000}, {0x3c448000}, {0x3c44a000}, {0x3c44c000}, {0x3c44e000}, {0x3c450000}, {0x3c452000}, {0x3c454000}, {0x3c456000}, {0x3c458000}, {0x3c45a000}, {0x3c45c000}, {0x3c45e000}, {0x3c460000}, {0x3c462000}, {0x3c464000}, {0x3c466000}, {0x3c468000}, {0x3c46a000}, {0x3c46c000}, {0x3c46e000}, {0x3c470000}, {0x3c472000}, {0x3c474000}, {0x3c476000}, {0x3c478000}, {0x3c47a000}, {0x3c47c000}, {0x3c47e000}, {0x3c480000}, {0x3c482000}, {0x3c484000}, {0x3c486000}, {0x3c488000}, {0x3c48a000}, {0x3c48c000}, {0x3c48e000}, {0x3c490000}, {0x3c492000}, {0x3c494000}, {0x3c496000}, {0x3c498000}, {0x3c49a000}, {0x3c49c000}, {0x3c49e000}, {0x3c4a0000}, {0x3c4a2000}, {0x3c4a4000}, {0x3c4a6000}, {0x3c4a8000}, {0x3c4aa000}, {0x3c4ac000}, {0x3c4ae000}, {0x3c4b0000}, {0x3c4b2000}, {0x3c4b4000}, {0x3c4b6000}, {0x3c4b8000}, {0x3c4ba000}, {0x3c4bc000}, {0x3c4be000}, {0x3c4c0000}, {0x3c4c2000}, {0x3c4c4000}, {0x3c4c6000}, {0x3c4c8000}, {0x3c4ca000}, {0x3c4cc000}, {0x3c4ce000}, {0x3c4d0000}, {0x3c4d2000}, {0x3c4d4000}, {0x3c4d6000}, {0x3c4d8000}, {0x3c4da000}, {0x3c4dc000}, {0x3c4de000}, {0x3c4e0000}, {0x3c4e2000}, {0x3c4e4000}, {0x3c4e6000}, {0x3c4e8000}, {0x3c4ea000}, {0x3c4ec000}, {0x3c4ee000}, {0x3c4f0000}, {0x3c4f2000}, {0x3c4f4000}, {0x3c4f6000}, {0x3c4f8000}, {0x3c4fa000}, {0x3c4fc000}, {0x3c4fe000}, {0x3c500000}, {0x3c502000}, {0x3c504000}, {0x3c506000}, {0x3c508000}, {0x3c50a000}, {0x3c50c000}, {0x3c50e000}, {0x3c510000}, {0x3c512000}, {0x3c514000}, {0x3c516000}, {0x3c518000}, {0x3c51a000}, {0x3c51c000}, {0x3c51e000}, {0x3c520000}, {0x3c522000}, {0x3c524000}, {0x3c526000}, {0x3c528000}, {0x3c52a000}, {0x3c52c000}, {0x3c52e000}, {0x3c530000}, {0x3c532000}, {0x3c534000}, {0x3c536000}, {0x3c538000}, {0x3c53a000}, {0x3c53c000}, {0x3c53e000}, {0x3c540000}, {0x3c542000}, {0x3c544000}, {0x3c546000}, {0x3c548000}, {0x3c54a000}, {0x3c54c000}, {0x3c54e000}, {0x3c550000}, {0x3c552000}, {0x3c554000}, {0x3c556000}, {0x3c558000}, {0x3c55a000}, {0x3c55c000}, {0x3c55e000}, {0x3c560000}, {0x3c562000}, {0x3c564000}, {0x3c566000}, {0x3c568000}, {0x3c56a000}, {0x3c56c000}, {0x3c56e000}, {0x3c570000}, {0x3c572000}, {0x3c574000}, {0x3c576000}, {0x3c578000}, {0x3c57a000}, {0x3c57c000}, {0x3c57e000}, {0x3c580000}, {0x3c582000}, {0x3c584000}, {0x3c586000}, {0x3c588000}, {0x3c58a000}, {0x3c58c000}, {0x3c58e000}, {0x3c590000}, {0x3c592000}, {0x3c594000}, {0x3c596000}, {0x3c598000}, {0x3c59a000}, {0x3c59c000}, {0x3c59e000}, {0x3c5a0000}, {0x3c5a2000}, {0x3c5a4000}, {0x3c5a6000}, {0x3c5a8000}, {0x3c5aa000}, {0x3c5ac000}, {0x3c5ae000}, {0x3c5b0000}, {0x3c5b2000}, {0x3c5b4000}, {0x3c5b6000}, {0x3c5b8000}, {0x3c5ba000}, {0x3c5bc000}, {0x3c5be000}, {0x3c5c0000}, {0x3c5c2000}, {0x3c5c4000}, {0x3c5c6000}, {0x3c5c8000}, {0x3c5ca000}, {0x3c5cc000}, {0x3c5ce000}, {0x3c5d0000}, {0x3c5d2000}, {0x3c5d4000}, {0x3c5d6000}, {0x3c5d8000}, {0x3c5da000}, {0x3c5dc000}, {0x3c5de000}, {0x3c5e0000}, {0x3c5e2000}, {0x3c5e4000}, {0x3c5e6000}, {0x3c5e8000}, {0x3c5ea000}, {0x3c5ec000}, {0x3c5ee000}, {0x3c5f0000}, {0x3c5f2000}, {0x3c5f4000}, {0x3c5f6000}, {0x3c5f8000}, {0x3c5fa000}, {0x3c5fc000}, {0x3c5fe000}, {0x3c600000}, {0x3c602000}, {0x3c604000}, {0x3c606000}, {0x3c608000}, {0x3c60a000}, {0x3c60c000}, {0x3c60e000}, {0x3c610000}, {0x3c612000}, {0x3c614000}, {0x3c616000}, {0x3c618000}, {0x3c61a000}, {0x3c61c000}, {0x3c61e000}, {0x3c620000}, {0x3c622000}, {0x3c624000}, {0x3c626000}, {0x3c628000}, {0x3c62a000}, {0x3c62c000}, {0x3c62e000}, {0x3c630000}, {0x3c632000}, {0x3c634000}, {0x3c636000}, {0x3c638000}, {0x3c63a000}, {0x3c63c000}, {0x3c63e000}, {0x3c640000}, {0x3c642000}, {0x3c644000}, {0x3c646000}, {0x3c648000}, {0x3c64a000}, {0x3c64c000}, {0x3c64e000}, {0x3c650000}, {0x3c652000}, {0x3c654000}, {0x3c656000}, {0x3c658000}, {0x3c65a000}, {0x3c65c000}, {0x3c65e000}, {0x3c660000}, {0x3c662000}, {0x3c664000}, {0x3c666000}, {0x3c668000}, {0x3c66a000}, {0x3c66c000}, {0x3c66e000}, {0x3c670000}, {0x3c672000}, {0x3c674000}, {0x3c676000}, {0x3c678000}, {0x3c67a000}, {0x3c67c000}, {0x3c67e000}, {0x3c680000}, {0x3c682000}, {0x3c684000}, {0x3c686000}, {0x3c688000}, {0x3c68a000}, {0x3c68c000}, {0x3c68e000}, {0x3c690000}, {0x3c692000}, {0x3c694000}, {0x3c696000}, {0x3c698000}, {0x3c69a000}, {0x3c69c000}, {0x3c69e000}, {0x3c6a0000}, {0x3c6a2000}, {0x3c6a4000}, {0x3c6a6000}, {0x3c6a8000}, {0x3c6aa000}, {0x3c6ac000}, {0x3c6ae000}, {0x3c6b0000}, {0x3c6b2000}, {0x3c6b4000}, {0x3c6b6000}, {0x3c6b8000}, {0x3c6ba000}, {0x3c6bc000}, {0x3c6be000}, {0x3c6c0000}, {0x3c6c2000}, {0x3c6c4000}, {0x3c6c6000}, {0x3c6c8000}, {0x3c6ca000}, {0x3c6cc000}, {0x3c6ce000}, {0x3c6d0000}, {0x3c6d2000}, {0x3c6d4000}, {0x3c6d6000}, {0x3c6d8000}, {0x3c6da000}, {0x3c6dc000}, {0x3c6de000}, {0x3c6e0000}, {0x3c6e2000}, {0x3c6e4000}, {0x3c6e6000}, {0x3c6e8000}, {0x3c6ea000}, {0x3c6ec000}, {0x3c6ee000}, {0x3c6f0000}, {0x3c6f2000}, {0x3c6f4000}, {0x3c6f6000}, {0x3c6f8000}, {0x3c6fa000}, {0x3c6fc000}, {0x3c6fe000}, {0x3c700000}, {0x3c702000}, {0x3c704000}, {0x3c706000}, {0x3c708000}, {0x3c70a000}, {0x3c70c000}, {0x3c70e000}, {0x3c710000}, {0x3c712000}, {0x3c714000}, {0x3c716000}, {0x3c718000}, {0x3c71a000}, {0x3c71c000}, {0x3c71e000}, {0x3c720000}, {0x3c722000}, {0x3c724000}, {0x3c726000}, {0x3c728000}, {0x3c72a000}, {0x3c72c000}, {0x3c72e000}, {0x3c730000}, {0x3c732000}, {0x3c734000}, {0x3c736000}, {0x3c738000}, {0x3c73a000}, {0x3c73c000}, {0x3c73e000}, {0x3c740000}, {0x3c742000}, {0x3c744000}, {0x3c746000}, {0x3c748000}, {0x3c74a000}, {0x3c74c000}, {0x3c74e000}, {0x3c750000}, {0x3c752000}, {0x3c754000}, {0x3c756000}, {0x3c758000}, {0x3c75a000}, {0x3c75c000}, {0x3c75e000}, {0x3c760000}, {0x3c762000}, {0x3c764000}, {0x3c766000}, {0x3c768000}, {0x3c76a000}, {0x3c76c000}, {0x3c76e000}, {0x3c770000}, {0x3c772000}, {0x3c774000}, {0x3c776000}, {0x3c778000}, {0x3c77a000}, {0x3c77c000}, {0x3c77e000}, {0x3c780000}, {0x3c782000}, {0x3c784000}, {0x3c786000}, {0x3c788000}, {0x3c78a000}, {0x3c78c000}, {0x3c78e000}, {0x3c790000}, {0x3c792000}, {0x3c794000}, {0x3c796000}, {0x3c798000}, {0x3c79a000}, {0x3c79c000}, {0x3c79e000}, {0x3c7a0000}, {0x3c7a2000}, {0x3c7a4000}, {0x3c7a6000}, {0x3c7a8000}, {0x3c7aa000}, {0x3c7ac000}, {0x3c7ae000}, {0x3c7b0000}, {0x3c7b2000}, {0x3c7b4000}, {0x3c7b6000}, {0x3c7b8000}, {0x3c7ba000}, {0x3c7bc000}, {0x3c7be000}, {0x3c7c0000}, {0x3c7c2000}, {0x3c7c4000}, {0x3c7c6000}, {0x3c7c8000}, {0x3c7ca000}, {0x3c7cc000}, {0x3c7ce000}, {0x3c7d0000}, {0x3c7d2000}, {0x3c7d4000}, {0x3c7d6000}, {0x3c7d8000}, {0x3c7da000}, {0x3c7dc000}, {0x3c7de000}, {0x3c7e0000}, {0x3c7e2000}, {0x3c7e4000}, {0x3c7e6000}, {0x3c7e8000}, {0x3c7ea000}, {0x3c7ec000}, {0x3c7ee000}, {0x3c7f0000}, {0x3c7f2000}, {0x3c7f4000}, {0x3c7f6000}, {0x3c7f8000}, {0x3c7fa000}, {0x3c7fc000}, {0x3c7fe000}, {0x3c800000}, {0x3c802000}, {0x3c804000}, {0x3c806000}, {0x3c808000}, {0x3c80a000}, {0x3c80c000}, {0x3c80e000}, {0x3c810000}, {0x3c812000}, {0x3c814000}, {0x3c816000}, {0x3c818000}, {0x3c81a000}, {0x3c81c000}, {0x3c81e000}, {0x3c820000}, {0x3c822000}, {0x3c824000}, {0x3c826000}, {0x3c828000}, {0x3c82a000}, {0x3c82c000}, {0x3c82e000}, {0x3c830000}, {0x3c832000}, {0x3c834000}, {0x3c836000}, {0x3c838000}, {0x3c83a000}, {0x3c83c000}, {0x3c83e000}, {0x3c840000}, {0x3c842000}, {0x3c844000}, {0x3c846000}, {0x3c848000}, {0x3c84a000}, {0x3c84c000}, {0x3c84e000}, {0x3c850000}, {0x3c852000}, {0x3c854000}, {0x3c856000}, {0x3c858000}, {0x3c85a000}, {0x3c85c000}, {0x3c85e000}, {0x3c860000}, {0x3c862000}, {0x3c864000}, {0x3c866000}, {0x3c868000}, {0x3c86a000}, {0x3c86c000}, {0x3c86e000}, {0x3c870000}, {0x3c872000}, {0x3c874000}, {0x3c876000}, {0x3c878000}, {0x3c87a000}, {0x3c87c000}, {0x3c87e000}, {0x3c880000}, {0x3c882000}, {0x3c884000}, {0x3c886000}, {0x3c888000}, {0x3c88a000}, {0x3c88c000}, {0x3c88e000}, {0x3c890000}, {0x3c892000}, {0x3c894000}, {0x3c896000}, {0x3c898000}, {0x3c89a000}, {0x3c89c000}, {0x3c89e000}, {0x3c8a0000}, {0x3c8a2000}, {0x3c8a4000}, {0x3c8a6000}, {0x3c8a8000}, {0x3c8aa000}, {0x3c8ac000}, {0x3c8ae000}, {0x3c8b0000}, {0x3c8b2000}, {0x3c8b4000}, {0x3c8b6000}, {0x3c8b8000}, {0x3c8ba000}, {0x3c8bc000}, {0x3c8be000}, {0x3c8c0000}, {0x3c8c2000}, {0x3c8c4000}, {0x3c8c6000}, {0x3c8c8000}, {0x3c8ca000}, {0x3c8cc000}, {0x3c8ce000}, {0x3c8d0000}, {0x3c8d2000}, {0x3c8d4000}, {0x3c8d6000}, {0x3c8d8000}, {0x3c8da000}, {0x3c8dc000}, {0x3c8de000}, {0x3c8e0000}, {0x3c8e2000}, {0x3c8e4000}, {0x3c8e6000}, {0x3c8e8000}, {0x3c8ea000}, {0x3c8ec000}, {0x3c8ee000}, {0x3c8f0000}, {0x3c8f2000}, {0x3c8f4000}, {0x3c8f6000}, {0x3c8f8000}, {0x3c8fa000}, {0x3c8fc000}, {0x3c8fe000}, {0x3c900000}, {0x3c902000}, {0x3c904000}, {0x3c906000}, {0x3c908000}, {0x3c90a000}, {0x3c90c000}, {0x3c90e000}, {0x3c910000}, {0x3c912000}, {0x3c914000}, {0x3c916000}, {0x3c918000}, {0x3c91a000}, {0x3c91c000}, {0x3c91e000}, {0x3c920000}, {0x3c922000}, {0x3c924000}, {0x3c926000}, {0x3c928000}, {0x3c92a000}, {0x3c92c000}, {0x3c92e000}, {0x3c930000}, {0x3c932000}, {0x3c934000}, {0x3c936000}, {0x3c938000}, {0x3c93a000}, {0x3c93c000}, {0x3c93e000}, {0x3c940000}, {0x3c942000}, {0x3c944000}, {0x3c946000}, {0x3c948000}, {0x3c94a000}, {0x3c94c000}, {0x3c94e000}, {0x3c950000}, {0x3c952000}, {0x3c954000}, {0x3c956000}, {0x3c958000}, {0x3c95a000}, {0x3c95c000}, {0x3c95e000}, {0x3c960000}, {0x3c962000}, {0x3c964000}, {0x3c966000}, {0x3c968000}, {0x3c96a000}, {0x3c96c000}, {0x3c96e000}, {0x3c970000}, {0x3c972000}, {0x3c974000}, {0x3c976000}, {0x3c978000}, {0x3c97a000}, {0x3c97c000}, {0x3c97e000}, {0x3c980000}, {0x3c982000}, {0x3c984000}, {0x3c986000}, {0x3c988000}, {0x3c98a000}, {0x3c98c000}, {0x3c98e000}, {0x3c990000}, {0x3c992000}, {0x3c994000}, {0x3c996000}, {0x3c998000}, {0x3c99a000}, {0x3c99c000}, {0x3c99e000}, {0x3c9a0000}, {0x3c9a2000}, {0x3c9a4000}, {0x3c9a6000}, {0x3c9a8000}, {0x3c9aa000}, {0x3c9ac000}, {0x3c9ae000}, {0x3c9b0000}, {0x3c9b2000}, {0x3c9b4000}, {0x3c9b6000}, {0x3c9b8000}, {0x3c9ba000}, {0x3c9bc000}, {0x3c9be000}, {0x3c9c0000}, {0x3c9c2000}, {0x3c9c4000}, {0x3c9c6000}, {0x3c9c8000}, {0x3c9ca000}, {0x3c9cc000}, {0x3c9ce000}, {0x3c9d0000}, {0x3c9d2000}, {0x3c9d4000}, {0x3c9d6000}, {0x3c9d8000}, {0x3c9da000}, {0x3c9dc000}, {0x3c9de000}, {0x3c9e0000}, {0x3c9e2000}, {0x3c9e4000}, {0x3c9e6000}, {0x3c9e8000}, {0x3c9ea000}, {0x3c9ec000}, {0x3c9ee000}, {0x3c9f0000}, {0x3c9f2000}, {0x3c9f4000}, {0x3c9f6000}, {0x3c9f8000}, {0x3c9fa000}, {0x3c9fc000}, {0x3c9fe000}, {0x3ca00000}, {0x3ca02000}, {0x3ca04000}, {0x3ca06000}, {0x3ca08000}, {0x3ca0a000}, {0x3ca0c000}, {0x3ca0e000}, {0x3ca10000}, {0x3ca12000}, {0x3ca14000}, {0x3ca16000}, {0x3ca18000}, {0x3ca1a000}, {0x3ca1c000}, {0x3ca1e000}, {0x3ca20000}, {0x3ca22000}, {0x3ca24000}, {0x3ca26000}, {0x3ca28000}, {0x3ca2a000}, {0x3ca2c000}, {0x3ca2e000}, {0x3ca30000}, {0x3ca32000}, {0x3ca34000}, {0x3ca36000}, {0x3ca38000}, {0x3ca3a000}, {0x3ca3c000}, {0x3ca3e000}, {0x3ca40000}, {0x3ca42000}, {0x3ca44000}, {0x3ca46000}, {0x3ca48000}, {0x3ca4a000}, {0x3ca4c000}, {0x3ca4e000}, {0x3ca50000}, {0x3ca52000}, {0x3ca54000}, {0x3ca56000}, {0x3ca58000}, {0x3ca5a000}, {0x3ca5c000}, {0x3ca5e000}, {0x3ca60000}, {0x3ca62000}, {0x3ca64000}, {0x3ca66000}, {0x3ca68000}, {0x3ca6a000}, {0x3ca6c000}, {0x3ca6e000}, {0x3ca70000}, {0x3ca72000}, {0x3ca74000}, {0x3ca76000}, {0x3ca78000}, {0x3ca7a000}, {0x3ca7c000}, {0x3ca7e000}, {0x3ca80000}, {0x3ca82000}, {0x3ca84000}, {0x3ca86000}, {0x3ca88000}, {0x3ca8a000}, {0x3ca8c000}, {0x3ca8e000}, {0x3ca90000}, {0x3ca92000}, {0x3ca94000}, {0x3ca96000}, {0x3ca98000}, {0x3ca9a000}, {0x3ca9c000}, {0x3ca9e000}, {0x3caa0000}, {0x3caa2000}, {0x3caa4000}, {0x3caa6000}, {0x3caa8000}, {0x3caaa000}, {0x3caac000}, {0x3caae000}, {0x3cab0000}, {0x3cab2000}, {0x3cab4000}, {0x3cab6000}, {0x3cab8000}, {0x3caba000}, {0x3cabc000}, {0x3cabe000}, {0x3cac0000}, {0x3cac2000}, {0x3cac4000}, {0x3cac6000}, {0x3cac8000}, {0x3caca000}, {0x3cacc000}, {0x3cace000}, {0x3cad0000}, {0x3cad2000}, {0x3cad4000}, {0x3cad6000}, {0x3cad8000}, {0x3cada000}, {0x3cadc000}, {0x3cade000}, {0x3cae0000}, {0x3cae2000}, {0x3cae4000}, {0x3cae6000}, {0x3cae8000}, {0x3caea000}, {0x3caec000}, {0x3caee000}, {0x3caf0000}, {0x3caf2000}, {0x3caf4000}, {0x3caf6000}, {0x3caf8000}, {0x3cafa000}, {0x3cafc000}, {0x3cafe000}, {0x3cb00000}, {0x3cb02000}, {0x3cb04000}, {0x3cb06000}, {0x3cb08000}, {0x3cb0a000}, {0x3cb0c000}, {0x3cb0e000}, {0x3cb10000}, {0x3cb12000}, {0x3cb14000}, {0x3cb16000}, {0x3cb18000}, {0x3cb1a000}, {0x3cb1c000}, {0x3cb1e000}, {0x3cb20000}, {0x3cb22000}, {0x3cb24000}, {0x3cb26000}, {0x3cb28000}, {0x3cb2a000}, {0x3cb2c000}, {0x3cb2e000}, {0x3cb30000}, {0x3cb32000}, {0x3cb34000}, {0x3cb36000}, {0x3cb38000}, {0x3cb3a000}, {0x3cb3c000}, {0x3cb3e000}, {0x3cb40000}, {0x3cb42000}, {0x3cb44000}, {0x3cb46000}, {0x3cb48000}, {0x3cb4a000}, {0x3cb4c000}, {0x3cb4e000}, {0x3cb50000}, {0x3cb52000}, {0x3cb54000}, {0x3cb56000}, {0x3cb58000}, {0x3cb5a000}, {0x3cb5c000}, {0x3cb5e000}, {0x3cb60000}, {0x3cb62000}, {0x3cb64000}, {0x3cb66000}, {0x3cb68000}, {0x3cb6a000}, {0x3cb6c000}, {0x3cb6e000}, {0x3cb70000}, {0x3cb72000}, {0x3cb74000}, {0x3cb76000}, {0x3cb78000}, {0x3cb7a000}, {0x3cb7c000}, {0x3cb7e000}, {0x3cb80000}, {0x3cb82000}, {0x3cb84000}, {0x3cb86000}, {0x3cb88000}, {0x3cb8a000}, {0x3cb8c000}, {0x3cb8e000}, {0x3cb90000}, {0x3cb92000}, {0x3cb94000}, {0x3cb96000}, {0x3cb98000}, {0x3cb9a000}, {0x3cb9c000}, {0x3cb9e000}, {0x3cba0000}, {0x3cba2000}, {0x3cba4000}, {0x3cba6000}, {0x3cba8000}, {0x3cbaa000}, {0x3cbac000}, {0x3cbae000}, {0x3cbb0000}, {0x3cbb2000}, {0x3cbb4000}, {0x3cbb6000}, {0x3cbb8000}, {0x3cbba000}, {0x3cbbc000}, {0x3cbbe000}, {0x3cbc0000}, {0x3cbc2000}, {0x3cbc4000}, {0x3cbc6000}, {0x3cbc8000}, {0x3cbca000}, {0x3cbcc000}, {0x3cbce000}, {0x3cbd0000}, {0x3cbd2000}, {0x3cbd4000}, {0x3cbd6000}, {0x3cbd8000}, {0x3cbda000}, {0x3cbdc000}, {0x3cbde000}, {0x3cbe0000}, {0x3cbe2000}, {0x3cbe4000}, {0x3cbe6000}, {0x3cbe8000}, {0x3cbea000}, {0x3cbec000}, {0x3cbee000}, {0x3cbf0000}, {0x3cbf2000}, {0x3cbf4000}, {0x3cbf6000}, {0x3cbf8000}, {0x3cbfa000}, {0x3cbfc000}, {0x3cbfe000}, {0x3cc00000}, {0x3cc02000}, {0x3cc04000}, {0x3cc06000}, {0x3cc08000}, {0x3cc0a000}, {0x3cc0c000}, {0x3cc0e000}, {0x3cc10000}, {0x3cc12000}, {0x3cc14000}, {0x3cc16000}, {0x3cc18000}, {0x3cc1a000}, {0x3cc1c000}, {0x3cc1e000}, {0x3cc20000}, {0x3cc22000}, {0x3cc24000}, {0x3cc26000}, {0x3cc28000}, {0x3cc2a000}, {0x3cc2c000}, {0x3cc2e000}, {0x3cc30000}, {0x3cc32000}, {0x3cc34000}, {0x3cc36000}, {0x3cc38000}, {0x3cc3a000}, {0x3cc3c000}, {0x3cc3e000}, {0x3cc40000}, {0x3cc42000}, {0x3cc44000}, {0x3cc46000}, {0x3cc48000}, {0x3cc4a000}, {0x3cc4c000}, {0x3cc4e000}, {0x3cc50000}, {0x3cc52000}, {0x3cc54000}, {0x3cc56000}, {0x3cc58000}, {0x3cc5a000}, {0x3cc5c000}, {0x3cc5e000}, {0x3cc60000}, {0x3cc62000}, {0x3cc64000}, {0x3cc66000}, {0x3cc68000}, {0x3cc6a000}, {0x3cc6c000}, {0x3cc6e000}, {0x3cc70000}, {0x3cc72000}, {0x3cc74000}, {0x3cc76000}, {0x3cc78000}, {0x3cc7a000}, {0x3cc7c000}, {0x3cc7e000}, {0x3cc80000}, {0x3cc82000}, {0x3cc84000}, {0x3cc86000}, {0x3cc88000}, {0x3cc8a000}, {0x3cc8c000}, {0x3cc8e000}, {0x3cc90000}, {0x3cc92000}, {0x3cc94000}, {0x3cc96000}, {0x3cc98000}, {0x3cc9a000}, {0x3cc9c000}, {0x3cc9e000}, {0x3cca0000}, {0x3cca2000}, {0x3cca4000}, {0x3cca6000}, {0x3cca8000}, {0x3ccaa000}, {0x3ccac000}, {0x3ccae000}, {0x3ccb0000}, {0x3ccb2000}, {0x3ccb4000}, {0x3ccb6000}, {0x3ccb8000}, {0x3ccba000}, {0x3ccbc000}, {0x3ccbe000}, {0x3ccc0000}, {0x3ccc2000}, {0x3ccc4000}, {0x3ccc6000}, {0x3ccc8000}, {0x3ccca000}, {0x3cccc000}, {0x3ccce000}, {0x3ccd0000}, {0x3ccd2000}, {0x3ccd4000}, {0x3ccd6000}, {0x3ccd8000}, {0x3ccda000}, {0x3ccdc000}, {0x3ccde000}, {0x3cce0000}, {0x3cce2000}, {0x3cce4000}, {0x3cce6000}, {0x3cce8000}, {0x3ccea000}, {0x3ccec000}, {0x3ccee000}, {0x3ccf0000}, {0x3ccf2000}, {0x3ccf4000}, {0x3ccf6000}, {0x3ccf8000}, {0x3ccfa000}, {0x3ccfc000}, {0x3ccfe000}, {0x3cd00000}, {0x3cd02000}, {0x3cd04000}, {0x3cd06000}, {0x3cd08000}, {0x3cd0a000}, {0x3cd0c000}, {0x3cd0e000}, {0x3cd10000}, {0x3cd12000}, {0x3cd14000}, {0x3cd16000}, {0x3cd18000}, {0x3cd1a000}, {0x3cd1c000}, {0x3cd1e000}, {0x3cd20000}, {0x3cd22000}, {0x3cd24000}, {0x3cd26000}, {0x3cd28000}, {0x3cd2a000}, {0x3cd2c000}, {0x3cd2e000}, {0x3cd30000}, {0x3cd32000}, {0x3cd34000}, {0x3cd36000}, {0x3cd38000}, {0x3cd3a000}, {0x3cd3c000}, {0x3cd3e000}, {0x3cd40000}, {0x3cd42000}, {0x3cd44000}, {0x3cd46000}, {0x3cd48000}, {0x3cd4a000}, {0x3cd4c000}, {0x3cd4e000}, {0x3cd50000}, {0x3cd52000}, {0x3cd54000}, {0x3cd56000}, {0x3cd58000}, {0x3cd5a000}, {0x3cd5c000}, {0x3cd5e000}, {0x3cd60000}, {0x3cd62000}, {0x3cd64000}, {0x3cd66000}, {0x3cd68000}, {0x3cd6a000}, {0x3cd6c000}, {0x3cd6e000}, {0x3cd70000}, {0x3cd72000}, {0x3cd74000}, {0x3cd76000}, {0x3cd78000}, {0x3cd7a000}, {0x3cd7c000}, {0x3cd7e000}, {0x3cd80000}, {0x3cd82000}, {0x3cd84000}, {0x3cd86000}, {0x3cd88000}, {0x3cd8a000}, {0x3cd8c000}, {0x3cd8e000}, {0x3cd90000}, {0x3cd92000}, {0x3cd94000}, {0x3cd96000}, {0x3cd98000}, {0x3cd9a000}, {0x3cd9c000}, {0x3cd9e000}, {0x3cda0000}, {0x3cda2000}, {0x3cda4000}, {0x3cda6000}, {0x3cda8000}, {0x3cdaa000}, {0x3cdac000}, {0x3cdae000}, {0x3cdb0000}, {0x3cdb2000}, {0x3cdb4000}, {0x3cdb6000}, {0x3cdb8000}, {0x3cdba000}, {0x3cdbc000}, {0x3cdbe000}, {0x3cdc0000}, {0x3cdc2000}, {0x3cdc4000}, {0x3cdc6000}, {0x3cdc8000}, {0x3cdca000}, {0x3cdcc000}, {0x3cdce000}, {0x3cdd0000}, {0x3cdd2000}, {0x3cdd4000}, {0x3cdd6000}, {0x3cdd8000}, {0x3cdda000}, {0x3cddc000}, {0x3cdde000}, {0x3cde0000}, {0x3cde2000}, {0x3cde4000}, {0x3cde6000}, {0x3cde8000}, {0x3cdea000}, {0x3cdec000}, {0x3cdee000}, {0x3cdf0000}, {0x3cdf2000}, {0x3cdf4000}, {0x3cdf6000}, {0x3cdf8000}, {0x3cdfa000}, {0x3cdfc000}, {0x3cdfe000}, {0x3ce00000}, {0x3ce02000}, {0x3ce04000}, {0x3ce06000}, {0x3ce08000}, {0x3ce0a000}, {0x3ce0c000}, {0x3ce0e000}, {0x3ce10000}, {0x3ce12000}, {0x3ce14000}, {0x3ce16000}, {0x3ce18000}, {0x3ce1a000}, {0x3ce1c000}, {0x3ce1e000}, {0x3ce20000}, {0x3ce22000}, {0x3ce24000}, {0x3ce26000}, {0x3ce28000}, {0x3ce2a000}, {0x3ce2c000}, {0x3ce2e000}, {0x3ce30000}, {0x3ce32000}, {0x3ce34000}, {0x3ce36000}, {0x3ce38000}, {0x3ce3a000}, {0x3ce3c000}, {0x3ce3e000}, {0x3ce40000}, {0x3ce42000}, {0x3ce44000}, {0x3ce46000}, {0x3ce48000}, {0x3ce4a000}, {0x3ce4c000}, {0x3ce4e000}, {0x3ce50000}, {0x3ce52000}, {0x3ce54000}, {0x3ce56000}, {0x3ce58000}, {0x3ce5a000}, {0x3ce5c000}, {0x3ce5e000}, {0x3ce60000}, {0x3ce62000}, {0x3ce64000}, {0x3ce66000}, {0x3ce68000}, {0x3ce6a000}, {0x3ce6c000}, {0x3ce6e000}, {0x3ce70000}, {0x3ce72000}, {0x3ce74000}, {0x3ce76000}, {0x3ce78000}, {0x3ce7a000}, {0x3ce7c000}, {0x3ce7e000}, {0x3ce80000}, {0x3ce82000}, {0x3ce84000}, {0x3ce86000}, {0x3ce88000}, {0x3ce8a000}, {0x3ce8c000}, {0x3ce8e000}, {0x3ce90000}, {0x3ce92000}, {0x3ce94000}, {0x3ce96000}, {0x3ce98000}, {0x3ce9a000}, {0x3ce9c000}, {0x3ce9e000}, {0x3cea0000}, {0x3cea2000}, {0x3cea4000}, {0x3cea6000}, {0x3cea8000}, {0x3ceaa000}, {0x3ceac000}, {0x3ceae000}, {0x3ceb0000}, {0x3ceb2000}, {0x3ceb4000}, {0x3ceb6000}, {0x3ceb8000}, {0x3ceba000}, {0x3cebc000}, {0x3cebe000}, {0x3cec0000}, {0x3cec2000}, {0x3cec4000}, {0x3cec6000}, {0x3cec8000}, {0x3ceca000}, {0x3cecc000}, {0x3cece000}, {0x3ced0000}, {0x3ced2000}, {0x3ced4000}, {0x3ced6000}, {0x3ced8000}, {0x3ceda000}, {0x3cedc000}, {0x3cede000}, {0x3cee0000}, {0x3cee2000}, {0x3cee4000}, {0x3cee6000}, {0x3cee8000}, {0x3ceea000}, {0x3ceec000}, {0x3ceee000}, {0x3cef0000}, {0x3cef2000}, {0x3cef4000}, {0x3cef6000}, {0x3cef8000}, {0x3cefa000}, {0x3cefc000}, {0x3cefe000}, {0x3cf00000}, {0x3cf02000}, {0x3cf04000}, {0x3cf06000}, {0x3cf08000}, {0x3cf0a000}, {0x3cf0c000}, {0x3cf0e000}, {0x3cf10000}, {0x3cf12000}, {0x3cf14000}, {0x3cf16000}, {0x3cf18000}, {0x3cf1a000}, {0x3cf1c000}, {0x3cf1e000}, {0x3cf20000}, {0x3cf22000}, {0x3cf24000}, {0x3cf26000}, {0x3cf28000}, {0x3cf2a000}, {0x3cf2c000}, {0x3cf2e000}, {0x3cf30000}, {0x3cf32000}, {0x3cf34000}, {0x3cf36000}, {0x3cf38000}, {0x3cf3a000}, {0x3cf3c000}, {0x3cf3e000}, {0x3cf40000}, {0x3cf42000}, {0x3cf44000}, {0x3cf46000}, {0x3cf48000}, {0x3cf4a000}, {0x3cf4c000}, {0x3cf4e000}, {0x3cf50000}, {0x3cf52000}, {0x3cf54000}, {0x3cf56000}, {0x3cf58000}, {0x3cf5a000}, {0x3cf5c000}, {0x3cf5e000}, {0x3cf60000}, {0x3cf62000}, {0x3cf64000}, {0x3cf66000}, {0x3cf68000}, {0x3cf6a000}, {0x3cf6c000}, {0x3cf6e000}, {0x3cf70000}, {0x3cf72000}, {0x3cf74000}, {0x3cf76000}, {0x3cf78000}, {0x3cf7a000}, {0x3cf7c000}, {0x3cf7e000}, {0x3cf80000}, {0x3cf82000}, {0x3cf84000}, {0x3cf86000}, {0x3cf88000}, {0x3cf8a000}, {0x3cf8c000}, {0x3cf8e000}, {0x3cf90000}, {0x3cf92000}, {0x3cf94000}, {0x3cf96000}, {0x3cf98000}, {0x3cf9a000}, {0x3cf9c000}, {0x3cf9e000}, {0x3cfa0000}, {0x3cfa2000}, {0x3cfa4000}, {0x3cfa6000}, {0x3cfa8000}, {0x3cfaa000}, {0x3cfac000}, {0x3cfae000}, {0x3cfb0000}, {0x3cfb2000}, {0x3cfb4000}, {0x3cfb6000}, {0x3cfb8000}, {0x3cfba000}, {0x3cfbc000}, {0x3cfbe000}, {0x3cfc0000}, {0x3cfc2000}, {0x3cfc4000}, {0x3cfc6000}, {0x3cfc8000}, {0x3cfca000}, {0x3cfcc000}, {0x3cfce000}, {0x3cfd0000}, {0x3cfd2000}, {0x3cfd4000}, {0x3cfd6000}, {0x3cfd8000}, {0x3cfda000}, {0x3cfdc000}, {0x3cfde000}, {0x3cfe0000}, {0x3cfe2000}, {0x3cfe4000}, {0x3cfe6000}, {0x3cfe8000}, {0x3cfea000}, {0x3cfec000}, {0x3cfee000}, {0x3cff0000}, {0x3cff2000}, {0x3cff4000}, {0x3cff6000}, {0x3cff8000}, {0x3cffa000}, {0x3cffc000}, {0x3cffe000}, {0x3d000000}, {0x3d002000}, {0x3d004000}, {0x3d006000}, {0x3d008000}, {0x3d00a000}, {0x3d00c000}, {0x3d00e000}, {0x3d010000}, {0x3d012000}, {0x3d014000}, {0x3d016000}, {0x3d018000}, {0x3d01a000}, {0x3d01c000}, {0x3d01e000}, {0x3d020000}, {0x3d022000}, {0x3d024000}, {0x3d026000}, {0x3d028000}, {0x3d02a000}, {0x3d02c000}, {0x3d02e000}, {0x3d030000}, {0x3d032000}, {0x3d034000}, {0x3d036000}, {0x3d038000}, {0x3d03a000}, {0x3d03c000}, {0x3d03e000}, {0x3d040000}, {0x3d042000}, {0x3d044000}, {0x3d046000}, {0x3d048000}, {0x3d04a000}, {0x3d04c000}, {0x3d04e000}, {0x3d050000}, {0x3d052000}, {0x3d054000}, {0x3d056000}, {0x3d058000}, {0x3d05a000}, {0x3d05c000}, {0x3d05e000}, {0x3d060000}, {0x3d062000}, {0x3d064000}, {0x3d066000}, {0x3d068000}, {0x3d06a000}, {0x3d06c000}, {0x3d06e000}, {0x3d070000}, {0x3d072000}, {0x3d074000}, {0x3d076000}, {0x3d078000}, {0x3d07a000}, {0x3d07c000}, {0x3d07e000}, {0x3d080000}, {0x3d082000}, {0x3d084000}, {0x3d086000}, {0x3d088000}, {0x3d08a000}, {0x3d08c000}, {0x3d08e000}, {0x3d090000}, {0x3d092000}, {0x3d094000}, {0x3d096000}, {0x3d098000}, {0x3d09a000}, {0x3d09c000}, {0x3d09e000}, {0x3d0a0000}, {0x3d0a2000}, {0x3d0a4000}, {0x3d0a6000}, {0x3d0a8000}, {0x3d0aa000}, {0x3d0ac000}, {0x3d0ae000}, {0x3d0b0000}, {0x3d0b2000}, {0x3d0b4000}, {0x3d0b6000}, {0x3d0b8000}, {0x3d0ba000}, {0x3d0bc000}, {0x3d0be000}, {0x3d0c0000}, {0x3d0c2000}, {0x3d0c4000}, {0x3d0c6000}, {0x3d0c8000}, {0x3d0ca000}, {0x3d0cc000}, {0x3d0ce000}, {0x3d0d0000}, {0x3d0d2000}, {0x3d0d4000}, {0x3d0d6000}, {0x3d0d8000}, {0x3d0da000}, {0x3d0dc000}, {0x3d0de000}, {0x3d0e0000}, {0x3d0e2000}, {0x3d0e4000}, {0x3d0e6000}, {0x3d0e8000}, {0x3d0ea000}, {0x3d0ec000}, {0x3d0ee000}, {0x3d0f0000}, {0x3d0f2000}, {0x3d0f4000}, {0x3d0f6000}, {0x3d0f8000}, {0x3d0fa000}, {0x3d0fc000}, {0x3d0fe000}, {0x3d100000}, {0x3d102000}, {0x3d104000}, {0x3d106000}, {0x3d108000}, {0x3d10a000}, {0x3d10c000}, {0x3d10e000}, {0x3d110000}, {0x3d112000}, {0x3d114000}, {0x3d116000}, {0x3d118000}, {0x3d11a000}, {0x3d11c000}, {0x3d11e000}, {0x3d120000}, {0x3d122000}, {0x3d124000}, {0x3d126000}, {0x3d128000}, {0x3d12a000}, {0x3d12c000}, {0x3d12e000}, {0x3d130000}, {0x3d132000}, {0x3d134000}, {0x3d136000}, {0x3d138000}, {0x3d13a000}, {0x3d13c000}, {0x3d13e000}, {0x3d140000}, {0x3d142000}, {0x3d144000}, {0x3d146000}, {0x3d148000}, {0x3d14a000}, {0x3d14c000}, {0x3d14e000}, {0x3d150000}, {0x3d152000}, {0x3d154000}, {0x3d156000}, {0x3d158000}, {0x3d15a000}, {0x3d15c000}, {0x3d15e000}, {0x3d160000}, {0x3d162000}, {0x3d164000}, {0x3d166000}, {0x3d168000}, {0x3d16a000}, {0x3d16c000}, {0x3d16e000}, {0x3d170000}, {0x3d172000}, {0x3d174000}, {0x3d176000}, {0x3d178000}, {0x3d17a000}, {0x3d17c000}, {0x3d17e000}, {0x3d180000}, {0x3d182000}, {0x3d184000}, {0x3d186000}, {0x3d188000}, {0x3d18a000}, {0x3d18c000}, {0x3d18e000}, {0x3d190000}, {0x3d192000}, {0x3d194000}, {0x3d196000}, {0x3d198000}, {0x3d19a000}, {0x3d19c000}, {0x3d19e000}, {0x3d1a0000}, {0x3d1a2000}, {0x3d1a4000}, {0x3d1a6000}, {0x3d1a8000}, {0x3d1aa000}, {0x3d1ac000}, {0x3d1ae000}, {0x3d1b0000}, {0x3d1b2000}, {0x3d1b4000}, {0x3d1b6000}, {0x3d1b8000}, {0x3d1ba000}, {0x3d1bc000}, {0x3d1be000}, {0x3d1c0000}, {0x3d1c2000}, {0x3d1c4000}, {0x3d1c6000}, {0x3d1c8000}, {0x3d1ca000}, {0x3d1cc000}, {0x3d1ce000}, {0x3d1d0000}, {0x3d1d2000}, {0x3d1d4000}, {0x3d1d6000}, {0x3d1d8000}, {0x3d1da000}, {0x3d1dc000}, {0x3d1de000}, {0x3d1e0000}, {0x3d1e2000}, {0x3d1e4000}, {0x3d1e6000}, {0x3d1e8000}, {0x3d1ea000}, {0x3d1ec000}, {0x3d1ee000}, {0x3d1f0000}, {0x3d1f2000}, {0x3d1f4000}, {0x3d1f6000}, {0x3d1f8000}, {0x3d1fa000}, {0x3d1fc000}, {0x3d1fe000}, {0x3d200000}, {0x3d202000}, {0x3d204000}, {0x3d206000}, {0x3d208000}, {0x3d20a000}, {0x3d20c000}, {0x3d20e000}, {0x3d210000}, {0x3d212000}, {0x3d214000}, {0x3d216000}, {0x3d218000}, {0x3d21a000}, {0x3d21c000}, {0x3d21e000}, {0x3d220000}, {0x3d222000}, {0x3d224000}, {0x3d226000}, {0x3d228000}, {0x3d22a000}, {0x3d22c000}, {0x3d22e000}, {0x3d230000}, {0x3d232000}, {0x3d234000}, {0x3d236000}, {0x3d238000}, {0x3d23a000}, {0x3d23c000}, {0x3d23e000}, {0x3d240000}, {0x3d242000}, {0x3d244000}, {0x3d246000}, {0x3d248000}, {0x3d24a000}, {0x3d24c000}, {0x3d24e000}, {0x3d250000}, {0x3d252000}, {0x3d254000}, {0x3d256000}, {0x3d258000}, {0x3d25a000}, {0x3d25c000}, {0x3d25e000}, {0x3d260000}, {0x3d262000}, {0x3d264000}, {0x3d266000}, {0x3d268000}, {0x3d26a000}, {0x3d26c000}, {0x3d26e000}, {0x3d270000}, {0x3d272000}, {0x3d274000}, {0x3d276000}, {0x3d278000}, {0x3d27a000}, {0x3d27c000}, {0x3d27e000}, {0x3d280000}, {0x3d282000}, {0x3d284000}, {0x3d286000}, {0x3d288000}, {0x3d28a000}, {0x3d28c000}, {0x3d28e000}, {0x3d290000}, {0x3d292000}, {0x3d294000}, {0x3d296000}, {0x3d298000}, {0x3d29a000}, {0x3d29c000}, {0x3d29e000}, {0x3d2a0000}, {0x3d2a2000}, {0x3d2a4000}, {0x3d2a6000}, {0x3d2a8000}, {0x3d2aa000}, {0x3d2ac000}, {0x3d2ae000}, {0x3d2b0000}, {0x3d2b2000}, {0x3d2b4000}, {0x3d2b6000}, {0x3d2b8000}, {0x3d2ba000}, {0x3d2bc000}, {0x3d2be000}, {0x3d2c0000}, {0x3d2c2000}, {0x3d2c4000}, {0x3d2c6000}, {0x3d2c8000}, {0x3d2ca000}, {0x3d2cc000}, {0x3d2ce000}, {0x3d2d0000}, {0x3d2d2000}, {0x3d2d4000}, {0x3d2d6000}, {0x3d2d8000}, {0x3d2da000}, {0x3d2dc000}, {0x3d2de000}, {0x3d2e0000}, {0x3d2e2000}, {0x3d2e4000}, {0x3d2e6000}, {0x3d2e8000}, {0x3d2ea000}, {0x3d2ec000}, {0x3d2ee000}, {0x3d2f0000}, {0x3d2f2000}, {0x3d2f4000}, {0x3d2f6000}, {0x3d2f8000}, {0x3d2fa000}, {0x3d2fc000}, {0x3d2fe000}, {0x3d300000}, {0x3d302000}, {0x3d304000}, {0x3d306000}, {0x3d308000}, {0x3d30a000}, {0x3d30c000}, {0x3d30e000}, {0x3d310000}, {0x3d312000}, {0x3d314000}, {0x3d316000}, {0x3d318000}, {0x3d31a000}, {0x3d31c000}, {0x3d31e000}, {0x3d320000}, {0x3d322000}, {0x3d324000}, {0x3d326000}, {0x3d328000}, {0x3d32a000}, {0x3d32c000}, {0x3d32e000}, {0x3d330000}, {0x3d332000}, {0x3d334000}, {0x3d336000}, {0x3d338000}, {0x3d33a000}, {0x3d33c000}, {0x3d33e000}, {0x3d340000}, {0x3d342000}, {0x3d344000}, {0x3d346000}, {0x3d348000}, {0x3d34a000}, {0x3d34c000}, {0x3d34e000}, {0x3d350000}, {0x3d352000}, {0x3d354000}, {0x3d356000}, {0x3d358000}, {0x3d35a000}, {0x3d35c000}, {0x3d35e000}, {0x3d360000}, {0x3d362000}, {0x3d364000}, {0x3d366000}, {0x3d368000}, {0x3d36a000}, {0x3d36c000}, {0x3d36e000}, {0x3d370000}, {0x3d372000}, {0x3d374000}, {0x3d376000}, {0x3d378000}, {0x3d37a000}, {0x3d37c000}, {0x3d37e000}, {0x3d380000}, {0x3d382000}, {0x3d384000}, {0x3d386000}, {0x3d388000}, {0x3d38a000}, {0x3d38c000}, {0x3d38e000}, {0x3d390000}, {0x3d392000}, {0x3d394000}, {0x3d396000}, {0x3d398000}, {0x3d39a000}, {0x3d39c000}, {0x3d39e000}, {0x3d3a0000}, {0x3d3a2000}, {0x3d3a4000}, {0x3d3a6000}, {0x3d3a8000}, {0x3d3aa000}, {0x3d3ac000}, {0x3d3ae000}, {0x3d3b0000}, {0x3d3b2000}, {0x3d3b4000}, {0x3d3b6000}, {0x3d3b8000}, {0x3d3ba000}, {0x3d3bc000}, {0x3d3be000}, {0x3d3c0000}, {0x3d3c2000}, {0x3d3c4000}, {0x3d3c6000}, {0x3d3c8000}, {0x3d3ca000}, {0x3d3cc000}, {0x3d3ce000}, {0x3d3d0000}, {0x3d3d2000}, {0x3d3d4000}, {0x3d3d6000}, {0x3d3d8000}, {0x3d3da000}, {0x3d3dc000}, {0x3d3de000}, {0x3d3e0000}, {0x3d3e2000}, {0x3d3e4000}, {0x3d3e6000}, {0x3d3e8000}, {0x3d3ea000}, {0x3d3ec000}, {0x3d3ee000}, {0x3d3f0000}, {0x3d3f2000}, {0x3d3f4000}, {0x3d3f6000}, {0x3d3f8000}, {0x3d3fa000}, {0x3d3fc000}, {0x3d3fe000}, {0x3d400000}, {0x3d402000}, {0x3d404000}, {0x3d406000}, {0x3d408000}, {0x3d40a000}, {0x3d40c000}, {0x3d40e000}, {0x3d410000}, {0x3d412000}, {0x3d414000}, {0x3d416000}, {0x3d418000}, {0x3d41a000}, {0x3d41c000}, {0x3d41e000}, {0x3d420000}, {0x3d422000}, {0x3d424000}, {0x3d426000}, {0x3d428000}, {0x3d42a000}, {0x3d42c000}, {0x3d42e000}, {0x3d430000}, {0x3d432000}, {0x3d434000}, {0x3d436000}, {0x3d438000}, {0x3d43a000}, {0x3d43c000}, {0x3d43e000}, {0x3d440000}, {0x3d442000}, {0x3d444000}, {0x3d446000}, {0x3d448000}, {0x3d44a000}, {0x3d44c000}, {0x3d44e000}, {0x3d450000}, {0x3d452000}, {0x3d454000}, {0x3d456000}, {0x3d458000}, {0x3d45a000}, {0x3d45c000}, {0x3d45e000}, {0x3d460000}, {0x3d462000}, {0x3d464000}, {0x3d466000}, {0x3d468000}, {0x3d46a000}, {0x3d46c000}, {0x3d46e000}, {0x3d470000}, {0x3d472000}, {0x3d474000}, {0x3d476000}, {0x3d478000}, {0x3d47a000}, {0x3d47c000}, {0x3d47e000}, {0x3d480000}, {0x3d482000}, {0x3d484000}, {0x3d486000}, {0x3d488000}, {0x3d48a000}, {0x3d48c000}, {0x3d48e000}, {0x3d490000}, {0x3d492000}, {0x3d494000}, {0x3d496000}, {0x3d498000}, {0x3d49a000}, {0x3d49c000}, {0x3d49e000}, {0x3d4a0000}, {0x3d4a2000}, {0x3d4a4000}, {0x3d4a6000}, {0x3d4a8000}, {0x3d4aa000}, {0x3d4ac000}, {0x3d4ae000}, {0x3d4b0000}, {0x3d4b2000}, {0x3d4b4000}, {0x3d4b6000}, {0x3d4b8000}, {0x3d4ba000}, {0x3d4bc000}, {0x3d4be000}, {0x3d4c0000}, {0x3d4c2000}, {0x3d4c4000}, {0x3d4c6000}, {0x3d4c8000}, {0x3d4ca000}, {0x3d4cc000}, {0x3d4ce000}, {0x3d4d0000}, {0x3d4d2000}, {0x3d4d4000}, {0x3d4d6000}, {0x3d4d8000}, {0x3d4da000}, {0x3d4dc000}, {0x3d4de000}, {0x3d4e0000}, {0x3d4e2000}, {0x3d4e4000}, {0x3d4e6000}, {0x3d4e8000}, {0x3d4ea000}, {0x3d4ec000}, {0x3d4ee000}, {0x3d4f0000}, {0x3d4f2000}, {0x3d4f4000}, {0x3d4f6000}, {0x3d4f8000}, {0x3d4fa000}, {0x3d4fc000}, {0x3d4fe000}, {0x3d500000}, {0x3d502000}, {0x3d504000}, {0x3d506000}, {0x3d508000}, {0x3d50a000}, {0x3d50c000}, {0x3d50e000}, {0x3d510000}, {0x3d512000}, {0x3d514000}, {0x3d516000}, {0x3d518000}, {0x3d51a000}, {0x3d51c000}, {0x3d51e000}, {0x3d520000}, {0x3d522000}, {0x3d524000}, {0x3d526000}, {0x3d528000}, {0x3d52a000}, {0x3d52c000}, {0x3d52e000}, {0x3d530000}, {0x3d532000}, {0x3d534000}, {0x3d536000}, {0x3d538000}, {0x3d53a000}, {0x3d53c000}, {0x3d53e000}, {0x3d540000}, {0x3d542000}, {0x3d544000}, {0x3d546000}, {0x3d548000}, {0x3d54a000}, {0x3d54c000}, {0x3d54e000}, {0x3d550000}, {0x3d552000}, {0x3d554000}, {0x3d556000}, {0x3d558000}, {0x3d55a000}, {0x3d55c000}, {0x3d55e000}, {0x3d560000}, {0x3d562000}, {0x3d564000}, {0x3d566000}, {0x3d568000}, {0x3d56a000}, {0x3d56c000}, {0x3d56e000}, {0x3d570000}, {0x3d572000}, {0x3d574000}, {0x3d576000}, {0x3d578000}, {0x3d57a000}, {0x3d57c000}, {0x3d57e000}, {0x3d580000}, {0x3d582000}, {0x3d584000}, {0x3d586000}, {0x3d588000}, {0x3d58a000}, {0x3d58c000}, {0x3d58e000}, {0x3d590000}, {0x3d592000}, {0x3d594000}, {0x3d596000}, {0x3d598000}, {0x3d59a000}, {0x3d59c000}, {0x3d59e000}, {0x3d5a0000}, {0x3d5a2000}, {0x3d5a4000}, {0x3d5a6000}, {0x3d5a8000}, {0x3d5aa000}, {0x3d5ac000}, {0x3d5ae000}, {0x3d5b0000}, {0x3d5b2000}, {0x3d5b4000}, {0x3d5b6000}, {0x3d5b8000}, {0x3d5ba000}, {0x3d5bc000}, {0x3d5be000}, {0x3d5c0000}, {0x3d5c2000}, {0x3d5c4000}, {0x3d5c6000}, {0x3d5c8000}, {0x3d5ca000}, {0x3d5cc000}, {0x3d5ce000}, {0x3d5d0000}, {0x3d5d2000}, {0x3d5d4000}, {0x3d5d6000}, {0x3d5d8000}, {0x3d5da000}, {0x3d5dc000}, {0x3d5de000}, {0x3d5e0000}, {0x3d5e2000}, {0x3d5e4000}, {0x3d5e6000}, {0x3d5e8000}, {0x3d5ea000}, {0x3d5ec000}, {0x3d5ee000}, {0x3d5f0000}, {0x3d5f2000}, {0x3d5f4000}, {0x3d5f6000}, {0x3d5f8000}, {0x3d5fa000}, {0x3d5fc000}, {0x3d5fe000}, {0x3d600000}, {0x3d602000}, {0x3d604000}, {0x3d606000}, {0x3d608000}, {0x3d60a000}, {0x3d60c000}, {0x3d60e000}, {0x3d610000}, {0x3d612000}, {0x3d614000}, {0x3d616000}, {0x3d618000}, {0x3d61a000}, {0x3d61c000}, {0x3d61e000}, {0x3d620000}, {0x3d622000}, {0x3d624000}, {0x3d626000}, {0x3d628000}, {0x3d62a000}, {0x3d62c000}, {0x3d62e000}, {0x3d630000}, {0x3d632000}, {0x3d634000}, {0x3d636000}, {0x3d638000}, {0x3d63a000}, {0x3d63c000}, {0x3d63e000}, {0x3d640000}, {0x3d642000}, {0x3d644000}, {0x3d646000}, {0x3d648000}, {0x3d64a000}, {0x3d64c000}, {0x3d64e000}, {0x3d650000}, {0x3d652000}, {0x3d654000}, {0x3d656000}, {0x3d658000}, {0x3d65a000}, {0x3d65c000}, {0x3d65e000}, {0x3d660000}, {0x3d662000}, {0x3d664000}, {0x3d666000}, {0x3d668000}, {0x3d66a000}, {0x3d66c000}, {0x3d66e000}, {0x3d670000}, {0x3d672000}, {0x3d674000}, {0x3d676000}, {0x3d678000}, {0x3d67a000}, {0x3d67c000}, {0x3d67e000}, {0x3d680000}, {0x3d682000}, {0x3d684000}, {0x3d686000}, {0x3d688000}, {0x3d68a000}, {0x3d68c000}, {0x3d68e000}, {0x3d690000}, {0x3d692000}, {0x3d694000}, {0x3d696000}, {0x3d698000}, {0x3d69a000}, {0x3d69c000}, {0x3d69e000}, {0x3d6a0000}, {0x3d6a2000}, {0x3d6a4000}, {0x3d6a6000}, {0x3d6a8000}, {0x3d6aa000}, {0x3d6ac000}, {0x3d6ae000}, {0x3d6b0000}, {0x3d6b2000}, {0x3d6b4000}, {0x3d6b6000}, {0x3d6b8000}, {0x3d6ba000}, {0x3d6bc000}, {0x3d6be000}, {0x3d6c0000}, {0x3d6c2000}, {0x3d6c4000}, {0x3d6c6000}, {0x3d6c8000}, {0x3d6ca000}, {0x3d6cc000}, {0x3d6ce000}, {0x3d6d0000}, {0x3d6d2000}, {0x3d6d4000}, {0x3d6d6000}, {0x3d6d8000}, {0x3d6da000}, {0x3d6dc000}, {0x3d6de000}, {0x3d6e0000}, {0x3d6e2000}, {0x3d6e4000}, {0x3d6e6000}, {0x3d6e8000}, {0x3d6ea000}, {0x3d6ec000}, {0x3d6ee000}, {0x3d6f0000}, {0x3d6f2000}, {0x3d6f4000}, {0x3d6f6000}, {0x3d6f8000}, {0x3d6fa000}, {0x3d6fc000}, {0x3d6fe000}, {0x3d700000}, {0x3d702000}, {0x3d704000}, {0x3d706000}, {0x3d708000}, {0x3d70a000}, {0x3d70c000}, {0x3d70e000}, {0x3d710000}, {0x3d712000}, {0x3d714000}, {0x3d716000}, {0x3d718000}, {0x3d71a000}, {0x3d71c000}, {0x3d71e000}, {0x3d720000}, {0x3d722000}, {0x3d724000}, {0x3d726000}, {0x3d728000}, {0x3d72a000}, {0x3d72c000}, {0x3d72e000}, {0x3d730000}, {0x3d732000}, {0x3d734000}, {0x3d736000}, {0x3d738000}, {0x3d73a000}, {0x3d73c000}, {0x3d73e000}, {0x3d740000}, {0x3d742000}, {0x3d744000}, {0x3d746000}, {0x3d748000}, {0x3d74a000}, {0x3d74c000}, {0x3d74e000}, {0x3d750000}, {0x3d752000}, {0x3d754000}, {0x3d756000}, {0x3d758000}, {0x3d75a000}, {0x3d75c000}, {0x3d75e000}, {0x3d760000}, {0x3d762000}, {0x3d764000}, {0x3d766000}, {0x3d768000}, {0x3d76a000}, {0x3d76c000}, {0x3d76e000}, {0x3d770000}, {0x3d772000}, {0x3d774000}, {0x3d776000}, {0x3d778000}, {0x3d77a000}, {0x3d77c000}, {0x3d77e000}, {0x3d780000}, {0x3d782000}, {0x3d784000}, {0x3d786000}, {0x3d788000}, {0x3d78a000}, {0x3d78c000}, {0x3d78e000}, {0x3d790000}, {0x3d792000}, {0x3d794000}, {0x3d796000}, {0x3d798000}, {0x3d79a000}, {0x3d79c000}, {0x3d79e000}, {0x3d7a0000}, {0x3d7a2000}, {0x3d7a4000}, {0x3d7a6000}, {0x3d7a8000}, {0x3d7aa000}, {0x3d7ac000}, {0x3d7ae000}, {0x3d7b0000}, {0x3d7b2000}, {0x3d7b4000}, {0x3d7b6000}, {0x3d7b8000}, {0x3d7ba000}, {0x3d7bc000}, {0x3d7be000}, {0x3d7c0000}, {0x3d7c2000}, {0x3d7c4000}, {0x3d7c6000}, {0x3d7c8000}, {0x3d7ca000}, {0x3d7cc000}, {0x3d7ce000}, {0x3d7d0000}, {0x3d7d2000}, {0x3d7d4000}, {0x3d7d6000}, {0x3d7d8000}, {0x3d7da000}, {0x3d7dc000}, {0x3d7de000}, {0x3d7e0000}, {0x3d7e2000}, {0x3d7e4000}, {0x3d7e6000}, {0x3d7e8000}, {0x3d7ea000}, {0x3d7ec000}, {0x3d7ee000}, {0x3d7f0000}, {0x3d7f2000}, {0x3d7f4000}, {0x3d7f6000}, {0x3d7f8000}, {0x3d7fa000}, {0x3d7fc000}, {0x3d7fe000}, {0x3d800000}, {0x3d802000}, {0x3d804000}, {0x3d806000}, {0x3d808000}, {0x3d80a000}, {0x3d80c000}, {0x3d80e000}, {0x3d810000}, {0x3d812000}, {0x3d814000}, {0x3d816000}, {0x3d818000}, {0x3d81a000}, {0x3d81c000}, {0x3d81e000}, {0x3d820000}, {0x3d822000}, {0x3d824000}, {0x3d826000}, {0x3d828000}, {0x3d82a000}, {0x3d82c000}, {0x3d82e000}, {0x3d830000}, {0x3d832000}, {0x3d834000}, {0x3d836000}, {0x3d838000}, {0x3d83a000}, {0x3d83c000}, {0x3d83e000}, {0x3d840000}, {0x3d842000}, {0x3d844000}, {0x3d846000}, {0x3d848000}, {0x3d84a000}, {0x3d84c000}, {0x3d84e000}, {0x3d850000}, {0x3d852000}, {0x3d854000}, {0x3d856000}, {0x3d858000}, {0x3d85a000}, {0x3d85c000}, {0x3d85e000}, {0x3d860000}, {0x3d862000}, {0x3d864000}, {0x3d866000}, {0x3d868000}, {0x3d86a000}, {0x3d86c000}, {0x3d86e000}, {0x3d870000}, {0x3d872000}, {0x3d874000}, {0x3d876000}, {0x3d878000}, {0x3d87a000}, {0x3d87c000}, {0x3d87e000}, {0x3d880000}, {0x3d882000}, {0x3d884000}, {0x3d886000}, {0x3d888000}, {0x3d88a000}, {0x3d88c000}, {0x3d88e000}, {0x3d890000}, {0x3d892000}, {0x3d894000}, {0x3d896000}, {0x3d898000}, {0x3d89a000}, {0x3d89c000}, {0x3d89e000}, {0x3d8a0000}, {0x3d8a2000}, {0x3d8a4000}, {0x3d8a6000}, {0x3d8a8000}, {0x3d8aa000}, {0x3d8ac000}, {0x3d8ae000}, {0x3d8b0000}, {0x3d8b2000}, {0x3d8b4000}, {0x3d8b6000}, {0x3d8b8000}, {0x3d8ba000}, {0x3d8bc000}, {0x3d8be000}, {0x3d8c0000}, {0x3d8c2000}, {0x3d8c4000}, {0x3d8c6000}, {0x3d8c8000}, {0x3d8ca000}, {0x3d8cc000}, {0x3d8ce000}, {0x3d8d0000}, {0x3d8d2000}, {0x3d8d4000}, {0x3d8d6000}, {0x3d8d8000}, {0x3d8da000}, {0x3d8dc000}, {0x3d8de000}, {0x3d8e0000}, {0x3d8e2000}, {0x3d8e4000}, {0x3d8e6000}, {0x3d8e8000}, {0x3d8ea000}, {0x3d8ec000}, {0x3d8ee000}, {0x3d8f0000}, {0x3d8f2000}, {0x3d8f4000}, {0x3d8f6000}, {0x3d8f8000}, {0x3d8fa000}, {0x3d8fc000}, {0x3d8fe000}, {0x3d900000}, {0x3d902000}, {0x3d904000}, {0x3d906000}, {0x3d908000}, {0x3d90a000}, {0x3d90c000}, {0x3d90e000}, {0x3d910000}, {0x3d912000}, {0x3d914000}, {0x3d916000}, {0x3d918000}, {0x3d91a000}, {0x3d91c000}, {0x3d91e000}, {0x3d920000}, {0x3d922000}, {0x3d924000}, {0x3d926000}, {0x3d928000}, {0x3d92a000}, {0x3d92c000}, {0x3d92e000}, {0x3d930000}, {0x3d932000}, {0x3d934000}, {0x3d936000}, {0x3d938000}, {0x3d93a000}, {0x3d93c000}, {0x3d93e000}, {0x3d940000}, {0x3d942000}, {0x3d944000}, {0x3d946000}, {0x3d948000}, {0x3d94a000}, {0x3d94c000}, {0x3d94e000}, {0x3d950000}, {0x3d952000}, {0x3d954000}, {0x3d956000}, {0x3d958000}, {0x3d95a000}, {0x3d95c000}, {0x3d95e000}, {0x3d960000}, {0x3d962000}, {0x3d964000}, {0x3d966000}, {0x3d968000}, {0x3d96a000}, {0x3d96c000}, {0x3d96e000}, {0x3d970000}, {0x3d972000}, {0x3d974000}, {0x3d976000}, {0x3d978000}, {0x3d97a000}, {0x3d97c000}, {0x3d97e000}, {0x3d980000}, {0x3d982000}, {0x3d984000}, {0x3d986000}, {0x3d988000}, {0x3d98a000}, {0x3d98c000}, {0x3d98e000}, {0x3d990000}, {0x3d992000}, {0x3d994000}, {0x3d996000}, {0x3d998000}, {0x3d99a000}, {0x3d99c000}, {0x3d99e000}, {0x3d9a0000}, {0x3d9a2000}, {0x3d9a4000}, {0x3d9a6000}, {0x3d9a8000}, {0x3d9aa000}, {0x3d9ac000}, {0x3d9ae000}, {0x3d9b0000}, {0x3d9b2000}, {0x3d9b4000}, {0x3d9b6000}, {0x3d9b8000}, {0x3d9ba000}, {0x3d9bc000}, {0x3d9be000}, {0x3d9c0000}, {0x3d9c2000}, {0x3d9c4000}, {0x3d9c6000}, {0x3d9c8000}, {0x3d9ca000}, {0x3d9cc000}, {0x3d9ce000}, {0x3d9d0000}, {0x3d9d2000}, {0x3d9d4000}, {0x3d9d6000}, {0x3d9d8000}, {0x3d9da000}, {0x3d9dc000}, {0x3d9de000}, {0x3d9e0000}, {0x3d9e2000}, {0x3d9e4000}, {0x3d9e6000}, {0x3d9e8000}, {0x3d9ea000}, {0x3d9ec000}, {0x3d9ee000}, {0x3d9f0000}, {0x3d9f2000}, {0x3d9f4000}, {0x3d9f6000}, {0x3d9f8000}, {0x3d9fa000}, {0x3d9fc000}, {0x3d9fe000}, {0x3da00000}, {0x3da02000}, {0x3da04000}, {0x3da06000}, {0x3da08000}, {0x3da0a000}, {0x3da0c000}, {0x3da0e000}, {0x3da10000}, {0x3da12000}, {0x3da14000}, {0x3da16000}, {0x3da18000}, {0x3da1a000}, {0x3da1c000}, {0x3da1e000}, {0x3da20000}, {0x3da22000}, {0x3da24000}, {0x3da26000}, {0x3da28000}, {0x3da2a000}, {0x3da2c000}, {0x3da2e000}, {0x3da30000}, {0x3da32000}, {0x3da34000}, {0x3da36000}, {0x3da38000}, {0x3da3a000}, {0x3da3c000}, {0x3da3e000}, {0x3da40000}, {0x3da42000}, {0x3da44000}, {0x3da46000}, {0x3da48000}, {0x3da4a000}, {0x3da4c000}, {0x3da4e000}, {0x3da50000}, {0x3da52000}, {0x3da54000}, {0x3da56000}, {0x3da58000}, {0x3da5a000}, {0x3da5c000}, {0x3da5e000}, {0x3da60000}, {0x3da62000}, {0x3da64000}, {0x3da66000}, {0x3da68000}, {0x3da6a000}, {0x3da6c000}, {0x3da6e000}, {0x3da70000}, {0x3da72000}, {0x3da74000}, {0x3da76000}, {0x3da78000}, {0x3da7a000}, {0x3da7c000}, {0x3da7e000}, {0x3da80000}, {0x3da82000}, {0x3da84000}, {0x3da86000}, {0x3da88000}, {0x3da8a000}, {0x3da8c000}, {0x3da8e000}, {0x3da90000}, {0x3da92000}, {0x3da94000}, {0x3da96000}, {0x3da98000}, {0x3da9a000}, {0x3da9c000}, {0x3da9e000}, {0x3daa0000}, {0x3daa2000}, {0x3daa4000}, {0x3daa6000}, {0x3daa8000}, {0x3daaa000}, {0x3daac000}, {0x3daae000}, {0x3dab0000}, {0x3dab2000}, {0x3dab4000}, {0x3dab6000}, {0x3dab8000}, {0x3daba000}, {0x3dabc000}, {0x3dabe000}, {0x3dac0000}, {0x3dac2000}, {0x3dac4000}, {0x3dac6000}, {0x3dac8000}, {0x3daca000}, {0x3dacc000}, {0x3dace000}, {0x3dad0000}, {0x3dad2000}, {0x3dad4000}, {0x3dad6000}, {0x3dad8000}, {0x3dada000}, {0x3dadc000}, {0x3dade000}, {0x3dae0000}, {0x3dae2000}, {0x3dae4000}, {0x3dae6000}, {0x3dae8000}, {0x3daea000}, {0x3daec000}, {0x3daee000}, {0x3daf0000}, {0x3daf2000}, {0x3daf4000}, {0x3daf6000}, {0x3daf8000}, {0x3dafa000}, {0x3dafc000}, {0x3dafe000}, {0x3db00000}, {0x3db02000}, {0x3db04000}, {0x3db06000}, {0x3db08000}, {0x3db0a000}, {0x3db0c000}, {0x3db0e000}, {0x3db10000}, {0x3db12000}, {0x3db14000}, {0x3db16000}, {0x3db18000}, {0x3db1a000}, {0x3db1c000}, {0x3db1e000}, {0x3db20000}, {0x3db22000}, {0x3db24000}, {0x3db26000}, {0x3db28000}, {0x3db2a000}, {0x3db2c000}, {0x3db2e000}, {0x3db30000}, {0x3db32000}, {0x3db34000}, {0x3db36000}, {0x3db38000}, {0x3db3a000}, {0x3db3c000}, {0x3db3e000}, {0x3db40000}, {0x3db42000}, {0x3db44000}, {0x3db46000}, {0x3db48000}, {0x3db4a000}, {0x3db4c000}, {0x3db4e000}, {0x3db50000}, {0x3db52000}, {0x3db54000}, {0x3db56000}, {0x3db58000}, {0x3db5a000}, {0x3db5c000}, {0x3db5e000}, {0x3db60000}, {0x3db62000}, {0x3db64000}, {0x3db66000}, {0x3db68000}, {0x3db6a000}, {0x3db6c000}, {0x3db6e000}, {0x3db70000}, {0x3db72000}, {0x3db74000}, {0x3db76000}, {0x3db78000}, {0x3db7a000}, {0x3db7c000}, {0x3db7e000}, {0x3db80000}, {0x3db82000}, {0x3db84000}, {0x3db86000}, {0x3db88000}, {0x3db8a000}, {0x3db8c000}, {0x3db8e000}, {0x3db90000}, {0x3db92000}, {0x3db94000}, {0x3db96000}, {0x3db98000}, {0x3db9a000}, {0x3db9c000}, {0x3db9e000}, {0x3dba0000}, {0x3dba2000}, {0x3dba4000}, {0x3dba6000}, {0x3dba8000}, {0x3dbaa000}, {0x3dbac000}, {0x3dbae000}, {0x3dbb0000}, {0x3dbb2000}, {0x3dbb4000}, {0x3dbb6000}, {0x3dbb8000}, {0x3dbba000}, {0x3dbbc000}, {0x3dbbe000}, {0x3dbc0000}, {0x3dbc2000}, {0x3dbc4000}, {0x3dbc6000}, {0x3dbc8000}, {0x3dbca000}, {0x3dbcc000}, {0x3dbce000}, {0x3dbd0000}, {0x3dbd2000}, {0x3dbd4000}, {0x3dbd6000}, {0x3dbd8000}, {0x3dbda000}, {0x3dbdc000}, {0x3dbde000}, {0x3dbe0000}, {0x3dbe2000}, {0x3dbe4000}, {0x3dbe6000}, {0x3dbe8000}, {0x3dbea000}, {0x3dbec000}, {0x3dbee000}, {0x3dbf0000}, {0x3dbf2000}, {0x3dbf4000}, {0x3dbf6000}, {0x3dbf8000}, {0x3dbfa000}, {0x3dbfc000}, {0x3dbfe000}, {0x3dc00000}, {0x3dc02000}, {0x3dc04000}, {0x3dc06000}, {0x3dc08000}, {0x3dc0a000}, {0x3dc0c000}, {0x3dc0e000}, {0x3dc10000}, {0x3dc12000}, {0x3dc14000}, {0x3dc16000}, {0x3dc18000}, {0x3dc1a000}, {0x3dc1c000}, {0x3dc1e000}, {0x3dc20000}, {0x3dc22000}, {0x3dc24000}, {0x3dc26000}, {0x3dc28000}, {0x3dc2a000}, {0x3dc2c000}, {0x3dc2e000}, {0x3dc30000}, {0x3dc32000}, {0x3dc34000}, {0x3dc36000}, {0x3dc38000}, {0x3dc3a000}, {0x3dc3c000}, {0x3dc3e000}, {0x3dc40000}, {0x3dc42000}, {0x3dc44000}, {0x3dc46000}, {0x3dc48000}, {0x3dc4a000}, {0x3dc4c000}, {0x3dc4e000}, {0x3dc50000}, {0x3dc52000}, {0x3dc54000}, {0x3dc56000}, {0x3dc58000}, {0x3dc5a000}, {0x3dc5c000}, {0x3dc5e000}, {0x3dc60000}, {0x3dc62000}, {0x3dc64000}, {0x3dc66000}, {0x3dc68000}, {0x3dc6a000}, {0x3dc6c000}, {0x3dc6e000}, {0x3dc70000}, {0x3dc72000}, {0x3dc74000}, {0x3dc76000}, {0x3dc78000}, {0x3dc7a000}, {0x3dc7c000}, {0x3dc7e000}, {0x3dc80000}, {0x3dc82000}, {0x3dc84000}, {0x3dc86000}, {0x3dc88000}, {0x3dc8a000}, {0x3dc8c000}, {0x3dc8e000}, {0x3dc90000}, {0x3dc92000}, {0x3dc94000}, {0x3dc96000}, {0x3dc98000}, {0x3dc9a000}, {0x3dc9c000}, {0x3dc9e000}, {0x3dca0000}, {0x3dca2000}, {0x3dca4000}, {0x3dca6000}, {0x3dca8000}, {0x3dcaa000}, {0x3dcac000}, {0x3dcae000}, {0x3dcb0000}, {0x3dcb2000}, {0x3dcb4000}, {0x3dcb6000}, {0x3dcb8000}, {0x3dcba000}, {0x3dcbc000}, {0x3dcbe000}, {0x3dcc0000}, {0x3dcc2000}, {0x3dcc4000}, {0x3dcc6000}, {0x3dcc8000}, {0x3dcca000}, {0x3dccc000}, {0x3dcce000}, {0x3dcd0000}, {0x3dcd2000}, {0x3dcd4000}, {0x3dcd6000}, {0x3dcd8000}, {0x3dcda000}, {0x3dcdc000}, {0x3dcde000}, {0x3dce0000}, {0x3dce2000}, {0x3dce4000}, {0x3dce6000}, {0x3dce8000}, {0x3dcea000}, {0x3dcec000}, {0x3dcee000}, {0x3dcf0000}, {0x3dcf2000}, {0x3dcf4000}, {0x3dcf6000}, {0x3dcf8000}, {0x3dcfa000}, {0x3dcfc000}, {0x3dcfe000}, {0x3dd00000}, {0x3dd02000}, {0x3dd04000}, {0x3dd06000}, {0x3dd08000}, {0x3dd0a000}, {0x3dd0c000}, {0x3dd0e000}, {0x3dd10000}, {0x3dd12000}, {0x3dd14000}, {0x3dd16000}, {0x3dd18000}, {0x3dd1a000}, {0x3dd1c000}, {0x3dd1e000}, {0x3dd20000}, {0x3dd22000}, {0x3dd24000}, {0x3dd26000}, {0x3dd28000}, {0x3dd2a000}, {0x3dd2c000}, {0x3dd2e000}, {0x3dd30000}, {0x3dd32000}, {0x3dd34000}, {0x3dd36000}, {0x3dd38000}, {0x3dd3a000}, {0x3dd3c000}, {0x3dd3e000}, {0x3dd40000}, {0x3dd42000}, {0x3dd44000}, {0x3dd46000}, {0x3dd48000}, {0x3dd4a000}, {0x3dd4c000}, {0x3dd4e000}, {0x3dd50000}, {0x3dd52000}, {0x3dd54000}, {0x3dd56000}, {0x3dd58000}, {0x3dd5a000}, {0x3dd5c000}, {0x3dd5e000}, {0x3dd60000}, {0x3dd62000}, {0x3dd64000}, {0x3dd66000}, {0x3dd68000}, {0x3dd6a000}, {0x3dd6c000}, {0x3dd6e000}, {0x3dd70000}, {0x3dd72000}, {0x3dd74000}, {0x3dd76000}, {0x3dd78000}, {0x3dd7a000}, {0x3dd7c000}, {0x3dd7e000}, {0x3dd80000}, {0x3dd82000}, {0x3dd84000}, {0x3dd86000}, {0x3dd88000}, {0x3dd8a000}, {0x3dd8c000}, {0x3dd8e000}, {0x3dd90000}, {0x3dd92000}, {0x3dd94000}, {0x3dd96000}, {0x3dd98000}, {0x3dd9a000}, {0x3dd9c000}, {0x3dd9e000}, {0x3dda0000}, {0x3dda2000}, {0x3dda4000}, {0x3dda6000}, {0x3dda8000}, {0x3ddaa000}, {0x3ddac000}, {0x3ddae000}, {0x3ddb0000}, {0x3ddb2000}, {0x3ddb4000}, {0x3ddb6000}, {0x3ddb8000}, {0x3ddba000}, {0x3ddbc000}, {0x3ddbe000}, {0x3ddc0000}, {0x3ddc2000}, {0x3ddc4000}, {0x3ddc6000}, {0x3ddc8000}, {0x3ddca000}, {0x3ddcc000}, {0x3ddce000}, {0x3ddd0000}, {0x3ddd2000}, {0x3ddd4000}, {0x3ddd6000}, {0x3ddd8000}, {0x3ddda000}, {0x3dddc000}, {0x3ddde000}, {0x3dde0000}, {0x3dde2000}, {0x3dde4000}, {0x3dde6000}, {0x3dde8000}, {0x3ddea000}, {0x3ddec000}, {0x3ddee000}, {0x3ddf0000}, {0x3ddf2000}, {0x3ddf4000}, {0x3ddf6000}, {0x3ddf8000}, {0x3ddfa000}, {0x3ddfc000}, {0x3ddfe000}, {0x3de00000}, {0x3de02000}, {0x3de04000}, {0x3de06000}, {0x3de08000}, {0x3de0a000}, {0x3de0c000}, {0x3de0e000}, {0x3de10000}, {0x3de12000}, {0x3de14000}, {0x3de16000}, {0x3de18000}, {0x3de1a000}, {0x3de1c000}, {0x3de1e000}, {0x3de20000}, {0x3de22000}, {0x3de24000}, {0x3de26000}, {0x3de28000}, {0x3de2a000}, {0x3de2c000}, {0x3de2e000}, {0x3de30000}, {0x3de32000}, {0x3de34000}, {0x3de36000}, {0x3de38000}, {0x3de3a000}, {0x3de3c000}, {0x3de3e000}, {0x3de40000}, {0x3de42000}, {0x3de44000}, {0x3de46000}, {0x3de48000}, {0x3de4a000}, {0x3de4c000}, {0x3de4e000}, {0x3de50000}, {0x3de52000}, {0x3de54000}, {0x3de56000}, {0x3de58000}, {0x3de5a000}, {0x3de5c000}, {0x3de5e000}, {0x3de60000}, {0x3de62000}, {0x3de64000}, {0x3de66000}, {0x3de68000}, {0x3de6a000}, {0x3de6c000}, {0x3de6e000}, {0x3de70000}, {0x3de72000}, {0x3de74000}, {0x3de76000}, {0x3de78000}, {0x3de7a000}, {0x3de7c000}, {0x3de7e000}, {0x3de80000}, {0x3de82000}, {0x3de84000}, {0x3de86000}, {0x3de88000}, {0x3de8a000}, {0x3de8c000}, {0x3de8e000}, {0x3de90000}, {0x3de92000}, {0x3de94000}, {0x3de96000}, {0x3de98000}, {0x3de9a000}, {0x3de9c000}, {0x3de9e000}, {0x3dea0000}, {0x3dea2000}, {0x3dea4000}, {0x3dea6000}, {0x3dea8000}, {0x3deaa000}, {0x3deac000}, {0x3deae000}, {0x3deb0000}, {0x3deb2000}, {0x3deb4000}, {0x3deb6000}, {0x3deb8000}, {0x3deba000}, {0x3debc000}, {0x3debe000}, {0x3dec0000}, {0x3dec2000}, {0x3dec4000}, {0x3dec6000}, {0x3dec8000}, {0x3deca000}, {0x3decc000}, {0x3dece000}, {0x3ded0000}, {0x3ded2000}, {0x3ded4000}, {0x3ded6000}, {0x3ded8000}, {0x3deda000}, {0x3dedc000}, {0x3dede000}, {0x3dee0000}, {0x3dee2000}, {0x3dee4000}, {0x3dee6000}, {0x3dee8000}, {0x3deea000}, {0x3deec000}, {0x3deee000}, {0x3def0000}, {0x3def2000}, {0x3def4000}, {0x3def6000}, {0x3def8000}, {0x3defa000}, {0x3defc000}, {0x3defe000}, {0x3df00000}, {0x3df02000}, {0x3df04000}, {0x3df06000}, {0x3df08000}, {0x3df0a000}, {0x3df0c000}, {0x3df0e000}, {0x3df10000}, {0x3df12000}, {0x3df14000}, {0x3df16000}, {0x3df18000}, {0x3df1a000}, {0x3df1c000}, {0x3df1e000}, {0x3df20000}, {0x3df22000}, {0x3df24000}, {0x3df26000}, {0x3df28000}, {0x3df2a000}, {0x3df2c000}, {0x3df2e000}, {0x3df30000}, {0x3df32000}, {0x3df34000}, {0x3df36000}, {0x3df38000}, {0x3df3a000}, {0x3df3c000}, {0x3df3e000}, {0x3df40000}, {0x3df42000}, {0x3df44000}, {0x3df46000}, {0x3df48000}, {0x3df4a000}, {0x3df4c000}, {0x3df4e000}, {0x3df50000}, {0x3df52000}, {0x3df54000}, {0x3df56000}, {0x3df58000}, {0x3df5a000}, {0x3df5c000}, {0x3df5e000}, {0x3df60000}, {0x3df62000}, {0x3df64000}, {0x3df66000}, {0x3df68000}, {0x3df6a000}, {0x3df6c000}, {0x3df6e000}, {0x3df70000}, {0x3df72000}, {0x3df74000}, {0x3df76000}, {0x3df78000}, {0x3df7a000}, {0x3df7c000}, {0x3df7e000}, {0x3df80000}, {0x3df82000}, {0x3df84000}, {0x3df86000}, {0x3df88000}, {0x3df8a000}, {0x3df8c000}, {0x3df8e000}, {0x3df90000}, {0x3df92000}, {0x3df94000}, {0x3df96000}, {0x3df98000}, {0x3df9a000}, {0x3df9c000}, {0x3df9e000}, {0x3dfa0000}, {0x3dfa2000}, {0x3dfa4000}, {0x3dfa6000}, {0x3dfa8000}, {0x3dfaa000}, {0x3dfac000}, {0x3dfae000}, {0x3dfb0000}, {0x3dfb2000}, {0x3dfb4000}, {0x3dfb6000}, {0x3dfb8000}, {0x3dfba000}, {0x3dfbc000}, {0x3dfbe000}, {0x3dfc0000}, {0x3dfc2000}, {0x3dfc4000}, {0x3dfc6000}, {0x3dfc8000}, {0x3dfca000}, {0x3dfcc000}, {0x3dfce000}, {0x3dfd0000}, {0x3dfd2000}, {0x3dfd4000}, {0x3dfd6000}, {0x3dfd8000}, {0x3dfda000}, {0x3dfdc000}, {0x3dfde000}, {0x3dfe0000}, {0x3dfe2000}, {0x3dfe4000}, {0x3dfe6000}, {0x3dfe8000}, {0x3dfea000}, {0x3dfec000}, {0x3dfee000}, {0x3dff0000}, {0x3dff2000}, {0x3dff4000}, {0x3dff6000}, {0x3dff8000}, {0x3dffa000}, {0x3dffc000}, {0x3dffe000}, {0x3e000000}, {0x3e002000}, {0x3e004000}, {0x3e006000}, {0x3e008000}, {0x3e00a000}, {0x3e00c000}, {0x3e00e000}, {0x3e010000}, {0x3e012000}, {0x3e014000}, {0x3e016000}, {0x3e018000}, {0x3e01a000}, {0x3e01c000}, {0x3e01e000}, {0x3e020000}, {0x3e022000}, {0x3e024000}, {0x3e026000}, {0x3e028000}, {0x3e02a000}, {0x3e02c000}, {0x3e02e000}, {0x3e030000}, {0x3e032000}, {0x3e034000}, {0x3e036000}, {0x3e038000}, {0x3e03a000}, {0x3e03c000}, {0x3e03e000}, {0x3e040000}, {0x3e042000}, {0x3e044000}, {0x3e046000}, {0x3e048000}, {0x3e04a000}, {0x3e04c000}, {0x3e04e000}, {0x3e050000}, {0x3e052000}, {0x3e054000}, {0x3e056000}, {0x3e058000}, {0x3e05a000}, {0x3e05c000}, {0x3e05e000}, {0x3e060000}, {0x3e062000}, {0x3e064000}, {0x3e066000}, {0x3e068000}, {0x3e06a000}, {0x3e06c000}, {0x3e06e000}, {0x3e070000}, {0x3e072000}, {0x3e074000}, {0x3e076000}, {0x3e078000}, {0x3e07a000}, {0x3e07c000}, {0x3e07e000}, {0x3e080000}, {0x3e082000}, {0x3e084000}, {0x3e086000}, {0x3e088000}, {0x3e08a000}, {0x3e08c000}, {0x3e08e000}, {0x3e090000}, {0x3e092000}, {0x3e094000}, {0x3e096000}, {0x3e098000}, {0x3e09a000}, {0x3e09c000}, {0x3e09e000}, {0x3e0a0000}, {0x3e0a2000}, {0x3e0a4000}, {0x3e0a6000}, {0x3e0a8000}, {0x3e0aa000}, {0x3e0ac000}, {0x3e0ae000}, {0x3e0b0000}, {0x3e0b2000}, {0x3e0b4000}, {0x3e0b6000}, {0x3e0b8000}, {0x3e0ba000}, {0x3e0bc000}, {0x3e0be000}, {0x3e0c0000}, {0x3e0c2000}, {0x3e0c4000}, {0x3e0c6000}, {0x3e0c8000}, {0x3e0ca000}, {0x3e0cc000}, {0x3e0ce000}, {0x3e0d0000}, {0x3e0d2000}, {0x3e0d4000}, {0x3e0d6000}, {0x3e0d8000}, {0x3e0da000}, {0x3e0dc000}, {0x3e0de000}, {0x3e0e0000}, {0x3e0e2000}, {0x3e0e4000}, {0x3e0e6000}, {0x3e0e8000}, {0x3e0ea000}, {0x3e0ec000}, {0x3e0ee000}, {0x3e0f0000}, {0x3e0f2000}, {0x3e0f4000}, {0x3e0f6000}, {0x3e0f8000}, {0x3e0fa000}, {0x3e0fc000}, {0x3e0fe000}, {0x3e100000}, {0x3e102000}, {0x3e104000}, {0x3e106000}, {0x3e108000}, {0x3e10a000}, {0x3e10c000}, {0x3e10e000}, {0x3e110000}, {0x3e112000}, {0x3e114000}, {0x3e116000}, {0x3e118000}, {0x3e11a000}, {0x3e11c000}, {0x3e11e000}, {0x3e120000}, {0x3e122000}, {0x3e124000}, {0x3e126000}, {0x3e128000}, {0x3e12a000}, {0x3e12c000}, {0x3e12e000}, {0x3e130000}, {0x3e132000}, {0x3e134000}, {0x3e136000}, {0x3e138000}, {0x3e13a000}, {0x3e13c000}, {0x3e13e000}, {0x3e140000}, {0x3e142000}, {0x3e144000}, {0x3e146000}, {0x3e148000}, {0x3e14a000}, {0x3e14c000}, {0x3e14e000}, {0x3e150000}, {0x3e152000}, {0x3e154000}, {0x3e156000}, {0x3e158000}, {0x3e15a000}, {0x3e15c000}, {0x3e15e000}, {0x3e160000}, {0x3e162000}, {0x3e164000}, {0x3e166000}, {0x3e168000}, {0x3e16a000}, {0x3e16c000}, {0x3e16e000}, {0x3e170000}, {0x3e172000}, {0x3e174000}, {0x3e176000}, {0x3e178000}, {0x3e17a000}, {0x3e17c000}, {0x3e17e000}, {0x3e180000}, {0x3e182000}, {0x3e184000}, {0x3e186000}, {0x3e188000}, {0x3e18a000}, {0x3e18c000}, {0x3e18e000}, {0x3e190000}, {0x3e192000}, {0x3e194000}, {0x3e196000}, {0x3e198000}, {0x3e19a000}, {0x3e19c000}, {0x3e19e000}, {0x3e1a0000}, {0x3e1a2000}, {0x3e1a4000}, {0x3e1a6000}, {0x3e1a8000}, {0x3e1aa000}, {0x3e1ac000}, {0x3e1ae000}, {0x3e1b0000}, {0x3e1b2000}, {0x3e1b4000}, {0x3e1b6000}, {0x3e1b8000}, {0x3e1ba000}, {0x3e1bc000}, {0x3e1be000}, {0x3e1c0000}, {0x3e1c2000}, {0x3e1c4000}, {0x3e1c6000}, {0x3e1c8000}, {0x3e1ca000}, {0x3e1cc000}, {0x3e1ce000}, {0x3e1d0000}, {0x3e1d2000}, {0x3e1d4000}, {0x3e1d6000}, {0x3e1d8000}, {0x3e1da000}, {0x3e1dc000}, {0x3e1de000}, {0x3e1e0000}, {0x3e1e2000}, {0x3e1e4000}, {0x3e1e6000}, {0x3e1e8000}, {0x3e1ea000}, {0x3e1ec000}, {0x3e1ee000}, {0x3e1f0000}, {0x3e1f2000}, {0x3e1f4000}, {0x3e1f6000}, {0x3e1f8000}, {0x3e1fa000}, {0x3e1fc000}, {0x3e1fe000}, {0x3e200000}, {0x3e202000}, {0x3e204000}, {0x3e206000}, {0x3e208000}, {0x3e20a000}, {0x3e20c000}, {0x3e20e000}, {0x3e210000}, {0x3e212000}, {0x3e214000}, {0x3e216000}, {0x3e218000}, {0x3e21a000}, {0x3e21c000}, {0x3e21e000}, {0x3e220000}, {0x3e222000}, {0x3e224000}, {0x3e226000}, {0x3e228000}, {0x3e22a000}, {0x3e22c000}, {0x3e22e000}, {0x3e230000}, {0x3e232000}, {0x3e234000}, {0x3e236000}, {0x3e238000}, {0x3e23a000}, {0x3e23c000}, {0x3e23e000}, {0x3e240000}, {0x3e242000}, {0x3e244000}, {0x3e246000}, {0x3e248000}, {0x3e24a000}, {0x3e24c000}, {0x3e24e000}, {0x3e250000}, {0x3e252000}, {0x3e254000}, {0x3e256000}, {0x3e258000}, {0x3e25a000}, {0x3e25c000}, {0x3e25e000}, {0x3e260000}, {0x3e262000}, {0x3e264000}, {0x3e266000}, {0x3e268000}, {0x3e26a000}, {0x3e26c000}, {0x3e26e000}, {0x3e270000}, {0x3e272000}, {0x3e274000}, {0x3e276000}, {0x3e278000}, {0x3e27a000}, {0x3e27c000}, {0x3e27e000}, {0x3e280000}, {0x3e282000}, {0x3e284000}, {0x3e286000}, {0x3e288000}, {0x3e28a000}, {0x3e28c000}, {0x3e28e000}, {0x3e290000}, {0x3e292000}, {0x3e294000}, {0x3e296000}, {0x3e298000}, {0x3e29a000}, {0x3e29c000}, {0x3e29e000}, {0x3e2a0000}, {0x3e2a2000}, {0x3e2a4000}, {0x3e2a6000}, {0x3e2a8000}, {0x3e2aa000}, {0x3e2ac000}, {0x3e2ae000}, {0x3e2b0000}, {0x3e2b2000}, {0x3e2b4000}, {0x3e2b6000}, {0x3e2b8000}, {0x3e2ba000}, {0x3e2bc000}, {0x3e2be000}, {0x3e2c0000}, {0x3e2c2000}, {0x3e2c4000}, {0x3e2c6000}, {0x3e2c8000}, {0x3e2ca000}, {0x3e2cc000}, {0x3e2ce000}, {0x3e2d0000}, {0x3e2d2000}, {0x3e2d4000}, {0x3e2d6000}, {0x3e2d8000}, {0x3e2da000}, {0x3e2dc000}, {0x3e2de000}, {0x3e2e0000}, {0x3e2e2000}, {0x3e2e4000}, {0x3e2e6000}, {0x3e2e8000}, {0x3e2ea000}, {0x3e2ec000}, {0x3e2ee000}, {0x3e2f0000}, {0x3e2f2000}, {0x3e2f4000}, {0x3e2f6000}, {0x3e2f8000}, {0x3e2fa000}, {0x3e2fc000}, {0x3e2fe000}, {0x3e300000}, {0x3e302000}, {0x3e304000}, {0x3e306000}, {0x3e308000}, {0x3e30a000}, {0x3e30c000}, {0x3e30e000}, {0x3e310000}, {0x3e312000}, {0x3e314000}, {0x3e316000}, {0x3e318000}, {0x3e31a000}, {0x3e31c000}, {0x3e31e000}, {0x3e320000}, {0x3e322000}, {0x3e324000}, {0x3e326000}, {0x3e328000}, {0x3e32a000}, {0x3e32c000}, {0x3e32e000}, {0x3e330000}, {0x3e332000}, {0x3e334000}, {0x3e336000}, {0x3e338000}, {0x3e33a000}, {0x3e33c000}, {0x3e33e000}, {0x3e340000}, {0x3e342000}, {0x3e344000}, {0x3e346000}, {0x3e348000}, {0x3e34a000}, {0x3e34c000}, {0x3e34e000}, {0x3e350000}, {0x3e352000}, {0x3e354000}, {0x3e356000}, {0x3e358000}, {0x3e35a000}, {0x3e35c000}, {0x3e35e000}, {0x3e360000}, {0x3e362000}, {0x3e364000}, {0x3e366000}, {0x3e368000}, {0x3e36a000}, {0x3e36c000}, {0x3e36e000}, {0x3e370000}, {0x3e372000}, {0x3e374000}, {0x3e376000}, {0x3e378000}, {0x3e37a000}, {0x3e37c000}, {0x3e37e000}, {0x3e380000}, {0x3e382000}, {0x3e384000}, {0x3e386000}, {0x3e388000}, {0x3e38a000}, {0x3e38c000}, {0x3e38e000}, {0x3e390000}, {0x3e392000}, {0x3e394000}, {0x3e396000}, {0x3e398000}, {0x3e39a000}, {0x3e39c000}, {0x3e39e000}, {0x3e3a0000}, {0x3e3a2000}, {0x3e3a4000}, {0x3e3a6000}, {0x3e3a8000}, {0x3e3aa000}, {0x3e3ac000}, {0x3e3ae000}, {0x3e3b0000}, {0x3e3b2000}, {0x3e3b4000}, {0x3e3b6000}, {0x3e3b8000}, {0x3e3ba000}, {0x3e3bc000}, {0x3e3be000}, {0x3e3c0000}, {0x3e3c2000}, {0x3e3c4000}, {0x3e3c6000}, {0x3e3c8000}, {0x3e3ca000}, {0x3e3cc000}, {0x3e3ce000}, {0x3e3d0000}, {0x3e3d2000}, {0x3e3d4000}, {0x3e3d6000}, {0x3e3d8000}, {0x3e3da000}, {0x3e3dc000}, {0x3e3de000}, {0x3e3e0000}, {0x3e3e2000}, {0x3e3e4000}, {0x3e3e6000}, {0x3e3e8000}, {0x3e3ea000}, {0x3e3ec000}, {0x3e3ee000}, {0x3e3f0000}, {0x3e3f2000}, {0x3e3f4000}, {0x3e3f6000}, {0x3e3f8000}, {0x3e3fa000}, {0x3e3fc000}, {0x3e3fe000}, {0x3e400000}, {0x3e402000}, {0x3e404000}, {0x3e406000}, {0x3e408000}, {0x3e40a000}, {0x3e40c000}, {0x3e40e000}, {0x3e410000}, {0x3e412000}, {0x3e414000}, {0x3e416000}, {0x3e418000}, {0x3e41a000}, {0x3e41c000}, {0x3e41e000}, {0x3e420000}, {0x3e422000}, {0x3e424000}, {0x3e426000}, {0x3e428000}, {0x3e42a000}, {0x3e42c000}, {0x3e42e000}, {0x3e430000}, {0x3e432000}, {0x3e434000}, {0x3e436000}, {0x3e438000}, {0x3e43a000}, {0x3e43c000}, {0x3e43e000}, {0x3e440000}, {0x3e442000}, {0x3e444000}, {0x3e446000}, {0x3e448000}, {0x3e44a000}, {0x3e44c000}, {0x3e44e000}, {0x3e450000}, {0x3e452000}, {0x3e454000}, {0x3e456000}, {0x3e458000}, {0x3e45a000}, {0x3e45c000}, {0x3e45e000}, {0x3e460000}, {0x3e462000}, {0x3e464000}, {0x3e466000}, {0x3e468000}, {0x3e46a000}, {0x3e46c000}, {0x3e46e000}, {0x3e470000}, {0x3e472000}, {0x3e474000}, {0x3e476000}, {0x3e478000}, {0x3e47a000}, {0x3e47c000}, {0x3e47e000}, {0x3e480000}, {0x3e482000}, {0x3e484000}, {0x3e486000}, {0x3e488000}, {0x3e48a000}, {0x3e48c000}, {0x3e48e000}, {0x3e490000}, {0x3e492000}, {0x3e494000}, {0x3e496000}, {0x3e498000}, {0x3e49a000}, {0x3e49c000}, {0x3e49e000}, {0x3e4a0000}, {0x3e4a2000}, {0x3e4a4000}, {0x3e4a6000}, {0x3e4a8000}, {0x3e4aa000}, {0x3e4ac000}, {0x3e4ae000}, {0x3e4b0000}, {0x3e4b2000}, {0x3e4b4000}, {0x3e4b6000}, {0x3e4b8000}, {0x3e4ba000}, {0x3e4bc000}, {0x3e4be000}, {0x3e4c0000}, {0x3e4c2000}, {0x3e4c4000}, {0x3e4c6000}, {0x3e4c8000}, {0x3e4ca000}, {0x3e4cc000}, {0x3e4ce000}, {0x3e4d0000}, {0x3e4d2000}, {0x3e4d4000}, {0x3e4d6000}, {0x3e4d8000}, {0x3e4da000}, {0x3e4dc000}, {0x3e4de000}, {0x3e4e0000}, {0x3e4e2000}, {0x3e4e4000}, {0x3e4e6000}, {0x3e4e8000}, {0x3e4ea000}, {0x3e4ec000}, {0x3e4ee000}, {0x3e4f0000}, {0x3e4f2000}, {0x3e4f4000}, {0x3e4f6000}, {0x3e4f8000}, {0x3e4fa000}, {0x3e4fc000}, {0x3e4fe000}, {0x3e500000}, {0x3e502000}, {0x3e504000}, {0x3e506000}, {0x3e508000}, {0x3e50a000}, {0x3e50c000}, {0x3e50e000}, {0x3e510000}, {0x3e512000}, {0x3e514000}, {0x3e516000}, {0x3e518000}, {0x3e51a000}, {0x3e51c000}, {0x3e51e000}, {0x3e520000}, {0x3e522000}, {0x3e524000}, {0x3e526000}, {0x3e528000}, {0x3e52a000}, {0x3e52c000}, {0x3e52e000}, {0x3e530000}, {0x3e532000}, {0x3e534000}, {0x3e536000}, {0x3e538000}, {0x3e53a000}, {0x3e53c000}, {0x3e53e000}, {0x3e540000}, {0x3e542000}, {0x3e544000}, {0x3e546000}, {0x3e548000}, {0x3e54a000}, {0x3e54c000}, {0x3e54e000}, {0x3e550000}, {0x3e552000}, {0x3e554000}, {0x3e556000}, {0x3e558000}, {0x3e55a000}, {0x3e55c000}, {0x3e55e000}, {0x3e560000}, {0x3e562000}, {0x3e564000}, {0x3e566000}, {0x3e568000}, {0x3e56a000}, {0x3e56c000}, {0x3e56e000}, {0x3e570000}, {0x3e572000}, {0x3e574000}, {0x3e576000}, {0x3e578000}, {0x3e57a000}, {0x3e57c000}, {0x3e57e000}, {0x3e580000}, {0x3e582000}, {0x3e584000}, {0x3e586000}, {0x3e588000}, {0x3e58a000}, {0x3e58c000}, {0x3e58e000}, {0x3e590000}, {0x3e592000}, {0x3e594000}, {0x3e596000}, {0x3e598000}, {0x3e59a000}, {0x3e59c000}, {0x3e59e000}, {0x3e5a0000}, {0x3e5a2000}, {0x3e5a4000}, {0x3e5a6000}, {0x3e5a8000}, {0x3e5aa000}, {0x3e5ac000}, {0x3e5ae000}, {0x3e5b0000}, {0x3e5b2000}, {0x3e5b4000}, {0x3e5b6000}, {0x3e5b8000}, {0x3e5ba000}, {0x3e5bc000}, {0x3e5be000}, {0x3e5c0000}, {0x3e5c2000}, {0x3e5c4000}, {0x3e5c6000}, {0x3e5c8000}, {0x3e5ca000}, {0x3e5cc000}, {0x3e5ce000}, {0x3e5d0000}, {0x3e5d2000}, {0x3e5d4000}, {0x3e5d6000}, {0x3e5d8000}, {0x3e5da000}, {0x3e5dc000}, {0x3e5de000}, {0x3e5e0000}, {0x3e5e2000}, {0x3e5e4000}, {0x3e5e6000}, {0x3e5e8000}, {0x3e5ea000}, {0x3e5ec000}, {0x3e5ee000}, {0x3e5f0000}, {0x3e5f2000}, {0x3e5f4000}, {0x3e5f6000}, {0x3e5f8000}, {0x3e5fa000}, {0x3e5fc000}, {0x3e5fe000}, {0x3e600000}, {0x3e602000}, {0x3e604000}, {0x3e606000}, {0x3e608000}, {0x3e60a000}, {0x3e60c000}, {0x3e60e000}, {0x3e610000}, {0x3e612000}, {0x3e614000}, {0x3e616000}, {0x3e618000}, {0x3e61a000}, {0x3e61c000}, {0x3e61e000}, {0x3e620000}, {0x3e622000}, {0x3e624000}, {0x3e626000}, {0x3e628000}, {0x3e62a000}, {0x3e62c000}, {0x3e62e000}, {0x3e630000}, {0x3e632000}, {0x3e634000}, {0x3e636000}, {0x3e638000}, {0x3e63a000}, {0x3e63c000}, {0x3e63e000}, {0x3e640000}, {0x3e642000}, {0x3e644000}, {0x3e646000}, {0x3e648000}, {0x3e64a000}, {0x3e64c000}, {0x3e64e000}, {0x3e650000}, {0x3e652000}, {0x3e654000}, {0x3e656000}, {0x3e658000}, {0x3e65a000}, {0x3e65c000}, {0x3e65e000}, {0x3e660000}, {0x3e662000}, {0x3e664000}, {0x3e666000}, {0x3e668000}, {0x3e66a000}, {0x3e66c000}, {0x3e66e000}, {0x3e670000}, {0x3e672000}, {0x3e674000}, {0x3e676000}, {0x3e678000}, {0x3e67a000}, {0x3e67c000}, {0x3e67e000}, {0x3e680000}, {0x3e682000}, {0x3e684000}, {0x3e686000}, {0x3e688000}, {0x3e68a000}, {0x3e68c000}, {0x3e68e000}, {0x3e690000}, {0x3e692000}, {0x3e694000}, {0x3e696000}, {0x3e698000}, {0x3e69a000}, {0x3e69c000}, {0x3e69e000}, {0x3e6a0000}, {0x3e6a2000}, {0x3e6a4000}, {0x3e6a6000}, {0x3e6a8000}, {0x3e6aa000}, {0x3e6ac000}, {0x3e6ae000}, {0x3e6b0000}, {0x3e6b2000}, {0x3e6b4000}, {0x3e6b6000}, {0x3e6b8000}, {0x3e6ba000}, {0x3e6bc000}, {0x3e6be000}, {0x3e6c0000}, {0x3e6c2000}, {0x3e6c4000}, {0x3e6c6000}, {0x3e6c8000}, {0x3e6ca000}, {0x3e6cc000}, {0x3e6ce000}, {0x3e6d0000}, {0x3e6d2000}, {0x3e6d4000}, {0x3e6d6000}, {0x3e6d8000}, {0x3e6da000}, {0x3e6dc000}, {0x3e6de000}, {0x3e6e0000}, {0x3e6e2000}, {0x3e6e4000}, {0x3e6e6000}, {0x3e6e8000}, {0x3e6ea000}, {0x3e6ec000}, {0x3e6ee000}, {0x3e6f0000}, {0x3e6f2000}, {0x3e6f4000}, {0x3e6f6000}, {0x3e6f8000}, {0x3e6fa000}, {0x3e6fc000}, {0x3e6fe000}, {0x3e700000}, {0x3e702000}, {0x3e704000}, {0x3e706000}, {0x3e708000}, {0x3e70a000}, {0x3e70c000}, {0x3e70e000}, {0x3e710000}, {0x3e712000}, {0x3e714000}, {0x3e716000}, {0x3e718000}, {0x3e71a000}, {0x3e71c000}, {0x3e71e000}, {0x3e720000}, {0x3e722000}, {0x3e724000}, {0x3e726000}, {0x3e728000}, {0x3e72a000}, {0x3e72c000}, {0x3e72e000}, {0x3e730000}, {0x3e732000}, {0x3e734000}, {0x3e736000}, {0x3e738000}, {0x3e73a000}, {0x3e73c000}, {0x3e73e000}, {0x3e740000}, {0x3e742000}, {0x3e744000}, {0x3e746000}, {0x3e748000}, {0x3e74a000}, {0x3e74c000}, {0x3e74e000}, {0x3e750000}, {0x3e752000}, {0x3e754000}, {0x3e756000}, {0x3e758000}, {0x3e75a000}, {0x3e75c000}, {0x3e75e000}, {0x3e760000}, {0x3e762000}, {0x3e764000}, {0x3e766000}, {0x3e768000}, {0x3e76a000}, {0x3e76c000}, {0x3e76e000}, {0x3e770000}, {0x3e772000}, {0x3e774000}, {0x3e776000}, {0x3e778000}, {0x3e77a000}, {0x3e77c000}, {0x3e77e000}, {0x3e780000}, {0x3e782000}, {0x3e784000}, {0x3e786000}, {0x3e788000}, {0x3e78a000}, {0x3e78c000}, {0x3e78e000}, {0x3e790000}, {0x3e792000}, {0x3e794000}, {0x3e796000}, {0x3e798000}, {0x3e79a000}, {0x3e79c000}, {0x3e79e000}, {0x3e7a0000}, {0x3e7a2000}, {0x3e7a4000}, {0x3e7a6000}, {0x3e7a8000}, {0x3e7aa000}, {0x3e7ac000}, {0x3e7ae000}, {0x3e7b0000}, {0x3e7b2000}, {0x3e7b4000}, {0x3e7b6000}, {0x3e7b8000}, {0x3e7ba000}, {0x3e7bc000}, {0x3e7be000}, {0x3e7c0000}, {0x3e7c2000}, {0x3e7c4000}, {0x3e7c6000}, {0x3e7c8000}, {0x3e7ca000}, {0x3e7cc000}, {0x3e7ce000}, {0x3e7d0000}, {0x3e7d2000}, {0x3e7d4000}, {0x3e7d6000}, {0x3e7d8000}, {0x3e7da000}, {0x3e7dc000}, {0x3e7de000}, {0x3e7e0000}, {0x3e7e2000}, {0x3e7e4000}, {0x3e7e6000}, {0x3e7e8000}, {0x3e7ea000}, {0x3e7ec000}, {0x3e7ee000}, {0x3e7f0000}, {0x3e7f2000}, {0x3e7f4000}, {0x3e7f6000}, {0x3e7f8000}, {0x3e7fa000}, {0x3e7fc000}, {0x3e7fe000}, {0x3e800000}, {0x3e802000}, {0x3e804000}, {0x3e806000}, {0x3e808000}, {0x3e80a000}, {0x3e80c000}, {0x3e80e000}, {0x3e810000}, {0x3e812000}, {0x3e814000}, {0x3e816000}, {0x3e818000}, {0x3e81a000}, {0x3e81c000}, {0x3e81e000}, {0x3e820000}, {0x3e822000}, {0x3e824000}, {0x3e826000}, {0x3e828000}, {0x3e82a000}, {0x3e82c000}, {0x3e82e000}, {0x3e830000}, {0x3e832000}, {0x3e834000}, {0x3e836000}, {0x3e838000}, {0x3e83a000}, {0x3e83c000}, {0x3e83e000}, {0x3e840000}, {0x3e842000}, {0x3e844000}, {0x3e846000}, {0x3e848000}, {0x3e84a000}, {0x3e84c000}, {0x3e84e000}, {0x3e850000}, {0x3e852000}, {0x3e854000}, {0x3e856000}, {0x3e858000}, {0x3e85a000}, {0x3e85c000}, {0x3e85e000}, {0x3e860000}, {0x3e862000}, {0x3e864000}, {0x3e866000}, {0x3e868000}, {0x3e86a000}, {0x3e86c000}, {0x3e86e000}, {0x3e870000}, {0x3e872000}, {0x3e874000}, {0x3e876000}, {0x3e878000}, {0x3e87a000}, {0x3e87c000}, {0x3e87e000}, {0x3e880000}, {0x3e882000}, {0x3e884000}, {0x3e886000}, {0x3e888000}, {0x3e88a000}, {0x3e88c000}, {0x3e88e000}, {0x3e890000}, {0x3e892000}, {0x3e894000}, {0x3e896000}, {0x3e898000}, {0x3e89a000}, {0x3e89c000}, {0x3e89e000}, {0x3e8a0000}, {0x3e8a2000}, {0x3e8a4000}, {0x3e8a6000}, {0x3e8a8000}, {0x3e8aa000}, {0x3e8ac000}, {0x3e8ae000}, {0x3e8b0000}, {0x3e8b2000}, {0x3e8b4000}, {0x3e8b6000}, {0x3e8b8000}, {0x3e8ba000}, {0x3e8bc000}, {0x3e8be000}, {0x3e8c0000}, {0x3e8c2000}, {0x3e8c4000}, {0x3e8c6000}, {0x3e8c8000}, {0x3e8ca000}, {0x3e8cc000}, {0x3e8ce000}, {0x3e8d0000}, {0x3e8d2000}, {0x3e8d4000}, {0x3e8d6000}, {0x3e8d8000}, {0x3e8da000}, {0x3e8dc000}, {0x3e8de000}, {0x3e8e0000}, {0x3e8e2000}, {0x3e8e4000}, {0x3e8e6000}, {0x3e8e8000}, {0x3e8ea000}, {0x3e8ec000}, {0x3e8ee000}, {0x3e8f0000}, {0x3e8f2000}, {0x3e8f4000}, {0x3e8f6000}, {0x3e8f8000}, {0x3e8fa000}, {0x3e8fc000}, {0x3e8fe000}, {0x3e900000}, {0x3e902000}, {0x3e904000}, {0x3e906000}, {0x3e908000}, {0x3e90a000}, {0x3e90c000}, {0x3e90e000}, {0x3e910000}, {0x3e912000}, {0x3e914000}, {0x3e916000}, {0x3e918000}, {0x3e91a000}, {0x3e91c000}, {0x3e91e000}, {0x3e920000}, {0x3e922000}, {0x3e924000}, {0x3e926000}, {0x3e928000}, {0x3e92a000}, {0x3e92c000}, {0x3e92e000}, {0x3e930000}, {0x3e932000}, {0x3e934000}, {0x3e936000}, {0x3e938000}, {0x3e93a000}, {0x3e93c000}, {0x3e93e000}, {0x3e940000}, {0x3e942000}, {0x3e944000}, {0x3e946000}, {0x3e948000}, {0x3e94a000}, {0x3e94c000}, {0x3e94e000}, {0x3e950000}, {0x3e952000}, {0x3e954000}, {0x3e956000}, {0x3e958000}, {0x3e95a000}, {0x3e95c000}, {0x3e95e000}, {0x3e960000}, {0x3e962000}, {0x3e964000}, {0x3e966000}, {0x3e968000}, {0x3e96a000}, {0x3e96c000}, {0x3e96e000}, {0x3e970000}, {0x3e972000}, {0x3e974000}, {0x3e976000}, {0x3e978000}, {0x3e97a000}, {0x3e97c000}, {0x3e97e000}, {0x3e980000}, {0x3e982000}, {0x3e984000}, {0x3e986000}, {0x3e988000}, {0x3e98a000}, {0x3e98c000}, {0x3e98e000}, {0x3e990000}, {0x3e992000}, {0x3e994000}, {0x3e996000}, {0x3e998000}, {0x3e99a000}, {0x3e99c000}, {0x3e99e000}, {0x3e9a0000}, {0x3e9a2000}, {0x3e9a4000}, {0x3e9a6000}, {0x3e9a8000}, {0x3e9aa000}, {0x3e9ac000}, {0x3e9ae000}, {0x3e9b0000}, {0x3e9b2000}, {0x3e9b4000}, {0x3e9b6000}, {0x3e9b8000}, {0x3e9ba000}, {0x3e9bc000}, {0x3e9be000}, {0x3e9c0000}, {0x3e9c2000}, {0x3e9c4000}, {0x3e9c6000}, {0x3e9c8000}, {0x3e9ca000}, {0x3e9cc000}, {0x3e9ce000}, {0x3e9d0000}, {0x3e9d2000}, {0x3e9d4000}, {0x3e9d6000}, {0x3e9d8000}, {0x3e9da000}, {0x3e9dc000}, {0x3e9de000}, {0x3e9e0000}, {0x3e9e2000}, {0x3e9e4000}, {0x3e9e6000}, {0x3e9e8000}, {0x3e9ea000}, {0x3e9ec000}, {0x3e9ee000}, {0x3e9f0000}, {0x3e9f2000}, {0x3e9f4000}, {0x3e9f6000}, {0x3e9f8000}, {0x3e9fa000}, {0x3e9fc000}, {0x3e9fe000}, {0x3ea00000}, {0x3ea02000}, {0x3ea04000}, {0x3ea06000}, {0x3ea08000}, {0x3ea0a000}, {0x3ea0c000}, {0x3ea0e000}, {0x3ea10000}, {0x3ea12000}, {0x3ea14000}, {0x3ea16000}, {0x3ea18000}, {0x3ea1a000}, {0x3ea1c000}, {0x3ea1e000}, {0x3ea20000}, {0x3ea22000}, {0x3ea24000}, {0x3ea26000}, {0x3ea28000}, {0x3ea2a000}, {0x3ea2c000}, {0x3ea2e000}, {0x3ea30000}, {0x3ea32000}, {0x3ea34000}, {0x3ea36000}, {0x3ea38000}, {0x3ea3a000}, {0x3ea3c000}, {0x3ea3e000}, {0x3ea40000}, {0x3ea42000}, {0x3ea44000}, {0x3ea46000}, {0x3ea48000}, {0x3ea4a000}, {0x3ea4c000}, {0x3ea4e000}, {0x3ea50000}, {0x3ea52000}, {0x3ea54000}, {0x3ea56000}, {0x3ea58000}, {0x3ea5a000}, {0x3ea5c000}, {0x3ea5e000}, {0x3ea60000}, {0x3ea62000}, {0x3ea64000}, {0x3ea66000}, {0x3ea68000}, {0x3ea6a000}, {0x3ea6c000}, {0x3ea6e000}, {0x3ea70000}, {0x3ea72000}, {0x3ea74000}, {0x3ea76000}, {0x3ea78000}, {0x3ea7a000}, {0x3ea7c000}, {0x3ea7e000}, {0x3ea80000}, {0x3ea82000}, {0x3ea84000}, {0x3ea86000}, {0x3ea88000}, {0x3ea8a000}, {0x3ea8c000}, {0x3ea8e000}, {0x3ea90000}, {0x3ea92000}, {0x3ea94000}, {0x3ea96000}, {0x3ea98000}, {0x3ea9a000}, {0x3ea9c000}, {0x3ea9e000}, {0x3eaa0000}, {0x3eaa2000}, {0x3eaa4000}, {0x3eaa6000}, {0x3eaa8000}, {0x3eaaa000}, {0x3eaac000}, {0x3eaae000}, {0x3eab0000}, {0x3eab2000}, {0x3eab4000}, {0x3eab6000}, {0x3eab8000}, {0x3eaba000}, {0x3eabc000}, {0x3eabe000}, {0x3eac0000}, {0x3eac2000}, {0x3eac4000}, {0x3eac6000}, {0x3eac8000}, {0x3eaca000}, {0x3eacc000}, {0x3eace000}, {0x3ead0000}, {0x3ead2000}, {0x3ead4000}, {0x3ead6000}, {0x3ead8000}, {0x3eada000}, {0x3eadc000}, {0x3eade000}, {0x3eae0000}, {0x3eae2000}, {0x3eae4000}, {0x3eae6000}, {0x3eae8000}, {0x3eaea000}, {0x3eaec000}, {0x3eaee000}, {0x3eaf0000}, {0x3eaf2000}, {0x3eaf4000}, {0x3eaf6000}, {0x3eaf8000}, {0x3eafa000}, {0x3eafc000}, {0x3eafe000}, {0x3eb00000}, {0x3eb02000}, {0x3eb04000}, {0x3eb06000}, {0x3eb08000}, {0x3eb0a000}, {0x3eb0c000}, {0x3eb0e000}, {0x3eb10000}, {0x3eb12000}, {0x3eb14000}, {0x3eb16000}, {0x3eb18000}, {0x3eb1a000}, {0x3eb1c000}, {0x3eb1e000}, {0x3eb20000}, {0x3eb22000}, {0x3eb24000}, {0x3eb26000}, {0x3eb28000}, {0x3eb2a000}, {0x3eb2c000}, {0x3eb2e000}, {0x3eb30000}, {0x3eb32000}, {0x3eb34000}, {0x3eb36000}, {0x3eb38000}, {0x3eb3a000}, {0x3eb3c000}, {0x3eb3e000}, {0x3eb40000}, {0x3eb42000}, {0x3eb44000}, {0x3eb46000}, {0x3eb48000}, {0x3eb4a000}, {0x3eb4c000}, {0x3eb4e000}, {0x3eb50000}, {0x3eb52000}, {0x3eb54000}, {0x3eb56000}, {0x3eb58000}, {0x3eb5a000}, {0x3eb5c000}, {0x3eb5e000}, {0x3eb60000}, {0x3eb62000}, {0x3eb64000}, {0x3eb66000}, {0x3eb68000}, {0x3eb6a000}, {0x3eb6c000}, {0x3eb6e000}, {0x3eb70000}, {0x3eb72000}, {0x3eb74000}, {0x3eb76000}, {0x3eb78000}, {0x3eb7a000}, {0x3eb7c000}, {0x3eb7e000}, {0x3eb80000}, {0x3eb82000}, {0x3eb84000}, {0x3eb86000}, {0x3eb88000}, {0x3eb8a000}, {0x3eb8c000}, {0x3eb8e000}, {0x3eb90000}, {0x3eb92000}, {0x3eb94000}, {0x3eb96000}, {0x3eb98000}, {0x3eb9a000}, {0x3eb9c000}, {0x3eb9e000}, {0x3eba0000}, {0x3eba2000}, {0x3eba4000}, {0x3eba6000}, {0x3eba8000}, {0x3ebaa000}, {0x3ebac000}, {0x3ebae000}, {0x3ebb0000}, {0x3ebb2000}, {0x3ebb4000}, {0x3ebb6000}, {0x3ebb8000}, {0x3ebba000}, {0x3ebbc000}, {0x3ebbe000}, {0x3ebc0000}, {0x3ebc2000}, {0x3ebc4000}, {0x3ebc6000}, {0x3ebc8000}, {0x3ebca000}, {0x3ebcc000}, {0x3ebce000}, {0x3ebd0000}, {0x3ebd2000}, {0x3ebd4000}, {0x3ebd6000}, {0x3ebd8000}, {0x3ebda000}, {0x3ebdc000}, {0x3ebde000}, {0x3ebe0000}, {0x3ebe2000}, {0x3ebe4000}, {0x3ebe6000}, {0x3ebe8000}, {0x3ebea000}, {0x3ebec000}, {0x3ebee000}, {0x3ebf0000}, {0x3ebf2000}, {0x3ebf4000}, {0x3ebf6000}, {0x3ebf8000}, {0x3ebfa000}, {0x3ebfc000}, {0x3ebfe000}, {0x3ec00000}, {0x3ec02000}, {0x3ec04000}, {0x3ec06000}, {0x3ec08000}, {0x3ec0a000}, {0x3ec0c000}, {0x3ec0e000}, {0x3ec10000}, {0x3ec12000}, {0x3ec14000}, {0x3ec16000}, {0x3ec18000}, {0x3ec1a000}, {0x3ec1c000}, {0x3ec1e000}, {0x3ec20000}, {0x3ec22000}, {0x3ec24000}, {0x3ec26000}, {0x3ec28000}, {0x3ec2a000}, {0x3ec2c000}, {0x3ec2e000}, {0x3ec30000}, {0x3ec32000}, {0x3ec34000}, {0x3ec36000}, {0x3ec38000}, {0x3ec3a000}, {0x3ec3c000}, {0x3ec3e000}, {0x3ec40000}, {0x3ec42000}, {0x3ec44000}, {0x3ec46000}, {0x3ec48000}, {0x3ec4a000}, {0x3ec4c000}, {0x3ec4e000}, {0x3ec50000}, {0x3ec52000}, {0x3ec54000}, {0x3ec56000}, {0x3ec58000}, {0x3ec5a000}, {0x3ec5c000}, {0x3ec5e000}, {0x3ec60000}, {0x3ec62000}, {0x3ec64000}, {0x3ec66000}, {0x3ec68000}, {0x3ec6a000}, {0x3ec6c000}, {0x3ec6e000}, {0x3ec70000}, {0x3ec72000}, {0x3ec74000}, {0x3ec76000}, {0x3ec78000}, {0x3ec7a000}, {0x3ec7c000}, {0x3ec7e000}, {0x3ec80000}, {0x3ec82000}, {0x3ec84000}, {0x3ec86000}, {0x3ec88000}, {0x3ec8a000}, {0x3ec8c000}, {0x3ec8e000}, {0x3ec90000}, {0x3ec92000}, {0x3ec94000}, {0x3ec96000}, {0x3ec98000}, {0x3ec9a000}, {0x3ec9c000}, {0x3ec9e000}, {0x3eca0000}, {0x3eca2000}, {0x3eca4000}, {0x3eca6000}, {0x3eca8000}, {0x3ecaa000}, {0x3ecac000}, {0x3ecae000}, {0x3ecb0000}, {0x3ecb2000}, {0x3ecb4000}, {0x3ecb6000}, {0x3ecb8000}, {0x3ecba000}, {0x3ecbc000}, {0x3ecbe000}, {0x3ecc0000}, {0x3ecc2000}, {0x3ecc4000}, {0x3ecc6000}, {0x3ecc8000}, {0x3ecca000}, {0x3eccc000}, {0x3ecce000}, {0x3ecd0000}, {0x3ecd2000}, {0x3ecd4000}, {0x3ecd6000}, {0x3ecd8000}, {0x3ecda000}, {0x3ecdc000}, {0x3ecde000}, {0x3ece0000}, {0x3ece2000}, {0x3ece4000}, {0x3ece6000}, {0x3ece8000}, {0x3ecea000}, {0x3ecec000}, {0x3ecee000}, {0x3ecf0000}, {0x3ecf2000}, {0x3ecf4000}, {0x3ecf6000}, {0x3ecf8000}, {0x3ecfa000}, {0x3ecfc000}, {0x3ecfe000}, {0x3ed00000}, {0x3ed02000}, {0x3ed04000}, {0x3ed06000}, {0x3ed08000}, {0x3ed0a000}, {0x3ed0c000}, {0x3ed0e000}, {0x3ed10000}, {0x3ed12000}, {0x3ed14000}, {0x3ed16000}, {0x3ed18000}, {0x3ed1a000}, {0x3ed1c000}, {0x3ed1e000}, {0x3ed20000}, {0x3ed22000}, {0x3ed24000}, {0x3ed26000}, {0x3ed28000}, {0x3ed2a000}, {0x3ed2c000}, {0x3ed2e000}, {0x3ed30000}, {0x3ed32000}, {0x3ed34000}, {0x3ed36000}, {0x3ed38000}, {0x3ed3a000}, {0x3ed3c000}, {0x3ed3e000}, {0x3ed40000}, {0x3ed42000}, {0x3ed44000}, {0x3ed46000}, {0x3ed48000}, {0x3ed4a000}, {0x3ed4c000}, {0x3ed4e000}, {0x3ed50000}, {0x3ed52000}, {0x3ed54000}, {0x3ed56000}, {0x3ed58000}, {0x3ed5a000}, {0x3ed5c000}, {0x3ed5e000}, {0x3ed60000}, {0x3ed62000}, {0x3ed64000}, {0x3ed66000}, {0x3ed68000}, {0x3ed6a000}, {0x3ed6c000}, {0x3ed6e000}, {0x3ed70000}, {0x3ed72000}, {0x3ed74000}, {0x3ed76000}, {0x3ed78000}, {0x3ed7a000}, {0x3ed7c000}, {0x3ed7e000}, {0x3ed80000}, {0x3ed82000}, {0x3ed84000}, {0x3ed86000}, {0x3ed88000}, {0x3ed8a000}, {0x3ed8c000}, {0x3ed8e000}, {0x3ed90000}, {0x3ed92000}, {0x3ed94000}, {0x3ed96000}, {0x3ed98000}, {0x3ed9a000}, {0x3ed9c000}, {0x3ed9e000}, {0x3eda0000}, {0x3eda2000}, {0x3eda4000}, {0x3eda6000}, {0x3eda8000}, {0x3edaa000}, {0x3edac000}, {0x3edae000}, {0x3edb0000}, {0x3edb2000}, {0x3edb4000}, {0x3edb6000}, {0x3edb8000}, {0x3edba000}, {0x3edbc000}, {0x3edbe000}, {0x3edc0000}, {0x3edc2000}, {0x3edc4000}, {0x3edc6000}, {0x3edc8000}, {0x3edca000}, {0x3edcc000}, {0x3edce000}, {0x3edd0000}, {0x3edd2000}, {0x3edd4000}, {0x3edd6000}, {0x3edd8000}, {0x3edda000}, {0x3eddc000}, {0x3edde000}, {0x3ede0000}, {0x3ede2000}, {0x3ede4000}, {0x3ede6000}, {0x3ede8000}, {0x3edea000}, {0x3edec000}, {0x3edee000}, {0x3edf0000}, {0x3edf2000}, {0x3edf4000}, {0x3edf6000}, {0x3edf8000}, {0x3edfa000}, {0x3edfc000}, {0x3edfe000}, {0x3ee00000}, {0x3ee02000}, {0x3ee04000}, {0x3ee06000}, {0x3ee08000}, {0x3ee0a000}, {0x3ee0c000}, {0x3ee0e000}, {0x3ee10000}, {0x3ee12000}, {0x3ee14000}, {0x3ee16000}, {0x3ee18000}, {0x3ee1a000}, {0x3ee1c000}, {0x3ee1e000}, {0x3ee20000}, {0x3ee22000}, {0x3ee24000}, {0x3ee26000}, {0x3ee28000}, {0x3ee2a000}, {0x3ee2c000}, {0x3ee2e000}, {0x3ee30000}, {0x3ee32000}, {0x3ee34000}, {0x3ee36000}, {0x3ee38000}, {0x3ee3a000}, {0x3ee3c000}, {0x3ee3e000}, {0x3ee40000}, {0x3ee42000}, {0x3ee44000}, {0x3ee46000}, {0x3ee48000}, {0x3ee4a000}, {0x3ee4c000}, {0x3ee4e000}, {0x3ee50000}, {0x3ee52000}, {0x3ee54000}, {0x3ee56000}, {0x3ee58000}, {0x3ee5a000}, {0x3ee5c000}, {0x3ee5e000}, {0x3ee60000}, {0x3ee62000}, {0x3ee64000}, {0x3ee66000}, {0x3ee68000}, {0x3ee6a000}, {0x3ee6c000}, {0x3ee6e000}, {0x3ee70000}, {0x3ee72000}, {0x3ee74000}, {0x3ee76000}, {0x3ee78000}, {0x3ee7a000}, {0x3ee7c000}, {0x3ee7e000}, {0x3ee80000}, {0x3ee82000}, {0x3ee84000}, {0x3ee86000}, {0x3ee88000}, {0x3ee8a000}, {0x3ee8c000}, {0x3ee8e000}, {0x3ee90000}, {0x3ee92000}, {0x3ee94000}, {0x3ee96000}, {0x3ee98000}, {0x3ee9a000}, {0x3ee9c000}, {0x3ee9e000}, {0x3eea0000}, {0x3eea2000}, {0x3eea4000}, {0x3eea6000}, {0x3eea8000}, {0x3eeaa000}, {0x3eeac000}, {0x3eeae000}, {0x3eeb0000}, {0x3eeb2000}, {0x3eeb4000}, {0x3eeb6000}, {0x3eeb8000}, {0x3eeba000}, {0x3eebc000}, {0x3eebe000}, {0x3eec0000}, {0x3eec2000}, {0x3eec4000}, {0x3eec6000}, {0x3eec8000}, {0x3eeca000}, {0x3eecc000}, {0x3eece000}, {0x3eed0000}, {0x3eed2000}, {0x3eed4000}, {0x3eed6000}, {0x3eed8000}, {0x3eeda000}, {0x3eedc000}, {0x3eede000}, {0x3eee0000}, {0x3eee2000}, {0x3eee4000}, {0x3eee6000}, {0x3eee8000}, {0x3eeea000}, {0x3eeec000}, {0x3eeee000}, {0x3eef0000}, {0x3eef2000}, {0x3eef4000}, {0x3eef6000}, {0x3eef8000}, {0x3eefa000}, {0x3eefc000}, {0x3eefe000}, {0x3ef00000}, {0x3ef02000}, {0x3ef04000}, {0x3ef06000}, {0x3ef08000}, {0x3ef0a000}, {0x3ef0c000}, {0x3ef0e000}, {0x3ef10000}, {0x3ef12000}, {0x3ef14000}, {0x3ef16000}, {0x3ef18000}, {0x3ef1a000}, {0x3ef1c000}, {0x3ef1e000}, {0x3ef20000}, {0x3ef22000}, {0x3ef24000}, {0x3ef26000}, {0x3ef28000}, {0x3ef2a000}, {0x3ef2c000}, {0x3ef2e000}, {0x3ef30000}, {0x3ef32000}, {0x3ef34000}, {0x3ef36000}, {0x3ef38000}, {0x3ef3a000}, {0x3ef3c000}, {0x3ef3e000}, {0x3ef40000}, {0x3ef42000}, {0x3ef44000}, {0x3ef46000}, {0x3ef48000}, {0x3ef4a000}, {0x3ef4c000}, {0x3ef4e000}, {0x3ef50000}, {0x3ef52000}, {0x3ef54000}, {0x3ef56000}, {0x3ef58000}, {0x3ef5a000}, {0x3ef5c000}, {0x3ef5e000}, {0x3ef60000}, {0x3ef62000}, {0x3ef64000}, {0x3ef66000}, {0x3ef68000}, {0x3ef6a000}, {0x3ef6c000}, {0x3ef6e000}, {0x3ef70000}, {0x3ef72000}, {0x3ef74000}, {0x3ef76000}, {0x3ef78000}, {0x3ef7a000}, {0x3ef7c000}, {0x3ef7e000}, {0x3ef80000}, {0x3ef82000}, {0x3ef84000}, {0x3ef86000}, {0x3ef88000}, {0x3ef8a000}, {0x3ef8c000}, {0x3ef8e000}, {0x3ef90000}, {0x3ef92000}, {0x3ef94000}, {0x3ef96000}, {0x3ef98000}, {0x3ef9a000}, {0x3ef9c000}, {0x3ef9e000}, {0x3efa0000}, {0x3efa2000}, {0x3efa4000}, {0x3efa6000}, {0x3efa8000}, {0x3efaa000}, {0x3efac000}, {0x3efae000}, {0x3efb0000}, {0x3efb2000}, {0x3efb4000}, {0x3efb6000}, {0x3efb8000}, {0x3efba000}, {0x3efbc000}, {0x3efbe000}, {0x3efc0000}, {0x3efc2000}, {0x3efc4000}, {0x3efc6000}, {0x3efc8000}, {0x3efca000}, {0x3efcc000}, {0x3efce000}, {0x3efd0000}, {0x3efd2000}, {0x3efd4000}, {0x3efd6000}, {0x3efd8000}, {0x3efda000}, {0x3efdc000}, {0x3efde000}, {0x3efe0000}, {0x3efe2000}, {0x3efe4000}, {0x3efe6000}, {0x3efe8000}, {0x3efea000}, {0x3efec000}, {0x3efee000}, {0x3eff0000}, {0x3eff2000}, {0x3eff4000}, {0x3eff6000}, {0x3eff8000}, {0x3effa000}, {0x3effc000}, {0x3effe000}, {0x3f000000}, {0x3f002000}, {0x3f004000}, {0x3f006000}, {0x3f008000}, {0x3f00a000}, {0x3f00c000}, {0x3f00e000}, {0x3f010000}, {0x3f012000}, {0x3f014000}, {0x3f016000}, {0x3f018000}, {0x3f01a000}, {0x3f01c000}, {0x3f01e000}, {0x3f020000}, {0x3f022000}, {0x3f024000}, {0x3f026000}, {0x3f028000}, {0x3f02a000}, {0x3f02c000}, {0x3f02e000}, {0x3f030000}, {0x3f032000}, {0x3f034000}, {0x3f036000}, {0x3f038000}, {0x3f03a000}, {0x3f03c000}, {0x3f03e000}, {0x3f040000}, {0x3f042000}, {0x3f044000}, {0x3f046000}, {0x3f048000}, {0x3f04a000}, {0x3f04c000}, {0x3f04e000}, {0x3f050000}, {0x3f052000}, {0x3f054000}, {0x3f056000}, {0x3f058000}, {0x3f05a000}, {0x3f05c000}, {0x3f05e000}, {0x3f060000}, {0x3f062000}, {0x3f064000}, {0x3f066000}, {0x3f068000}, {0x3f06a000}, {0x3f06c000}, {0x3f06e000}, {0x3f070000}, {0x3f072000}, {0x3f074000}, {0x3f076000}, {0x3f078000}, {0x3f07a000}, {0x3f07c000}, {0x3f07e000}, {0x3f080000}, {0x3f082000}, {0x3f084000}, {0x3f086000}, {0x3f088000}, {0x3f08a000}, {0x3f08c000}, {0x3f08e000}, {0x3f090000}, {0x3f092000}, {0x3f094000}, {0x3f096000}, {0x3f098000}, {0x3f09a000}, {0x3f09c000}, {0x3f09e000}, {0x3f0a0000}, {0x3f0a2000}, {0x3f0a4000}, {0x3f0a6000}, {0x3f0a8000}, {0x3f0aa000}, {0x3f0ac000}, {0x3f0ae000}, {0x3f0b0000}, {0x3f0b2000}, {0x3f0b4000}, {0x3f0b6000}, {0x3f0b8000}, {0x3f0ba000}, {0x3f0bc000}, {0x3f0be000}, {0x3f0c0000}, {0x3f0c2000}, {0x3f0c4000}, {0x3f0c6000}, {0x3f0c8000}, {0x3f0ca000}, {0x3f0cc000}, {0x3f0ce000}, {0x3f0d0000}, {0x3f0d2000}, {0x3f0d4000}, {0x3f0d6000}, {0x3f0d8000}, {0x3f0da000}, {0x3f0dc000}, {0x3f0de000}, {0x3f0e0000}, {0x3f0e2000}, {0x3f0e4000}, {0x3f0e6000}, {0x3f0e8000}, {0x3f0ea000}, {0x3f0ec000}, {0x3f0ee000}, {0x3f0f0000}, {0x3f0f2000}, {0x3f0f4000}, {0x3f0f6000}, {0x3f0f8000}, {0x3f0fa000}, {0x3f0fc000}, {0x3f0fe000}, {0x3f100000}, {0x3f102000}, {0x3f104000}, {0x3f106000}, {0x3f108000}, {0x3f10a000}, {0x3f10c000}, {0x3f10e000}, {0x3f110000}, {0x3f112000}, {0x3f114000}, {0x3f116000}, {0x3f118000}, {0x3f11a000}, {0x3f11c000}, {0x3f11e000}, {0x3f120000}, {0x3f122000}, {0x3f124000}, {0x3f126000}, {0x3f128000}, {0x3f12a000}, {0x3f12c000}, {0x3f12e000}, {0x3f130000}, {0x3f132000}, {0x3f134000}, {0x3f136000}, {0x3f138000}, {0x3f13a000}, {0x3f13c000}, {0x3f13e000}, {0x3f140000}, {0x3f142000}, {0x3f144000}, {0x3f146000}, {0x3f148000}, {0x3f14a000}, {0x3f14c000}, {0x3f14e000}, {0x3f150000}, {0x3f152000}, {0x3f154000}, {0x3f156000}, {0x3f158000}, {0x3f15a000}, {0x3f15c000}, {0x3f15e000}, {0x3f160000}, {0x3f162000}, {0x3f164000}, {0x3f166000}, {0x3f168000}, {0x3f16a000}, {0x3f16c000}, {0x3f16e000}, {0x3f170000}, {0x3f172000}, {0x3f174000}, {0x3f176000}, {0x3f178000}, {0x3f17a000}, {0x3f17c000}, {0x3f17e000}, {0x3f180000}, {0x3f182000}, {0x3f184000}, {0x3f186000}, {0x3f188000}, {0x3f18a000}, {0x3f18c000}, {0x3f18e000}, {0x3f190000}, {0x3f192000}, {0x3f194000}, {0x3f196000}, {0x3f198000}, {0x3f19a000}, {0x3f19c000}, {0x3f19e000}, {0x3f1a0000}, {0x3f1a2000}, {0x3f1a4000}, {0x3f1a6000}, {0x3f1a8000}, {0x3f1aa000}, {0x3f1ac000}, {0x3f1ae000}, {0x3f1b0000}, {0x3f1b2000}, {0x3f1b4000}, {0x3f1b6000}, {0x3f1b8000}, {0x3f1ba000}, {0x3f1bc000}, {0x3f1be000}, {0x3f1c0000}, {0x3f1c2000}, {0x3f1c4000}, {0x3f1c6000}, {0x3f1c8000}, {0x3f1ca000}, {0x3f1cc000}, {0x3f1ce000}, {0x3f1d0000}, {0x3f1d2000}, {0x3f1d4000}, {0x3f1d6000}, {0x3f1d8000}, {0x3f1da000}, {0x3f1dc000}, {0x3f1de000}, {0x3f1e0000}, {0x3f1e2000}, {0x3f1e4000}, {0x3f1e6000}, {0x3f1e8000}, {0x3f1ea000}, {0x3f1ec000}, {0x3f1ee000}, {0x3f1f0000}, {0x3f1f2000}, {0x3f1f4000}, {0x3f1f6000}, {0x3f1f8000}, {0x3f1fa000}, {0x3f1fc000}, {0x3f1fe000}, {0x3f200000}, {0x3f202000}, {0x3f204000}, {0x3f206000}, {0x3f208000}, {0x3f20a000}, {0x3f20c000}, {0x3f20e000}, {0x3f210000}, {0x3f212000}, {0x3f214000}, {0x3f216000}, {0x3f218000}, {0x3f21a000}, {0x3f21c000}, {0x3f21e000}, {0x3f220000}, {0x3f222000}, {0x3f224000}, {0x3f226000}, {0x3f228000}, {0x3f22a000}, {0x3f22c000}, {0x3f22e000}, {0x3f230000}, {0x3f232000}, {0x3f234000}, {0x3f236000}, {0x3f238000}, {0x3f23a000}, {0x3f23c000}, {0x3f23e000}, {0x3f240000}, {0x3f242000}, {0x3f244000}, {0x3f246000}, {0x3f248000}, {0x3f24a000}, {0x3f24c000}, {0x3f24e000}, {0x3f250000}, {0x3f252000}, {0x3f254000}, {0x3f256000}, {0x3f258000}, {0x3f25a000}, {0x3f25c000}, {0x3f25e000}, {0x3f260000}, {0x3f262000}, {0x3f264000}, {0x3f266000}, {0x3f268000}, {0x3f26a000}, {0x3f26c000}, {0x3f26e000}, {0x3f270000}, {0x3f272000}, {0x3f274000}, {0x3f276000}, {0x3f278000}, {0x3f27a000}, {0x3f27c000}, {0x3f27e000}, {0x3f280000}, {0x3f282000}, {0x3f284000}, {0x3f286000}, {0x3f288000}, {0x3f28a000}, {0x3f28c000}, {0x3f28e000}, {0x3f290000}, {0x3f292000}, {0x3f294000}, {0x3f296000}, {0x3f298000}, {0x3f29a000}, {0x3f29c000}, {0x3f29e000}, {0x3f2a0000}, {0x3f2a2000}, {0x3f2a4000}, {0x3f2a6000}, {0x3f2a8000}, {0x3f2aa000}, {0x3f2ac000}, {0x3f2ae000}, {0x3f2b0000}, {0x3f2b2000}, {0x3f2b4000}, {0x3f2b6000}, {0x3f2b8000}, {0x3f2ba000}, {0x3f2bc000}, {0x3f2be000}, {0x3f2c0000}, {0x3f2c2000}, {0x3f2c4000}, {0x3f2c6000}, {0x3f2c8000}, {0x3f2ca000}, {0x3f2cc000}, {0x3f2ce000}, {0x3f2d0000}, {0x3f2d2000}, {0x3f2d4000}, {0x3f2d6000}, {0x3f2d8000}, {0x3f2da000}, {0x3f2dc000}, {0x3f2de000}, {0x3f2e0000}, {0x3f2e2000}, {0x3f2e4000}, {0x3f2e6000}, {0x3f2e8000}, {0x3f2ea000}, {0x3f2ec000}, {0x3f2ee000}, {0x3f2f0000}, {0x3f2f2000}, {0x3f2f4000}, {0x3f2f6000}, {0x3f2f8000}, {0x3f2fa000}, {0x3f2fc000}, {0x3f2fe000}, {0x3f300000}, {0x3f302000}, {0x3f304000}, {0x3f306000}, {0x3f308000}, {0x3f30a000}, {0x3f30c000}, {0x3f30e000}, {0x3f310000}, {0x3f312000}, {0x3f314000}, {0x3f316000}, {0x3f318000}, {0x3f31a000}, {0x3f31c000}, {0x3f31e000}, {0x3f320000}, {0x3f322000}, {0x3f324000}, {0x3f326000}, {0x3f328000}, {0x3f32a000}, {0x3f32c000}, {0x3f32e000}, {0x3f330000}, {0x3f332000}, {0x3f334000}, {0x3f336000}, {0x3f338000}, {0x3f33a000}, {0x3f33c000}, {0x3f33e000}, {0x3f340000}, {0x3f342000}, {0x3f344000}, {0x3f346000}, {0x3f348000}, {0x3f34a000}, {0x3f34c000}, {0x3f34e000}, {0x3f350000}, {0x3f352000}, {0x3f354000}, {0x3f356000}, {0x3f358000}, {0x3f35a000}, {0x3f35c000}, {0x3f35e000}, {0x3f360000}, {0x3f362000}, {0x3f364000}, {0x3f366000}, {0x3f368000}, {0x3f36a000}, {0x3f36c000}, {0x3f36e000}, {0x3f370000}, {0x3f372000}, {0x3f374000}, {0x3f376000}, {0x3f378000}, {0x3f37a000}, {0x3f37c000}, {0x3f37e000}, {0x3f380000}, {0x3f382000}, {0x3f384000}, {0x3f386000}, {0x3f388000}, {0x3f38a000}, {0x3f38c000}, {0x3f38e000}, {0x3f390000}, {0x3f392000}, {0x3f394000}, {0x3f396000}, {0x3f398000}, {0x3f39a000}, {0x3f39c000}, {0x3f39e000}, {0x3f3a0000}, {0x3f3a2000}, {0x3f3a4000}, {0x3f3a6000}, {0x3f3a8000}, {0x3f3aa000}, {0x3f3ac000}, {0x3f3ae000}, {0x3f3b0000}, {0x3f3b2000}, {0x3f3b4000}, {0x3f3b6000}, {0x3f3b8000}, {0x3f3ba000}, {0x3f3bc000}, {0x3f3be000}, {0x3f3c0000}, {0x3f3c2000}, {0x3f3c4000}, {0x3f3c6000}, {0x3f3c8000}, {0x3f3ca000}, {0x3f3cc000}, {0x3f3ce000}, {0x3f3d0000}, {0x3f3d2000}, {0x3f3d4000}, {0x3f3d6000}, {0x3f3d8000}, {0x3f3da000}, {0x3f3dc000}, {0x3f3de000}, {0x3f3e0000}, {0x3f3e2000}, {0x3f3e4000}, {0x3f3e6000}, {0x3f3e8000}, {0x3f3ea000}, {0x3f3ec000}, {0x3f3ee000}, {0x3f3f0000}, {0x3f3f2000}, {0x3f3f4000}, {0x3f3f6000}, {0x3f3f8000}, {0x3f3fa000}, {0x3f3fc000}, {0x3f3fe000}, {0x3f400000}, {0x3f402000}, {0x3f404000}, {0x3f406000}, {0x3f408000}, {0x3f40a000}, {0x3f40c000}, {0x3f40e000}, {0x3f410000}, {0x3f412000}, {0x3f414000}, {0x3f416000}, {0x3f418000}, {0x3f41a000}, {0x3f41c000}, {0x3f41e000}, {0x3f420000}, {0x3f422000}, {0x3f424000}, {0x3f426000}, {0x3f428000}, {0x3f42a000}, {0x3f42c000}, {0x3f42e000}, {0x3f430000}, {0x3f432000}, {0x3f434000}, {0x3f436000}, {0x3f438000}, {0x3f43a000}, {0x3f43c000}, {0x3f43e000}, {0x3f440000}, {0x3f442000}, {0x3f444000}, {0x3f446000}, {0x3f448000}, {0x3f44a000}, {0x3f44c000}, {0x3f44e000}, {0x3f450000}, {0x3f452000}, {0x3f454000}, {0x3f456000}, {0x3f458000}, {0x3f45a000}, {0x3f45c000}, {0x3f45e000}, {0x3f460000}, {0x3f462000}, {0x3f464000}, {0x3f466000}, {0x3f468000}, {0x3f46a000}, {0x3f46c000}, {0x3f46e000}, {0x3f470000}, {0x3f472000}, {0x3f474000}, {0x3f476000}, {0x3f478000}, {0x3f47a000}, {0x3f47c000}, {0x3f47e000}, {0x3f480000}, {0x3f482000}, {0x3f484000}, {0x3f486000}, {0x3f488000}, {0x3f48a000}, {0x3f48c000}, {0x3f48e000}, {0x3f490000}, {0x3f492000}, {0x3f494000}, {0x3f496000}, {0x3f498000}, {0x3f49a000}, {0x3f49c000}, {0x3f49e000}, {0x3f4a0000}, {0x3f4a2000}, {0x3f4a4000}, {0x3f4a6000}, {0x3f4a8000}, {0x3f4aa000}, {0x3f4ac000}, {0x3f4ae000}, {0x3f4b0000}, {0x3f4b2000}, {0x3f4b4000}, {0x3f4b6000}, {0x3f4b8000}, {0x3f4ba000}, {0x3f4bc000}, {0x3f4be000}, {0x3f4c0000}, {0x3f4c2000}, {0x3f4c4000}, {0x3f4c6000}, {0x3f4c8000}, {0x3f4ca000}, {0x3f4cc000}, {0x3f4ce000}, {0x3f4d0000}, {0x3f4d2000}, {0x3f4d4000}, {0x3f4d6000}, {0x3f4d8000}, {0x3f4da000}, {0x3f4dc000}, {0x3f4de000}, {0x3f4e0000}, {0x3f4e2000}, {0x3f4e4000}, {0x3f4e6000}, {0x3f4e8000}, {0x3f4ea000}, {0x3f4ec000}, {0x3f4ee000}, {0x3f4f0000}, {0x3f4f2000}, {0x3f4f4000}, {0x3f4f6000}, {0x3f4f8000}, {0x3f4fa000}, {0x3f4fc000}, {0x3f4fe000}, {0x3f500000}, {0x3f502000}, {0x3f504000}, {0x3f506000}, {0x3f508000}, {0x3f50a000}, {0x3f50c000}, {0x3f50e000}, {0x3f510000}, {0x3f512000}, {0x3f514000}, {0x3f516000}, {0x3f518000}, {0x3f51a000}, {0x3f51c000}, {0x3f51e000}, {0x3f520000}, {0x3f522000}, {0x3f524000}, {0x3f526000}, {0x3f528000}, {0x3f52a000}, {0x3f52c000}, {0x3f52e000}, {0x3f530000}, {0x3f532000}, {0x3f534000}, {0x3f536000}, {0x3f538000}, {0x3f53a000}, {0x3f53c000}, {0x3f53e000}, {0x3f540000}, {0x3f542000}, {0x3f544000}, {0x3f546000}, {0x3f548000}, {0x3f54a000}, {0x3f54c000}, {0x3f54e000}, {0x3f550000}, {0x3f552000}, {0x3f554000}, {0x3f556000}, {0x3f558000}, {0x3f55a000}, {0x3f55c000}, {0x3f55e000}, {0x3f560000}, {0x3f562000}, {0x3f564000}, {0x3f566000}, {0x3f568000}, {0x3f56a000}, {0x3f56c000}, {0x3f56e000}, {0x3f570000}, {0x3f572000}, {0x3f574000}, {0x3f576000}, {0x3f578000}, {0x3f57a000}, {0x3f57c000}, {0x3f57e000}, {0x3f580000}, {0x3f582000}, {0x3f584000}, {0x3f586000}, {0x3f588000}, {0x3f58a000}, {0x3f58c000}, {0x3f58e000}, {0x3f590000}, {0x3f592000}, {0x3f594000}, {0x3f596000}, {0x3f598000}, {0x3f59a000}, {0x3f59c000}, {0x3f59e000}, {0x3f5a0000}, {0x3f5a2000}, {0x3f5a4000}, {0x3f5a6000}, {0x3f5a8000}, {0x3f5aa000}, {0x3f5ac000}, {0x3f5ae000}, {0x3f5b0000}, {0x3f5b2000}, {0x3f5b4000}, {0x3f5b6000}, {0x3f5b8000}, {0x3f5ba000}, {0x3f5bc000}, {0x3f5be000}, {0x3f5c0000}, {0x3f5c2000}, {0x3f5c4000}, {0x3f5c6000}, {0x3f5c8000}, {0x3f5ca000}, {0x3f5cc000}, {0x3f5ce000}, {0x3f5d0000}, {0x3f5d2000}, {0x3f5d4000}, {0x3f5d6000}, {0x3f5d8000}, {0x3f5da000}, {0x3f5dc000}, {0x3f5de000}, {0x3f5e0000}, {0x3f5e2000}, {0x3f5e4000}, {0x3f5e6000}, {0x3f5e8000}, {0x3f5ea000}, {0x3f5ec000}, {0x3f5ee000}, {0x3f5f0000}, {0x3f5f2000}, {0x3f5f4000}, {0x3f5f6000}, {0x3f5f8000}, {0x3f5fa000}, {0x3f5fc000}, {0x3f5fe000}, {0x3f600000}, {0x3f602000}, {0x3f604000}, {0x3f606000}, {0x3f608000}, {0x3f60a000}, {0x3f60c000}, {0x3f60e000}, {0x3f610000}, {0x3f612000}, {0x3f614000}, {0x3f616000}, {0x3f618000}, {0x3f61a000}, {0x3f61c000}, {0x3f61e000}, {0x3f620000}, {0x3f622000}, {0x3f624000}, {0x3f626000}, {0x3f628000}, {0x3f62a000}, {0x3f62c000}, {0x3f62e000}, {0x3f630000}, {0x3f632000}, {0x3f634000}, {0x3f636000}, {0x3f638000}, {0x3f63a000}, {0x3f63c000}, {0x3f63e000}, {0x3f640000}, {0x3f642000}, {0x3f644000}, {0x3f646000}, {0x3f648000}, {0x3f64a000}, {0x3f64c000}, {0x3f64e000}, {0x3f650000}, {0x3f652000}, {0x3f654000}, {0x3f656000}, {0x3f658000}, {0x3f65a000}, {0x3f65c000}, {0x3f65e000}, {0x3f660000}, {0x3f662000}, {0x3f664000}, {0x3f666000}, {0x3f668000}, {0x3f66a000}, {0x3f66c000}, {0x3f66e000}, {0x3f670000}, {0x3f672000}, {0x3f674000}, {0x3f676000}, {0x3f678000}, {0x3f67a000}, {0x3f67c000}, {0x3f67e000}, {0x3f680000}, {0x3f682000}, {0x3f684000}, {0x3f686000}, {0x3f688000}, {0x3f68a000}, {0x3f68c000}, {0x3f68e000}, {0x3f690000}, {0x3f692000}, {0x3f694000}, {0x3f696000}, {0x3f698000}, {0x3f69a000}, {0x3f69c000}, {0x3f69e000}, {0x3f6a0000}, {0x3f6a2000}, {0x3f6a4000}, {0x3f6a6000}, {0x3f6a8000}, {0x3f6aa000}, {0x3f6ac000}, {0x3f6ae000}, {0x3f6b0000}, {0x3f6b2000}, {0x3f6b4000}, {0x3f6b6000}, {0x3f6b8000}, {0x3f6ba000}, {0x3f6bc000}, {0x3f6be000}, {0x3f6c0000}, {0x3f6c2000}, {0x3f6c4000}, {0x3f6c6000}, {0x3f6c8000}, {0x3f6ca000}, {0x3f6cc000}, {0x3f6ce000}, {0x3f6d0000}, {0x3f6d2000}, {0x3f6d4000}, {0x3f6d6000}, {0x3f6d8000}, {0x3f6da000}, {0x3f6dc000}, {0x3f6de000}, {0x3f6e0000}, {0x3f6e2000}, {0x3f6e4000}, {0x3f6e6000}, {0x3f6e8000}, {0x3f6ea000}, {0x3f6ec000}, {0x3f6ee000}, {0x3f6f0000}, {0x3f6f2000}, {0x3f6f4000}, {0x3f6f6000}, {0x3f6f8000}, {0x3f6fa000}, {0x3f6fc000}, {0x3f6fe000}, {0x3f700000}, {0x3f702000}, {0x3f704000}, {0x3f706000}, {0x3f708000}, {0x3f70a000}, {0x3f70c000}, {0x3f70e000}, {0x3f710000}, {0x3f712000}, {0x3f714000}, {0x3f716000}, {0x3f718000}, {0x3f71a000}, {0x3f71c000}, {0x3f71e000}, {0x3f720000}, {0x3f722000}, {0x3f724000}, {0x3f726000}, {0x3f728000}, {0x3f72a000}, {0x3f72c000}, {0x3f72e000}, {0x3f730000}, {0x3f732000}, {0x3f734000}, {0x3f736000}, {0x3f738000}, {0x3f73a000}, {0x3f73c000}, {0x3f73e000}, {0x3f740000}, {0x3f742000}, {0x3f744000}, {0x3f746000}, {0x3f748000}, {0x3f74a000}, {0x3f74c000}, {0x3f74e000}, {0x3f750000}, {0x3f752000}, {0x3f754000}, {0x3f756000}, {0x3f758000}, {0x3f75a000}, {0x3f75c000}, {0x3f75e000}, {0x3f760000}, {0x3f762000}, {0x3f764000}, {0x3f766000}, {0x3f768000}, {0x3f76a000}, {0x3f76c000}, {0x3f76e000}, {0x3f770000}, {0x3f772000}, {0x3f774000}, {0x3f776000}, {0x3f778000}, {0x3f77a000}, {0x3f77c000}, {0x3f77e000}, {0x3f780000}, {0x3f782000}, {0x3f784000}, {0x3f786000}, {0x3f788000}, {0x3f78a000}, {0x3f78c000}, {0x3f78e000}, {0x3f790000}, {0x3f792000}, {0x3f794000}, {0x3f796000}, {0x3f798000}, {0x3f79a000}, {0x3f79c000}, {0x3f79e000}, {0x3f7a0000}, {0x3f7a2000}, {0x3f7a4000}, {0x3f7a6000}, {0x3f7a8000}, {0x3f7aa000}, {0x3f7ac000}, {0x3f7ae000}, {0x3f7b0000}, {0x3f7b2000}, {0x3f7b4000}, {0x3f7b6000}, {0x3f7b8000}, {0x3f7ba000}, {0x3f7bc000}, {0x3f7be000}, {0x3f7c0000}, {0x3f7c2000}, {0x3f7c4000}, {0x3f7c6000}, {0x3f7c8000}, {0x3f7ca000}, {0x3f7cc000}, {0x3f7ce000}, {0x3f7d0000}, {0x3f7d2000}, {0x3f7d4000}, {0x3f7d6000}, {0x3f7d8000}, {0x3f7da000}, {0x3f7dc000}, {0x3f7de000}, {0x3f7e0000}, {0x3f7e2000}, {0x3f7e4000}, {0x3f7e6000}, {0x3f7e8000}, {0x3f7ea000}, {0x3f7ec000}, {0x3f7ee000}, {0x3f7f0000}, {0x3f7f2000}, {0x3f7f4000}, {0x3f7f6000}, {0x3f7f8000}, {0x3f7fa000}, {0x3f7fc000}, {0x3f7fe000}, {0x3f800000}, {0x3f802000}, {0x3f804000}, {0x3f806000}, {0x3f808000}, {0x3f80a000}, {0x3f80c000}, {0x3f80e000}, {0x3f810000}, {0x3f812000}, {0x3f814000}, {0x3f816000}, {0x3f818000}, {0x3f81a000}, {0x3f81c000}, {0x3f81e000}, {0x3f820000}, {0x3f822000}, {0x3f824000}, {0x3f826000}, {0x3f828000}, {0x3f82a000}, {0x3f82c000}, {0x3f82e000}, {0x3f830000}, {0x3f832000}, {0x3f834000}, {0x3f836000}, {0x3f838000}, {0x3f83a000}, {0x3f83c000}, {0x3f83e000}, {0x3f840000}, {0x3f842000}, {0x3f844000}, {0x3f846000}, {0x3f848000}, {0x3f84a000}, {0x3f84c000}, {0x3f84e000}, {0x3f850000}, {0x3f852000}, {0x3f854000}, {0x3f856000}, {0x3f858000}, {0x3f85a000}, {0x3f85c000}, {0x3f85e000}, {0x3f860000}, {0x3f862000}, {0x3f864000}, {0x3f866000}, {0x3f868000}, {0x3f86a000}, {0x3f86c000}, {0x3f86e000}, {0x3f870000}, {0x3f872000}, {0x3f874000}, {0x3f876000}, {0x3f878000}, {0x3f87a000}, {0x3f87c000}, {0x3f87e000}, {0x3f880000}, {0x3f882000}, {0x3f884000}, {0x3f886000}, {0x3f888000}, {0x3f88a000}, {0x3f88c000}, {0x3f88e000}, {0x3f890000}, {0x3f892000}, {0x3f894000}, {0x3f896000}, {0x3f898000}, {0x3f89a000}, {0x3f89c000}, {0x3f89e000}, {0x3f8a0000}, {0x3f8a2000}, {0x3f8a4000}, {0x3f8a6000}, {0x3f8a8000}, {0x3f8aa000}, {0x3f8ac000}, {0x3f8ae000}, {0x3f8b0000}, {0x3f8b2000}, {0x3f8b4000}, {0x3f8b6000}, {0x3f8b8000}, {0x3f8ba000}, {0x3f8bc000}, {0x3f8be000}, {0x3f8c0000}, {0x3f8c2000}, {0x3f8c4000}, {0x3f8c6000}, {0x3f8c8000}, {0x3f8ca000}, {0x3f8cc000}, {0x3f8ce000}, {0x3f8d0000}, {0x3f8d2000}, {0x3f8d4000}, {0x3f8d6000}, {0x3f8d8000}, {0x3f8da000}, {0x3f8dc000}, {0x3f8de000}, {0x3f8e0000}, {0x3f8e2000}, {0x3f8e4000}, {0x3f8e6000}, {0x3f8e8000}, {0x3f8ea000}, {0x3f8ec000}, {0x3f8ee000}, {0x3f8f0000}, {0x3f8f2000}, {0x3f8f4000}, {0x3f8f6000}, {0x3f8f8000}, {0x3f8fa000}, {0x3f8fc000}, {0x3f8fe000}, {0x3f900000}, {0x3f902000}, {0x3f904000}, {0x3f906000}, {0x3f908000}, {0x3f90a000}, {0x3f90c000}, {0x3f90e000}, {0x3f910000}, {0x3f912000}, {0x3f914000}, {0x3f916000}, {0x3f918000}, {0x3f91a000}, {0x3f91c000}, {0x3f91e000}, {0x3f920000}, {0x3f922000}, {0x3f924000}, {0x3f926000}, {0x3f928000}, {0x3f92a000}, {0x3f92c000}, {0x3f92e000}, {0x3f930000}, {0x3f932000}, {0x3f934000}, {0x3f936000}, {0x3f938000}, {0x3f93a000}, {0x3f93c000}, {0x3f93e000}, {0x3f940000}, {0x3f942000}, {0x3f944000}, {0x3f946000}, {0x3f948000}, {0x3f94a000}, {0x3f94c000}, {0x3f94e000}, {0x3f950000}, {0x3f952000}, {0x3f954000}, {0x3f956000}, {0x3f958000}, {0x3f95a000}, {0x3f95c000}, {0x3f95e000}, {0x3f960000}, {0x3f962000}, {0x3f964000}, {0x3f966000}, {0x3f968000}, {0x3f96a000}, {0x3f96c000}, {0x3f96e000}, {0x3f970000}, {0x3f972000}, {0x3f974000}, {0x3f976000}, {0x3f978000}, {0x3f97a000}, {0x3f97c000}, {0x3f97e000}, {0x3f980000}, {0x3f982000}, {0x3f984000}, {0x3f986000}, {0x3f988000}, {0x3f98a000}, {0x3f98c000}, {0x3f98e000}, {0x3f990000}, {0x3f992000}, {0x3f994000}, {0x3f996000}, {0x3f998000}, {0x3f99a000}, {0x3f99c000}, {0x3f99e000}, {0x3f9a0000}, {0x3f9a2000}, {0x3f9a4000}, {0x3f9a6000}, {0x3f9a8000}, {0x3f9aa000}, {0x3f9ac000}, {0x3f9ae000}, {0x3f9b0000}, {0x3f9b2000}, {0x3f9b4000}, {0x3f9b6000}, {0x3f9b8000}, {0x3f9ba000}, {0x3f9bc000}, {0x3f9be000}, {0x3f9c0000}, {0x3f9c2000}, {0x3f9c4000}, {0x3f9c6000}, {0x3f9c8000}, {0x3f9ca000}, {0x3f9cc000}, {0x3f9ce000}, {0x3f9d0000}, {0x3f9d2000}, {0x3f9d4000}, {0x3f9d6000}, {0x3f9d8000}, {0x3f9da000}, {0x3f9dc000}, {0x3f9de000}, {0x3f9e0000}, {0x3f9e2000}, {0x3f9e4000}, {0x3f9e6000}, {0x3f9e8000}, {0x3f9ea000}, {0x3f9ec000}, {0x3f9ee000}, {0x3f9f0000}, {0x3f9f2000}, {0x3f9f4000}, {0x3f9f6000}, {0x3f9f8000}, {0x3f9fa000}, {0x3f9fc000}, {0x3f9fe000}, {0x3fa00000}, {0x3fa02000}, {0x3fa04000}, {0x3fa06000}, {0x3fa08000}, {0x3fa0a000}, {0x3fa0c000}, {0x3fa0e000}, {0x3fa10000}, {0x3fa12000}, {0x3fa14000}, {0x3fa16000}, {0x3fa18000}, {0x3fa1a000}, {0x3fa1c000}, {0x3fa1e000}, {0x3fa20000}, {0x3fa22000}, {0x3fa24000}, {0x3fa26000}, {0x3fa28000}, {0x3fa2a000}, {0x3fa2c000}, {0x3fa2e000}, {0x3fa30000}, {0x3fa32000}, {0x3fa34000}, {0x3fa36000}, {0x3fa38000}, {0x3fa3a000}, {0x3fa3c000}, {0x3fa3e000}, {0x3fa40000}, {0x3fa42000}, {0x3fa44000}, {0x3fa46000}, {0x3fa48000}, {0x3fa4a000}, {0x3fa4c000}, {0x3fa4e000}, {0x3fa50000}, {0x3fa52000}, {0x3fa54000}, {0x3fa56000}, {0x3fa58000}, {0x3fa5a000}, {0x3fa5c000}, {0x3fa5e000}, {0x3fa60000}, {0x3fa62000}, {0x3fa64000}, {0x3fa66000}, {0x3fa68000}, {0x3fa6a000}, {0x3fa6c000}, {0x3fa6e000}, {0x3fa70000}, {0x3fa72000}, {0x3fa74000}, {0x3fa76000}, {0x3fa78000}, {0x3fa7a000}, {0x3fa7c000}, {0x3fa7e000}, {0x3fa80000}, {0x3fa82000}, {0x3fa84000}, {0x3fa86000}, {0x3fa88000}, {0x3fa8a000}, {0x3fa8c000}, {0x3fa8e000}, {0x3fa90000}, {0x3fa92000}, {0x3fa94000}, {0x3fa96000}, {0x3fa98000}, {0x3fa9a000}, {0x3fa9c000}, {0x3fa9e000}, {0x3faa0000}, {0x3faa2000}, {0x3faa4000}, {0x3faa6000}, {0x3faa8000}, {0x3faaa000}, {0x3faac000}, {0x3faae000}, {0x3fab0000}, {0x3fab2000}, {0x3fab4000}, {0x3fab6000}, {0x3fab8000}, {0x3faba000}, {0x3fabc000}, {0x3fabe000}, {0x3fac0000}, {0x3fac2000}, {0x3fac4000}, {0x3fac6000}, {0x3fac8000}, {0x3faca000}, {0x3facc000}, {0x3face000}, {0x3fad0000}, {0x3fad2000}, {0x3fad4000}, {0x3fad6000}, {0x3fad8000}, {0x3fada000}, {0x3fadc000}, {0x3fade000}, {0x3fae0000}, {0x3fae2000}, {0x3fae4000}, {0x3fae6000}, {0x3fae8000}, {0x3faea000}, {0x3faec000}, {0x3faee000}, {0x3faf0000}, {0x3faf2000}, {0x3faf4000}, {0x3faf6000}, {0x3faf8000}, {0x3fafa000}, {0x3fafc000}, {0x3fafe000}, {0x3fb00000}, {0x3fb02000}, {0x3fb04000}, {0x3fb06000}, {0x3fb08000}, {0x3fb0a000}, {0x3fb0c000}, {0x3fb0e000}, {0x3fb10000}, {0x3fb12000}, {0x3fb14000}, {0x3fb16000}, {0x3fb18000}, {0x3fb1a000}, {0x3fb1c000}, {0x3fb1e000}, {0x3fb20000}, {0x3fb22000}, {0x3fb24000}, {0x3fb26000}, {0x3fb28000}, {0x3fb2a000}, {0x3fb2c000}, {0x3fb2e000}, {0x3fb30000}, {0x3fb32000}, {0x3fb34000}, {0x3fb36000}, {0x3fb38000}, {0x3fb3a000}, {0x3fb3c000}, {0x3fb3e000}, {0x3fb40000}, {0x3fb42000}, {0x3fb44000}, {0x3fb46000}, {0x3fb48000}, {0x3fb4a000}, {0x3fb4c000}, {0x3fb4e000}, {0x3fb50000}, {0x3fb52000}, {0x3fb54000}, {0x3fb56000}, {0x3fb58000}, {0x3fb5a000}, {0x3fb5c000}, {0x3fb5e000}, {0x3fb60000}, {0x3fb62000}, {0x3fb64000}, {0x3fb66000}, {0x3fb68000}, {0x3fb6a000}, {0x3fb6c000}, {0x3fb6e000}, {0x3fb70000}, {0x3fb72000}, {0x3fb74000}, {0x3fb76000}, {0x3fb78000}, {0x3fb7a000}, {0x3fb7c000}, {0x3fb7e000}, {0x3fb80000}, {0x3fb82000}, {0x3fb84000}, {0x3fb86000}, {0x3fb88000}, {0x3fb8a000}, {0x3fb8c000}, {0x3fb8e000}, {0x3fb90000}, {0x3fb92000}, {0x3fb94000}, {0x3fb96000}, {0x3fb98000}, {0x3fb9a000}, {0x3fb9c000}, {0x3fb9e000}, {0x3fba0000}, {0x3fba2000}, {0x3fba4000}, {0x3fba6000}, {0x3fba8000}, {0x3fbaa000}, {0x3fbac000}, {0x3fbae000}, {0x3fbb0000}, {0x3fbb2000}, {0x3fbb4000}, {0x3fbb6000}, {0x3fbb8000}, {0x3fbba000}, {0x3fbbc000}, {0x3fbbe000}, {0x3fbc0000}, {0x3fbc2000}, {0x3fbc4000}, {0x3fbc6000}, {0x3fbc8000}, {0x3fbca000}, {0x3fbcc000}, {0x3fbce000}, {0x3fbd0000}, {0x3fbd2000}, {0x3fbd4000}, {0x3fbd6000}, {0x3fbd8000}, {0x3fbda000}, {0x3fbdc000}, {0x3fbde000}, {0x3fbe0000}, {0x3fbe2000}, {0x3fbe4000}, {0x3fbe6000}, {0x3fbe8000}, {0x3fbea000}, {0x3fbec000}, {0x3fbee000}, {0x3fbf0000}, {0x3fbf2000}, {0x3fbf4000}, {0x3fbf6000}, {0x3fbf8000}, {0x3fbfa000}, {0x3fbfc000}, {0x3fbfe000}, {0x3fc00000}, {0x3fc02000}, {0x3fc04000}, {0x3fc06000}, {0x3fc08000}, {0x3fc0a000}, {0x3fc0c000}, {0x3fc0e000}, {0x3fc10000}, {0x3fc12000}, {0x3fc14000}, {0x3fc16000}, {0x3fc18000}, {0x3fc1a000}, {0x3fc1c000}, {0x3fc1e000}, {0x3fc20000}, {0x3fc22000}, {0x3fc24000}, {0x3fc26000}, {0x3fc28000}, {0x3fc2a000}, {0x3fc2c000}, {0x3fc2e000}, {0x3fc30000}, {0x3fc32000}, {0x3fc34000}, {0x3fc36000}, {0x3fc38000}, {0x3fc3a000}, {0x3fc3c000}, {0x3fc3e000}, {0x3fc40000}, {0x3fc42000}, {0x3fc44000}, {0x3fc46000}, {0x3fc48000}, {0x3fc4a000}, {0x3fc4c000}, {0x3fc4e000}, {0x3fc50000}, {0x3fc52000}, {0x3fc54000}, {0x3fc56000}, {0x3fc58000}, {0x3fc5a000}, {0x3fc5c000}, {0x3fc5e000}, {0x3fc60000}, {0x3fc62000}, {0x3fc64000}, {0x3fc66000}, {0x3fc68000}, {0x3fc6a000}, {0x3fc6c000}, {0x3fc6e000}, {0x3fc70000}, {0x3fc72000}, {0x3fc74000}, {0x3fc76000}, {0x3fc78000}, {0x3fc7a000}, {0x3fc7c000}, {0x3fc7e000}, {0x3fc80000}, {0x3fc82000}, {0x3fc84000}, {0x3fc86000}, {0x3fc88000}, {0x3fc8a000}, {0x3fc8c000}, {0x3fc8e000}, {0x3fc90000}, {0x3fc92000}, {0x3fc94000}, {0x3fc96000}, {0x3fc98000}, {0x3fc9a000}, {0x3fc9c000}, {0x3fc9e000}, {0x3fca0000}, {0x3fca2000}, {0x3fca4000}, {0x3fca6000}, {0x3fca8000}, {0x3fcaa000}, {0x3fcac000}, {0x3fcae000}, {0x3fcb0000}, {0x3fcb2000}, {0x3fcb4000}, {0x3fcb6000}, {0x3fcb8000}, {0x3fcba000}, {0x3fcbc000}, {0x3fcbe000}, {0x3fcc0000}, {0x3fcc2000}, {0x3fcc4000}, {0x3fcc6000}, {0x3fcc8000}, {0x3fcca000}, {0x3fccc000}, {0x3fcce000}, {0x3fcd0000}, {0x3fcd2000}, {0x3fcd4000}, {0x3fcd6000}, {0x3fcd8000}, {0x3fcda000}, {0x3fcdc000}, {0x3fcde000}, {0x3fce0000}, {0x3fce2000}, {0x3fce4000}, {0x3fce6000}, {0x3fce8000}, {0x3fcea000}, {0x3fcec000}, {0x3fcee000}, {0x3fcf0000}, {0x3fcf2000}, {0x3fcf4000}, {0x3fcf6000}, {0x3fcf8000}, {0x3fcfa000}, {0x3fcfc000}, {0x3fcfe000}, {0x3fd00000}, {0x3fd02000}, {0x3fd04000}, {0x3fd06000}, {0x3fd08000}, {0x3fd0a000}, {0x3fd0c000}, {0x3fd0e000}, {0x3fd10000}, {0x3fd12000}, {0x3fd14000}, {0x3fd16000}, {0x3fd18000}, {0x3fd1a000}, {0x3fd1c000}, {0x3fd1e000}, {0x3fd20000}, {0x3fd22000}, {0x3fd24000}, {0x3fd26000}, {0x3fd28000}, {0x3fd2a000}, {0x3fd2c000}, {0x3fd2e000}, {0x3fd30000}, {0x3fd32000}, {0x3fd34000}, {0x3fd36000}, {0x3fd38000}, {0x3fd3a000}, {0x3fd3c000}, {0x3fd3e000}, {0x3fd40000}, {0x3fd42000}, {0x3fd44000}, {0x3fd46000}, {0x3fd48000}, {0x3fd4a000}, {0x3fd4c000}, {0x3fd4e000}, {0x3fd50000}, {0x3fd52000}, {0x3fd54000}, {0x3fd56000}, {0x3fd58000}, {0x3fd5a000}, {0x3fd5c000}, {0x3fd5e000}, {0x3fd60000}, {0x3fd62000}, {0x3fd64000}, {0x3fd66000}, {0x3fd68000}, {0x3fd6a000}, {0x3fd6c000}, {0x3fd6e000}, {0x3fd70000}, {0x3fd72000}, {0x3fd74000}, {0x3fd76000}, {0x3fd78000}, {0x3fd7a000}, {0x3fd7c000}, {0x3fd7e000}, {0x3fd80000}, {0x3fd82000}, {0x3fd84000}, {0x3fd86000}, {0x3fd88000}, {0x3fd8a000}, {0x3fd8c000}, {0x3fd8e000}, {0x3fd90000}, {0x3fd92000}, {0x3fd94000}, {0x3fd96000}, {0x3fd98000}, {0x3fd9a000}, {0x3fd9c000}, {0x3fd9e000}, {0x3fda0000}, {0x3fda2000}, {0x3fda4000}, {0x3fda6000}, {0x3fda8000}, {0x3fdaa000}, {0x3fdac000}, {0x3fdae000}, {0x3fdb0000}, {0x3fdb2000}, {0x3fdb4000}, {0x3fdb6000}, {0x3fdb8000}, {0x3fdba000}, {0x3fdbc000}, {0x3fdbe000}, {0x3fdc0000}, {0x3fdc2000}, {0x3fdc4000}, {0x3fdc6000}, {0x3fdc8000}, {0x3fdca000}, {0x3fdcc000}, {0x3fdce000}, {0x3fdd0000}, {0x3fdd2000}, {0x3fdd4000}, {0x3fdd6000}, {0x3fdd8000}, {0x3fdda000}, {0x3fddc000}, {0x3fdde000}, {0x3fde0000}, {0x3fde2000}, {0x3fde4000}, {0x3fde6000}, {0x3fde8000}, {0x3fdea000}, {0x3fdec000}, {0x3fdee000}, {0x3fdf0000}, {0x3fdf2000}, {0x3fdf4000}, {0x3fdf6000}, {0x3fdf8000}, {0x3fdfa000}, {0x3fdfc000}, {0x3fdfe000}, {0x3fe00000}, {0x3fe02000}, {0x3fe04000}, {0x3fe06000}, {0x3fe08000}, {0x3fe0a000}, {0x3fe0c000}, {0x3fe0e000}, {0x3fe10000}, {0x3fe12000}, {0x3fe14000}, {0x3fe16000}, {0x3fe18000}, {0x3fe1a000}, {0x3fe1c000}, {0x3fe1e000}, {0x3fe20000}, {0x3fe22000}, {0x3fe24000}, {0x3fe26000}, {0x3fe28000}, {0x3fe2a000}, {0x3fe2c000}, {0x3fe2e000}, {0x3fe30000}, {0x3fe32000}, {0x3fe34000}, {0x3fe36000}, {0x3fe38000}, {0x3fe3a000}, {0x3fe3c000}, {0x3fe3e000}, {0x3fe40000}, {0x3fe42000}, {0x3fe44000}, {0x3fe46000}, {0x3fe48000}, {0x3fe4a000}, {0x3fe4c000}, {0x3fe4e000}, {0x3fe50000}, {0x3fe52000}, {0x3fe54000}, {0x3fe56000}, {0x3fe58000}, {0x3fe5a000}, {0x3fe5c000}, {0x3fe5e000}, {0x3fe60000}, {0x3fe62000}, {0x3fe64000}, {0x3fe66000}, {0x3fe68000}, {0x3fe6a000}, {0x3fe6c000}, {0x3fe6e000}, {0x3fe70000}, {0x3fe72000}, {0x3fe74000}, {0x3fe76000}, {0x3fe78000}, {0x3fe7a000}, {0x3fe7c000}, {0x3fe7e000}, {0x3fe80000}, {0x3fe82000}, {0x3fe84000}, {0x3fe86000}, {0x3fe88000}, {0x3fe8a000}, {0x3fe8c000}, {0x3fe8e000}, {0x3fe90000}, {0x3fe92000}, {0x3fe94000}, {0x3fe96000}, {0x3fe98000}, {0x3fe9a000}, {0x3fe9c000}, {0x3fe9e000}, {0x3fea0000}, {0x3fea2000}, {0x3fea4000}, {0x3fea6000}, {0x3fea8000}, {0x3feaa000}, {0x3feac000}, {0x3feae000}, {0x3feb0000}, {0x3feb2000}, {0x3feb4000}, {0x3feb6000}, {0x3feb8000}, {0x3feba000}, {0x3febc000}, {0x3febe000}, {0x3fec0000}, {0x3fec2000}, {0x3fec4000}, {0x3fec6000}, {0x3fec8000}, {0x3feca000}, {0x3fecc000}, {0x3fece000}, {0x3fed0000}, {0x3fed2000}, {0x3fed4000}, {0x3fed6000}, {0x3fed8000}, {0x3feda000}, {0x3fedc000}, {0x3fede000}, {0x3fee0000}, {0x3fee2000}, {0x3fee4000}, {0x3fee6000}, {0x3fee8000}, {0x3feea000}, {0x3feec000}, {0x3feee000}, {0x3fef0000}, {0x3fef2000}, {0x3fef4000}, {0x3fef6000}, {0x3fef8000}, {0x3fefa000}, {0x3fefc000}, {0x3fefe000}, {0x3ff00000}, {0x3ff02000}, {0x3ff04000}, {0x3ff06000}, {0x3ff08000}, {0x3ff0a000}, {0x3ff0c000}, {0x3ff0e000}, {0x3ff10000}, {0x3ff12000}, {0x3ff14000}, {0x3ff16000}, {0x3ff18000}, {0x3ff1a000}, {0x3ff1c000}, {0x3ff1e000}, {0x3ff20000}, {0x3ff22000}, {0x3ff24000}, {0x3ff26000}, {0x3ff28000}, {0x3ff2a000}, {0x3ff2c000}, {0x3ff2e000}, {0x3ff30000}, {0x3ff32000}, {0x3ff34000}, {0x3ff36000}, {0x3ff38000}, {0x3ff3a000}, {0x3ff3c000}, {0x3ff3e000}, {0x3ff40000}, {0x3ff42000}, {0x3ff44000}, {0x3ff46000}, {0x3ff48000}, {0x3ff4a000}, {0x3ff4c000}, {0x3ff4e000}, {0x3ff50000}, {0x3ff52000}, {0x3ff54000}, {0x3ff56000}, {0x3ff58000}, {0x3ff5a000}, {0x3ff5c000}, {0x3ff5e000}, {0x3ff60000}, {0x3ff62000}, {0x3ff64000}, {0x3ff66000}, {0x3ff68000}, {0x3ff6a000}, {0x3ff6c000}, {0x3ff6e000}, {0x3ff70000}, {0x3ff72000}, {0x3ff74000}, {0x3ff76000}, {0x3ff78000}, {0x3ff7a000}, {0x3ff7c000}, {0x3ff7e000}, {0x3ff80000}, {0x3ff82000}, {0x3ff84000}, {0x3ff86000}, {0x3ff88000}, {0x3ff8a000}, {0x3ff8c000}, {0x3ff8e000}, {0x3ff90000}, {0x3ff92000}, {0x3ff94000}, {0x3ff96000}, {0x3ff98000}, {0x3ff9a000}, {0x3ff9c000}, {0x3ff9e000}, {0x3ffa0000}, {0x3ffa2000}, {0x3ffa4000}, {0x3ffa6000}, {0x3ffa8000}, {0x3ffaa000}, {0x3ffac000}, {0x3ffae000}, {0x3ffb0000}, {0x3ffb2000}, {0x3ffb4000}, {0x3ffb6000}, {0x3ffb8000}, {0x3ffba000}, {0x3ffbc000}, {0x3ffbe000}, {0x3ffc0000}, {0x3ffc2000}, {0x3ffc4000}, {0x3ffc6000}, {0x3ffc8000}, {0x3ffca000}, {0x3ffcc000}, {0x3ffce000}, {0x3ffd0000}, {0x3ffd2000}, {0x3ffd4000}, {0x3ffd6000}, {0x3ffd8000}, {0x3ffda000}, {0x3ffdc000}, {0x3ffde000}, {0x3ffe0000}, {0x3ffe2000}, {0x3ffe4000}, {0x3ffe6000}, {0x3ffe8000}, {0x3ffea000}, {0x3ffec000}, {0x3ffee000}, {0x3fff0000}, {0x3fff2000}, {0x3fff4000}, {0x3fff6000}, {0x3fff8000}, {0x3fffa000}, {0x3fffc000}, {0x3fffe000}, {0x40000000}, {0x40002000}, {0x40004000}, {0x40006000}, {0x40008000}, {0x4000a000}, {0x4000c000}, {0x4000e000}, {0x40010000}, {0x40012000}, {0x40014000}, {0x40016000}, {0x40018000}, {0x4001a000}, {0x4001c000}, {0x4001e000}, {0x40020000}, {0x40022000}, {0x40024000}, {0x40026000}, {0x40028000}, {0x4002a000}, {0x4002c000}, {0x4002e000}, {0x40030000}, {0x40032000}, {0x40034000}, {0x40036000}, {0x40038000}, {0x4003a000}, {0x4003c000}, {0x4003e000}, {0x40040000}, {0x40042000}, {0x40044000}, {0x40046000}, {0x40048000}, {0x4004a000}, {0x4004c000}, {0x4004e000}, {0x40050000}, {0x40052000}, {0x40054000}, {0x40056000}, {0x40058000}, {0x4005a000}, {0x4005c000}, {0x4005e000}, {0x40060000}, {0x40062000}, {0x40064000}, {0x40066000}, {0x40068000}, {0x4006a000}, {0x4006c000}, {0x4006e000}, {0x40070000}, {0x40072000}, {0x40074000}, {0x40076000}, {0x40078000}, {0x4007a000}, {0x4007c000}, {0x4007e000}, {0x40080000}, {0x40082000}, {0x40084000}, {0x40086000}, {0x40088000}, {0x4008a000}, {0x4008c000}, {0x4008e000}, {0x40090000}, {0x40092000}, {0x40094000}, {0x40096000}, {0x40098000}, {0x4009a000}, {0x4009c000}, {0x4009e000}, {0x400a0000}, {0x400a2000}, {0x400a4000}, {0x400a6000}, {0x400a8000}, {0x400aa000}, {0x400ac000}, {0x400ae000}, {0x400b0000}, {0x400b2000}, {0x400b4000}, {0x400b6000}, {0x400b8000}, {0x400ba000}, {0x400bc000}, {0x400be000}, {0x400c0000}, {0x400c2000}, {0x400c4000}, {0x400c6000}, {0x400c8000}, {0x400ca000}, {0x400cc000}, {0x400ce000}, {0x400d0000}, {0x400d2000}, {0x400d4000}, {0x400d6000}, {0x400d8000}, {0x400da000}, {0x400dc000}, {0x400de000}, {0x400e0000}, {0x400e2000}, {0x400e4000}, {0x400e6000}, {0x400e8000}, {0x400ea000}, {0x400ec000}, {0x400ee000}, {0x400f0000}, {0x400f2000}, {0x400f4000}, {0x400f6000}, {0x400f8000}, {0x400fa000}, {0x400fc000}, {0x400fe000}, {0x40100000}, {0x40102000}, {0x40104000}, {0x40106000}, {0x40108000}, {0x4010a000}, {0x4010c000}, {0x4010e000}, {0x40110000}, {0x40112000}, {0x40114000}, {0x40116000}, {0x40118000}, {0x4011a000}, {0x4011c000}, {0x4011e000}, {0x40120000}, {0x40122000}, {0x40124000}, {0x40126000}, {0x40128000}, {0x4012a000}, {0x4012c000}, {0x4012e000}, {0x40130000}, {0x40132000}, {0x40134000}, {0x40136000}, {0x40138000}, {0x4013a000}, {0x4013c000}, {0x4013e000}, {0x40140000}, {0x40142000}, {0x40144000}, {0x40146000}, {0x40148000}, {0x4014a000}, {0x4014c000}, {0x4014e000}, {0x40150000}, {0x40152000}, {0x40154000}, {0x40156000}, {0x40158000}, {0x4015a000}, {0x4015c000}, {0x4015e000}, {0x40160000}, {0x40162000}, {0x40164000}, {0x40166000}, {0x40168000}, {0x4016a000}, {0x4016c000}, {0x4016e000}, {0x40170000}, {0x40172000}, {0x40174000}, {0x40176000}, {0x40178000}, {0x4017a000}, {0x4017c000}, {0x4017e000}, {0x40180000}, {0x40182000}, {0x40184000}, {0x40186000}, {0x40188000}, {0x4018a000}, {0x4018c000}, {0x4018e000}, {0x40190000}, {0x40192000}, {0x40194000}, {0x40196000}, {0x40198000}, {0x4019a000}, {0x4019c000}, {0x4019e000}, {0x401a0000}, {0x401a2000}, {0x401a4000}, {0x401a6000}, {0x401a8000}, {0x401aa000}, {0x401ac000}, {0x401ae000}, {0x401b0000}, {0x401b2000}, {0x401b4000}, {0x401b6000}, {0x401b8000}, {0x401ba000}, {0x401bc000}, {0x401be000}, {0x401c0000}, {0x401c2000}, {0x401c4000}, {0x401c6000}, {0x401c8000}, {0x401ca000}, {0x401cc000}, {0x401ce000}, {0x401d0000}, {0x401d2000}, {0x401d4000}, {0x401d6000}, {0x401d8000}, {0x401da000}, {0x401dc000}, {0x401de000}, {0x401e0000}, {0x401e2000}, {0x401e4000}, {0x401e6000}, {0x401e8000}, {0x401ea000}, {0x401ec000}, {0x401ee000}, {0x401f0000}, {0x401f2000}, {0x401f4000}, {0x401f6000}, {0x401f8000}, {0x401fa000}, {0x401fc000}, {0x401fe000}, {0x40200000}, {0x40202000}, {0x40204000}, {0x40206000}, {0x40208000}, {0x4020a000}, {0x4020c000}, {0x4020e000}, {0x40210000}, {0x40212000}, {0x40214000}, {0x40216000}, {0x40218000}, {0x4021a000}, {0x4021c000}, {0x4021e000}, {0x40220000}, {0x40222000}, {0x40224000}, {0x40226000}, {0x40228000}, {0x4022a000}, {0x4022c000}, {0x4022e000}, {0x40230000}, {0x40232000}, {0x40234000}, {0x40236000}, {0x40238000}, {0x4023a000}, {0x4023c000}, {0x4023e000}, {0x40240000}, {0x40242000}, {0x40244000}, {0x40246000}, {0x40248000}, {0x4024a000}, {0x4024c000}, {0x4024e000}, {0x40250000}, {0x40252000}, {0x40254000}, {0x40256000}, {0x40258000}, {0x4025a000}, {0x4025c000}, {0x4025e000}, {0x40260000}, {0x40262000}, {0x40264000}, {0x40266000}, {0x40268000}, {0x4026a000}, {0x4026c000}, {0x4026e000}, {0x40270000}, {0x40272000}, {0x40274000}, {0x40276000}, {0x40278000}, {0x4027a000}, {0x4027c000}, {0x4027e000}, {0x40280000}, {0x40282000}, {0x40284000}, {0x40286000}, {0x40288000}, {0x4028a000}, {0x4028c000}, {0x4028e000}, {0x40290000}, {0x40292000}, {0x40294000}, {0x40296000}, {0x40298000}, {0x4029a000}, {0x4029c000}, {0x4029e000}, {0x402a0000}, {0x402a2000}, {0x402a4000}, {0x402a6000}, {0x402a8000}, {0x402aa000}, {0x402ac000}, {0x402ae000}, {0x402b0000}, {0x402b2000}, {0x402b4000}, {0x402b6000}, {0x402b8000}, {0x402ba000}, {0x402bc000}, {0x402be000}, {0x402c0000}, {0x402c2000}, {0x402c4000}, {0x402c6000}, {0x402c8000}, {0x402ca000}, {0x402cc000}, {0x402ce000}, {0x402d0000}, {0x402d2000}, {0x402d4000}, {0x402d6000}, {0x402d8000}, {0x402da000}, {0x402dc000}, {0x402de000}, {0x402e0000}, {0x402e2000}, {0x402e4000}, {0x402e6000}, {0x402e8000}, {0x402ea000}, {0x402ec000}, {0x402ee000}, {0x402f0000}, {0x402f2000}, {0x402f4000}, {0x402f6000}, {0x402f8000}, {0x402fa000}, {0x402fc000}, {0x402fe000}, {0x40300000}, {0x40302000}, {0x40304000}, {0x40306000}, {0x40308000}, {0x4030a000}, {0x4030c000}, {0x4030e000}, {0x40310000}, {0x40312000}, {0x40314000}, {0x40316000}, {0x40318000}, {0x4031a000}, {0x4031c000}, {0x4031e000}, {0x40320000}, {0x40322000}, {0x40324000}, {0x40326000}, {0x40328000}, {0x4032a000}, {0x4032c000}, {0x4032e000}, {0x40330000}, {0x40332000}, {0x40334000}, {0x40336000}, {0x40338000}, {0x4033a000}, {0x4033c000}, {0x4033e000}, {0x40340000}, {0x40342000}, {0x40344000}, {0x40346000}, {0x40348000}, {0x4034a000}, {0x4034c000}, {0x4034e000}, {0x40350000}, {0x40352000}, {0x40354000}, {0x40356000}, {0x40358000}, {0x4035a000}, {0x4035c000}, {0x4035e000}, {0x40360000}, {0x40362000}, {0x40364000}, {0x40366000}, {0x40368000}, {0x4036a000}, {0x4036c000}, {0x4036e000}, {0x40370000}, {0x40372000}, {0x40374000}, {0x40376000}, {0x40378000}, {0x4037a000}, {0x4037c000}, {0x4037e000}, {0x40380000}, {0x40382000}, {0x40384000}, {0x40386000}, {0x40388000}, {0x4038a000}, {0x4038c000}, {0x4038e000}, {0x40390000}, {0x40392000}, {0x40394000}, {0x40396000}, {0x40398000}, {0x4039a000}, {0x4039c000}, {0x4039e000}, {0x403a0000}, {0x403a2000}, {0x403a4000}, {0x403a6000}, {0x403a8000}, {0x403aa000}, {0x403ac000}, {0x403ae000}, {0x403b0000}, {0x403b2000}, {0x403b4000}, {0x403b6000}, {0x403b8000}, {0x403ba000}, {0x403bc000}, {0x403be000}, {0x403c0000}, {0x403c2000}, {0x403c4000}, {0x403c6000}, {0x403c8000}, {0x403ca000}, {0x403cc000}, {0x403ce000}, {0x403d0000}, {0x403d2000}, {0x403d4000}, {0x403d6000}, {0x403d8000}, {0x403da000}, {0x403dc000}, {0x403de000}, {0x403e0000}, {0x403e2000}, {0x403e4000}, {0x403e6000}, {0x403e8000}, {0x403ea000}, {0x403ec000}, {0x403ee000}, {0x403f0000}, {0x403f2000}, {0x403f4000}, {0x403f6000}, {0x403f8000}, {0x403fa000}, {0x403fc000}, {0x403fe000}, {0x40400000}, {0x40402000}, {0x40404000}, {0x40406000}, {0x40408000}, {0x4040a000}, {0x4040c000}, {0x4040e000}, {0x40410000}, {0x40412000}, {0x40414000}, {0x40416000}, {0x40418000}, {0x4041a000}, {0x4041c000}, {0x4041e000}, {0x40420000}, {0x40422000}, {0x40424000}, {0x40426000}, {0x40428000}, {0x4042a000}, {0x4042c000}, {0x4042e000}, {0x40430000}, {0x40432000}, {0x40434000}, {0x40436000}, {0x40438000}, {0x4043a000}, {0x4043c000}, {0x4043e000}, {0x40440000}, {0x40442000}, {0x40444000}, {0x40446000}, {0x40448000}, {0x4044a000}, {0x4044c000}, {0x4044e000}, {0x40450000}, {0x40452000}, {0x40454000}, {0x40456000}, {0x40458000}, {0x4045a000}, {0x4045c000}, {0x4045e000}, {0x40460000}, {0x40462000}, {0x40464000}, {0x40466000}, {0x40468000}, {0x4046a000}, {0x4046c000}, {0x4046e000}, {0x40470000}, {0x40472000}, {0x40474000}, {0x40476000}, {0x40478000}, {0x4047a000}, {0x4047c000}, {0x4047e000}, {0x40480000}, {0x40482000}, {0x40484000}, {0x40486000}, {0x40488000}, {0x4048a000}, {0x4048c000}, {0x4048e000}, {0x40490000}, {0x40492000}, {0x40494000}, {0x40496000}, {0x40498000}, {0x4049a000}, {0x4049c000}, {0x4049e000}, {0x404a0000}, {0x404a2000}, {0x404a4000}, {0x404a6000}, {0x404a8000}, {0x404aa000}, {0x404ac000}, {0x404ae000}, {0x404b0000}, {0x404b2000}, {0x404b4000}, {0x404b6000}, {0x404b8000}, {0x404ba000}, {0x404bc000}, {0x404be000}, {0x404c0000}, {0x404c2000}, {0x404c4000}, {0x404c6000}, {0x404c8000}, {0x404ca000}, {0x404cc000}, {0x404ce000}, {0x404d0000}, {0x404d2000}, {0x404d4000}, {0x404d6000}, {0x404d8000}, {0x404da000}, {0x404dc000}, {0x404de000}, {0x404e0000}, {0x404e2000}, {0x404e4000}, {0x404e6000}, {0x404e8000}, {0x404ea000}, {0x404ec000}, {0x404ee000}, {0x404f0000}, {0x404f2000}, {0x404f4000}, {0x404f6000}, {0x404f8000}, {0x404fa000}, {0x404fc000}, {0x404fe000}, {0x40500000}, {0x40502000}, {0x40504000}, {0x40506000}, {0x40508000}, {0x4050a000}, {0x4050c000}, {0x4050e000}, {0x40510000}, {0x40512000}, {0x40514000}, {0x40516000}, {0x40518000}, {0x4051a000}, {0x4051c000}, {0x4051e000}, {0x40520000}, {0x40522000}, {0x40524000}, {0x40526000}, {0x40528000}, {0x4052a000}, {0x4052c000}, {0x4052e000}, {0x40530000}, {0x40532000}, {0x40534000}, {0x40536000}, {0x40538000}, {0x4053a000}, {0x4053c000}, {0x4053e000}, {0x40540000}, {0x40542000}, {0x40544000}, {0x40546000}, {0x40548000}, {0x4054a000}, {0x4054c000}, {0x4054e000}, {0x40550000}, {0x40552000}, {0x40554000}, {0x40556000}, {0x40558000}, {0x4055a000}, {0x4055c000}, {0x4055e000}, {0x40560000}, {0x40562000}, {0x40564000}, {0x40566000}, {0x40568000}, {0x4056a000}, {0x4056c000}, {0x4056e000}, {0x40570000}, {0x40572000}, {0x40574000}, {0x40576000}, {0x40578000}, {0x4057a000}, {0x4057c000}, {0x4057e000}, {0x40580000}, {0x40582000}, {0x40584000}, {0x40586000}, {0x40588000}, {0x4058a000}, {0x4058c000}, {0x4058e000}, {0x40590000}, {0x40592000}, {0x40594000}, {0x40596000}, {0x40598000}, {0x4059a000}, {0x4059c000}, {0x4059e000}, {0x405a0000}, {0x405a2000}, {0x405a4000}, {0x405a6000}, {0x405a8000}, {0x405aa000}, {0x405ac000}, {0x405ae000}, {0x405b0000}, {0x405b2000}, {0x405b4000}, {0x405b6000}, {0x405b8000}, {0x405ba000}, {0x405bc000}, {0x405be000}, {0x405c0000}, {0x405c2000}, {0x405c4000}, {0x405c6000}, {0x405c8000}, {0x405ca000}, {0x405cc000}, {0x405ce000}, {0x405d0000}, {0x405d2000}, {0x405d4000}, {0x405d6000}, {0x405d8000}, {0x405da000}, {0x405dc000}, {0x405de000}, {0x405e0000}, {0x405e2000}, {0x405e4000}, {0x405e6000}, {0x405e8000}, {0x405ea000}, {0x405ec000}, {0x405ee000}, {0x405f0000}, {0x405f2000}, {0x405f4000}, {0x405f6000}, {0x405f8000}, {0x405fa000}, {0x405fc000}, {0x405fe000}, {0x40600000}, {0x40602000}, {0x40604000}, {0x40606000}, {0x40608000}, {0x4060a000}, {0x4060c000}, {0x4060e000}, {0x40610000}, {0x40612000}, {0x40614000}, {0x40616000}, {0x40618000}, {0x4061a000}, {0x4061c000}, {0x4061e000}, {0x40620000}, {0x40622000}, {0x40624000}, {0x40626000}, {0x40628000}, {0x4062a000}, {0x4062c000}, {0x4062e000}, {0x40630000}, {0x40632000}, {0x40634000}, {0x40636000}, {0x40638000}, {0x4063a000}, {0x4063c000}, {0x4063e000}, {0x40640000}, {0x40642000}, {0x40644000}, {0x40646000}, {0x40648000}, {0x4064a000}, {0x4064c000}, {0x4064e000}, {0x40650000}, {0x40652000}, {0x40654000}, {0x40656000}, {0x40658000}, {0x4065a000}, {0x4065c000}, {0x4065e000}, {0x40660000}, {0x40662000}, {0x40664000}, {0x40666000}, {0x40668000}, {0x4066a000}, {0x4066c000}, {0x4066e000}, {0x40670000}, {0x40672000}, {0x40674000}, {0x40676000}, {0x40678000}, {0x4067a000}, {0x4067c000}, {0x4067e000}, {0x40680000}, {0x40682000}, {0x40684000}, {0x40686000}, {0x40688000}, {0x4068a000}, {0x4068c000}, {0x4068e000}, {0x40690000}, {0x40692000}, {0x40694000}, {0x40696000}, {0x40698000}, {0x4069a000}, {0x4069c000}, {0x4069e000}, {0x406a0000}, {0x406a2000}, {0x406a4000}, {0x406a6000}, {0x406a8000}, {0x406aa000}, {0x406ac000}, {0x406ae000}, {0x406b0000}, {0x406b2000}, {0x406b4000}, {0x406b6000}, {0x406b8000}, {0x406ba000}, {0x406bc000}, {0x406be000}, {0x406c0000}, {0x406c2000}, {0x406c4000}, {0x406c6000}, {0x406c8000}, {0x406ca000}, {0x406cc000}, {0x406ce000}, {0x406d0000}, {0x406d2000}, {0x406d4000}, {0x406d6000}, {0x406d8000}, {0x406da000}, {0x406dc000}, {0x406de000}, {0x406e0000}, {0x406e2000}, {0x406e4000}, {0x406e6000}, {0x406e8000}, {0x406ea000}, {0x406ec000}, {0x406ee000}, {0x406f0000}, {0x406f2000}, {0x406f4000}, {0x406f6000}, {0x406f8000}, {0x406fa000}, {0x406fc000}, {0x406fe000}, {0x40700000}, {0x40702000}, {0x40704000}, {0x40706000}, {0x40708000}, {0x4070a000}, {0x4070c000}, {0x4070e000}, {0x40710000}, {0x40712000}, {0x40714000}, {0x40716000}, {0x40718000}, {0x4071a000}, {0x4071c000}, {0x4071e000}, {0x40720000}, {0x40722000}, {0x40724000}, {0x40726000}, {0x40728000}, {0x4072a000}, {0x4072c000}, {0x4072e000}, {0x40730000}, {0x40732000}, {0x40734000}, {0x40736000}, {0x40738000}, {0x4073a000}, {0x4073c000}, {0x4073e000}, {0x40740000}, {0x40742000}, {0x40744000}, {0x40746000}, {0x40748000}, {0x4074a000}, {0x4074c000}, {0x4074e000}, {0x40750000}, {0x40752000}, {0x40754000}, {0x40756000}, {0x40758000}, {0x4075a000}, {0x4075c000}, {0x4075e000}, {0x40760000}, {0x40762000}, {0x40764000}, {0x40766000}, {0x40768000}, {0x4076a000}, {0x4076c000}, {0x4076e000}, {0x40770000}, {0x40772000}, {0x40774000}, {0x40776000}, {0x40778000}, {0x4077a000}, {0x4077c000}, {0x4077e000}, {0x40780000}, {0x40782000}, {0x40784000}, {0x40786000}, {0x40788000}, {0x4078a000}, {0x4078c000}, {0x4078e000}, {0x40790000}, {0x40792000}, {0x40794000}, {0x40796000}, {0x40798000}, {0x4079a000}, {0x4079c000}, {0x4079e000}, {0x407a0000}, {0x407a2000}, {0x407a4000}, {0x407a6000}, {0x407a8000}, {0x407aa000}, {0x407ac000}, {0x407ae000}, {0x407b0000}, {0x407b2000}, {0x407b4000}, {0x407b6000}, {0x407b8000}, {0x407ba000}, {0x407bc000}, {0x407be000}, {0x407c0000}, {0x407c2000}, {0x407c4000}, {0x407c6000}, {0x407c8000}, {0x407ca000}, {0x407cc000}, {0x407ce000}, {0x407d0000}, {0x407d2000}, {0x407d4000}, {0x407d6000}, {0x407d8000}, {0x407da000}, {0x407dc000}, {0x407de000}, {0x407e0000}, {0x407e2000}, {0x407e4000}, {0x407e6000}, {0x407e8000}, {0x407ea000}, {0x407ec000}, {0x407ee000}, {0x407f0000}, {0x407f2000}, {0x407f4000}, {0x407f6000}, {0x407f8000}, {0x407fa000}, {0x407fc000}, {0x407fe000}, {0x40800000}, {0x40802000}, {0x40804000}, {0x40806000}, {0x40808000}, {0x4080a000}, {0x4080c000}, {0x4080e000}, {0x40810000}, {0x40812000}, {0x40814000}, {0x40816000}, {0x40818000}, {0x4081a000}, {0x4081c000}, {0x4081e000}, {0x40820000}, {0x40822000}, {0x40824000}, {0x40826000}, {0x40828000}, {0x4082a000}, {0x4082c000}, {0x4082e000}, {0x40830000}, {0x40832000}, {0x40834000}, {0x40836000}, {0x40838000}, {0x4083a000}, {0x4083c000}, {0x4083e000}, {0x40840000}, {0x40842000}, {0x40844000}, {0x40846000}, {0x40848000}, {0x4084a000}, {0x4084c000}, {0x4084e000}, {0x40850000}, {0x40852000}, {0x40854000}, {0x40856000}, {0x40858000}, {0x4085a000}, {0x4085c000}, {0x4085e000}, {0x40860000}, {0x40862000}, {0x40864000}, {0x40866000}, {0x40868000}, {0x4086a000}, {0x4086c000}, {0x4086e000}, {0x40870000}, {0x40872000}, {0x40874000}, {0x40876000}, {0x40878000}, {0x4087a000}, {0x4087c000}, {0x4087e000}, {0x40880000}, {0x40882000}, {0x40884000}, {0x40886000}, {0x40888000}, {0x4088a000}, {0x4088c000}, {0x4088e000}, {0x40890000}, {0x40892000}, {0x40894000}, {0x40896000}, {0x40898000}, {0x4089a000}, {0x4089c000}, {0x4089e000}, {0x408a0000}, {0x408a2000}, {0x408a4000}, {0x408a6000}, {0x408a8000}, {0x408aa000}, {0x408ac000}, {0x408ae000}, {0x408b0000}, {0x408b2000}, {0x408b4000}, {0x408b6000}, {0x408b8000}, {0x408ba000}, {0x408bc000}, {0x408be000}, {0x408c0000}, {0x408c2000}, {0x408c4000}, {0x408c6000}, {0x408c8000}, {0x408ca000}, {0x408cc000}, {0x408ce000}, {0x408d0000}, {0x408d2000}, {0x408d4000}, {0x408d6000}, {0x408d8000}, {0x408da000}, {0x408dc000}, {0x408de000}, {0x408e0000}, {0x408e2000}, {0x408e4000}, {0x408e6000}, {0x408e8000}, {0x408ea000}, {0x408ec000}, {0x408ee000}, {0x408f0000}, {0x408f2000}, {0x408f4000}, {0x408f6000}, {0x408f8000}, {0x408fa000}, {0x408fc000}, {0x408fe000}, {0x40900000}, {0x40902000}, {0x40904000}, {0x40906000}, {0x40908000}, {0x4090a000}, {0x4090c000}, {0x4090e000}, {0x40910000}, {0x40912000}, {0x40914000}, {0x40916000}, {0x40918000}, {0x4091a000}, {0x4091c000}, {0x4091e000}, {0x40920000}, {0x40922000}, {0x40924000}, {0x40926000}, {0x40928000}, {0x4092a000}, {0x4092c000}, {0x4092e000}, {0x40930000}, {0x40932000}, {0x40934000}, {0x40936000}, {0x40938000}, {0x4093a000}, {0x4093c000}, {0x4093e000}, {0x40940000}, {0x40942000}, {0x40944000}, {0x40946000}, {0x40948000}, {0x4094a000}, {0x4094c000}, {0x4094e000}, {0x40950000}, {0x40952000}, {0x40954000}, {0x40956000}, {0x40958000}, {0x4095a000}, {0x4095c000}, {0x4095e000}, {0x40960000}, {0x40962000}, {0x40964000}, {0x40966000}, {0x40968000}, {0x4096a000}, {0x4096c000}, {0x4096e000}, {0x40970000}, {0x40972000}, {0x40974000}, {0x40976000}, {0x40978000}, {0x4097a000}, {0x4097c000}, {0x4097e000}, {0x40980000}, {0x40982000}, {0x40984000}, {0x40986000}, {0x40988000}, {0x4098a000}, {0x4098c000}, {0x4098e000}, {0x40990000}, {0x40992000}, {0x40994000}, {0x40996000}, {0x40998000}, {0x4099a000}, {0x4099c000}, {0x4099e000}, {0x409a0000}, {0x409a2000}, {0x409a4000}, {0x409a6000}, {0x409a8000}, {0x409aa000}, {0x409ac000}, {0x409ae000}, {0x409b0000}, {0x409b2000}, {0x409b4000}, {0x409b6000}, {0x409b8000}, {0x409ba000}, {0x409bc000}, {0x409be000}, {0x409c0000}, {0x409c2000}, {0x409c4000}, {0x409c6000}, {0x409c8000}, {0x409ca000}, {0x409cc000}, {0x409ce000}, {0x409d0000}, {0x409d2000}, {0x409d4000}, {0x409d6000}, {0x409d8000}, {0x409da000}, {0x409dc000}, {0x409de000}, {0x409e0000}, {0x409e2000}, {0x409e4000}, {0x409e6000}, {0x409e8000}, {0x409ea000}, {0x409ec000}, {0x409ee000}, {0x409f0000}, {0x409f2000}, {0x409f4000}, {0x409f6000}, {0x409f8000}, {0x409fa000}, {0x409fc000}, {0x409fe000}, {0x40a00000}, {0x40a02000}, {0x40a04000}, {0x40a06000}, {0x40a08000}, {0x40a0a000}, {0x40a0c000}, {0x40a0e000}, {0x40a10000}, {0x40a12000}, {0x40a14000}, {0x40a16000}, {0x40a18000}, {0x40a1a000}, {0x40a1c000}, {0x40a1e000}, {0x40a20000}, {0x40a22000}, {0x40a24000}, {0x40a26000}, {0x40a28000}, {0x40a2a000}, {0x40a2c000}, {0x40a2e000}, {0x40a30000}, {0x40a32000}, {0x40a34000}, {0x40a36000}, {0x40a38000}, {0x40a3a000}, {0x40a3c000}, {0x40a3e000}, {0x40a40000}, {0x40a42000}, {0x40a44000}, {0x40a46000}, {0x40a48000}, {0x40a4a000}, {0x40a4c000}, {0x40a4e000}, {0x40a50000}, {0x40a52000}, {0x40a54000}, {0x40a56000}, {0x40a58000}, {0x40a5a000}, {0x40a5c000}, {0x40a5e000}, {0x40a60000}, {0x40a62000}, {0x40a64000}, {0x40a66000}, {0x40a68000}, {0x40a6a000}, {0x40a6c000}, {0x40a6e000}, {0x40a70000}, {0x40a72000}, {0x40a74000}, {0x40a76000}, {0x40a78000}, {0x40a7a000}, {0x40a7c000}, {0x40a7e000}, {0x40a80000}, {0x40a82000}, {0x40a84000}, {0x40a86000}, {0x40a88000}, {0x40a8a000}, {0x40a8c000}, {0x40a8e000}, {0x40a90000}, {0x40a92000}, {0x40a94000}, {0x40a96000}, {0x40a98000}, {0x40a9a000}, {0x40a9c000}, {0x40a9e000}, {0x40aa0000}, {0x40aa2000}, {0x40aa4000}, {0x40aa6000}, {0x40aa8000}, {0x40aaa000}, {0x40aac000}, {0x40aae000}, {0x40ab0000}, {0x40ab2000}, {0x40ab4000}, {0x40ab6000}, {0x40ab8000}, {0x40aba000}, {0x40abc000}, {0x40abe000}, {0x40ac0000}, {0x40ac2000}, {0x40ac4000}, {0x40ac6000}, {0x40ac8000}, {0x40aca000}, {0x40acc000}, {0x40ace000}, {0x40ad0000}, {0x40ad2000}, {0x40ad4000}, {0x40ad6000}, {0x40ad8000}, {0x40ada000}, {0x40adc000}, {0x40ade000}, {0x40ae0000}, {0x40ae2000}, {0x40ae4000}, {0x40ae6000}, {0x40ae8000}, {0x40aea000}, {0x40aec000}, {0x40aee000}, {0x40af0000}, {0x40af2000}, {0x40af4000}, {0x40af6000}, {0x40af8000}, {0x40afa000}, {0x40afc000}, {0x40afe000}, {0x40b00000}, {0x40b02000}, {0x40b04000}, {0x40b06000}, {0x40b08000}, {0x40b0a000}, {0x40b0c000}, {0x40b0e000}, {0x40b10000}, {0x40b12000}, {0x40b14000}, {0x40b16000}, {0x40b18000}, {0x40b1a000}, {0x40b1c000}, {0x40b1e000}, {0x40b20000}, {0x40b22000}, {0x40b24000}, {0x40b26000}, {0x40b28000}, {0x40b2a000}, {0x40b2c000}, {0x40b2e000}, {0x40b30000}, {0x40b32000}, {0x40b34000}, {0x40b36000}, {0x40b38000}, {0x40b3a000}, {0x40b3c000}, {0x40b3e000}, {0x40b40000}, {0x40b42000}, {0x40b44000}, {0x40b46000}, {0x40b48000}, {0x40b4a000}, {0x40b4c000}, {0x40b4e000}, {0x40b50000}, {0x40b52000}, {0x40b54000}, {0x40b56000}, {0x40b58000}, {0x40b5a000}, {0x40b5c000}, {0x40b5e000}, {0x40b60000}, {0x40b62000}, {0x40b64000}, {0x40b66000}, {0x40b68000}, {0x40b6a000}, {0x40b6c000}, {0x40b6e000}, {0x40b70000}, {0x40b72000}, {0x40b74000}, {0x40b76000}, {0x40b78000}, {0x40b7a000}, {0x40b7c000}, {0x40b7e000}, {0x40b80000}, {0x40b82000}, {0x40b84000}, {0x40b86000}, {0x40b88000}, {0x40b8a000}, {0x40b8c000}, {0x40b8e000}, {0x40b90000}, {0x40b92000}, {0x40b94000}, {0x40b96000}, {0x40b98000}, {0x40b9a000}, {0x40b9c000}, {0x40b9e000}, {0x40ba0000}, {0x40ba2000}, {0x40ba4000}, {0x40ba6000}, {0x40ba8000}, {0x40baa000}, {0x40bac000}, {0x40bae000}, {0x40bb0000}, {0x40bb2000}, {0x40bb4000}, {0x40bb6000}, {0x40bb8000}, {0x40bba000}, {0x40bbc000}, {0x40bbe000}, {0x40bc0000}, {0x40bc2000}, {0x40bc4000}, {0x40bc6000}, {0x40bc8000}, {0x40bca000}, {0x40bcc000}, {0x40bce000}, {0x40bd0000}, {0x40bd2000}, {0x40bd4000}, {0x40bd6000}, {0x40bd8000}, {0x40bda000}, {0x40bdc000}, {0x40bde000}, {0x40be0000}, {0x40be2000}, {0x40be4000}, {0x40be6000}, {0x40be8000}, {0x40bea000}, {0x40bec000}, {0x40bee000}, {0x40bf0000}, {0x40bf2000}, {0x40bf4000}, {0x40bf6000}, {0x40bf8000}, {0x40bfa000}, {0x40bfc000}, {0x40bfe000}, {0x40c00000}, {0x40c02000}, {0x40c04000}, {0x40c06000}, {0x40c08000}, {0x40c0a000}, {0x40c0c000}, {0x40c0e000}, {0x40c10000}, {0x40c12000}, {0x40c14000}, {0x40c16000}, {0x40c18000}, {0x40c1a000}, {0x40c1c000}, {0x40c1e000}, {0x40c20000}, {0x40c22000}, {0x40c24000}, {0x40c26000}, {0x40c28000}, {0x40c2a000}, {0x40c2c000}, {0x40c2e000}, {0x40c30000}, {0x40c32000}, {0x40c34000}, {0x40c36000}, {0x40c38000}, {0x40c3a000}, {0x40c3c000}, {0x40c3e000}, {0x40c40000}, {0x40c42000}, {0x40c44000}, {0x40c46000}, {0x40c48000}, {0x40c4a000}, {0x40c4c000}, {0x40c4e000}, {0x40c50000}, {0x40c52000}, {0x40c54000}, {0x40c56000}, {0x40c58000}, {0x40c5a000}, {0x40c5c000}, {0x40c5e000}, {0x40c60000}, {0x40c62000}, {0x40c64000}, {0x40c66000}, {0x40c68000}, {0x40c6a000}, {0x40c6c000}, {0x40c6e000}, {0x40c70000}, {0x40c72000}, {0x40c74000}, {0x40c76000}, {0x40c78000}, {0x40c7a000}, {0x40c7c000}, {0x40c7e000}, {0x40c80000}, {0x40c82000}, {0x40c84000}, {0x40c86000}, {0x40c88000}, {0x40c8a000}, {0x40c8c000}, {0x40c8e000}, {0x40c90000}, {0x40c92000}, {0x40c94000}, {0x40c96000}, {0x40c98000}, {0x40c9a000}, {0x40c9c000}, {0x40c9e000}, {0x40ca0000}, {0x40ca2000}, {0x40ca4000}, {0x40ca6000}, {0x40ca8000}, {0x40caa000}, {0x40cac000}, {0x40cae000}, {0x40cb0000}, {0x40cb2000}, {0x40cb4000}, {0x40cb6000}, {0x40cb8000}, {0x40cba000}, {0x40cbc000}, {0x40cbe000}, {0x40cc0000}, {0x40cc2000}, {0x40cc4000}, {0x40cc6000}, {0x40cc8000}, {0x40cca000}, {0x40ccc000}, {0x40cce000}, {0x40cd0000}, {0x40cd2000}, {0x40cd4000}, {0x40cd6000}, {0x40cd8000}, {0x40cda000}, {0x40cdc000}, {0x40cde000}, {0x40ce0000}, {0x40ce2000}, {0x40ce4000}, {0x40ce6000}, {0x40ce8000}, {0x40cea000}, {0x40cec000}, {0x40cee000}, {0x40cf0000}, {0x40cf2000}, {0x40cf4000}, {0x40cf6000}, {0x40cf8000}, {0x40cfa000}, {0x40cfc000}, {0x40cfe000}, {0x40d00000}, {0x40d02000}, {0x40d04000}, {0x40d06000}, {0x40d08000}, {0x40d0a000}, {0x40d0c000}, {0x40d0e000}, {0x40d10000}, {0x40d12000}, {0x40d14000}, {0x40d16000}, {0x40d18000}, {0x40d1a000}, {0x40d1c000}, {0x40d1e000}, {0x40d20000}, {0x40d22000}, {0x40d24000}, {0x40d26000}, {0x40d28000}, {0x40d2a000}, {0x40d2c000}, {0x40d2e000}, {0x40d30000}, {0x40d32000}, {0x40d34000}, {0x40d36000}, {0x40d38000}, {0x40d3a000}, {0x40d3c000}, {0x40d3e000}, {0x40d40000}, {0x40d42000}, {0x40d44000}, {0x40d46000}, {0x40d48000}, {0x40d4a000}, {0x40d4c000}, {0x40d4e000}, {0x40d50000}, {0x40d52000}, {0x40d54000}, {0x40d56000}, {0x40d58000}, {0x40d5a000}, {0x40d5c000}, {0x40d5e000}, {0x40d60000}, {0x40d62000}, {0x40d64000}, {0x40d66000}, {0x40d68000}, {0x40d6a000}, {0x40d6c000}, {0x40d6e000}, {0x40d70000}, {0x40d72000}, {0x40d74000}, {0x40d76000}, {0x40d78000}, {0x40d7a000}, {0x40d7c000}, {0x40d7e000}, {0x40d80000}, {0x40d82000}, {0x40d84000}, {0x40d86000}, {0x40d88000}, {0x40d8a000}, {0x40d8c000}, {0x40d8e000}, {0x40d90000}, {0x40d92000}, {0x40d94000}, {0x40d96000}, {0x40d98000}, {0x40d9a000}, {0x40d9c000}, {0x40d9e000}, {0x40da0000}, {0x40da2000}, {0x40da4000}, {0x40da6000}, {0x40da8000}, {0x40daa000}, {0x40dac000}, {0x40dae000}, {0x40db0000}, {0x40db2000}, {0x40db4000}, {0x40db6000}, {0x40db8000}, {0x40dba000}, {0x40dbc000}, {0x40dbe000}, {0x40dc0000}, {0x40dc2000}, {0x40dc4000}, {0x40dc6000}, {0x40dc8000}, {0x40dca000}, {0x40dcc000}, {0x40dce000}, {0x40dd0000}, {0x40dd2000}, {0x40dd4000}, {0x40dd6000}, {0x40dd8000}, {0x40dda000}, {0x40ddc000}, {0x40dde000}, {0x40de0000}, {0x40de2000}, {0x40de4000}, {0x40de6000}, {0x40de8000}, {0x40dea000}, {0x40dec000}, {0x40dee000}, {0x40df0000}, {0x40df2000}, {0x40df4000}, {0x40df6000}, {0x40df8000}, {0x40dfa000}, {0x40dfc000}, {0x40dfe000}, {0x40e00000}, {0x40e02000}, {0x40e04000}, {0x40e06000}, {0x40e08000}, {0x40e0a000}, {0x40e0c000}, {0x40e0e000}, {0x40e10000}, {0x40e12000}, {0x40e14000}, {0x40e16000}, {0x40e18000}, {0x40e1a000}, {0x40e1c000}, {0x40e1e000}, {0x40e20000}, {0x40e22000}, {0x40e24000}, {0x40e26000}, {0x40e28000}, {0x40e2a000}, {0x40e2c000}, {0x40e2e000}, {0x40e30000}, {0x40e32000}, {0x40e34000}, {0x40e36000}, {0x40e38000}, {0x40e3a000}, {0x40e3c000}, {0x40e3e000}, {0x40e40000}, {0x40e42000}, {0x40e44000}, {0x40e46000}, {0x40e48000}, {0x40e4a000}, {0x40e4c000}, {0x40e4e000}, {0x40e50000}, {0x40e52000}, {0x40e54000}, {0x40e56000}, {0x40e58000}, {0x40e5a000}, {0x40e5c000}, {0x40e5e000}, {0x40e60000}, {0x40e62000}, {0x40e64000}, {0x40e66000}, {0x40e68000}, {0x40e6a000}, {0x40e6c000}, {0x40e6e000}, {0x40e70000}, {0x40e72000}, {0x40e74000}, {0x40e76000}, {0x40e78000}, {0x40e7a000}, {0x40e7c000}, {0x40e7e000}, {0x40e80000}, {0x40e82000}, {0x40e84000}, {0x40e86000}, {0x40e88000}, {0x40e8a000}, {0x40e8c000}, {0x40e8e000}, {0x40e90000}, {0x40e92000}, {0x40e94000}, {0x40e96000}, {0x40e98000}, {0x40e9a000}, {0x40e9c000}, {0x40e9e000}, {0x40ea0000}, {0x40ea2000}, {0x40ea4000}, {0x40ea6000}, {0x40ea8000}, {0x40eaa000}, {0x40eac000}, {0x40eae000}, {0x40eb0000}, {0x40eb2000}, {0x40eb4000}, {0x40eb6000}, {0x40eb8000}, {0x40eba000}, {0x40ebc000}, {0x40ebe000}, {0x40ec0000}, {0x40ec2000}, {0x40ec4000}, {0x40ec6000}, {0x40ec8000}, {0x40eca000}, {0x40ecc000}, {0x40ece000}, {0x40ed0000}, {0x40ed2000}, {0x40ed4000}, {0x40ed6000}, {0x40ed8000}, {0x40eda000}, {0x40edc000}, {0x40ede000}, {0x40ee0000}, {0x40ee2000}, {0x40ee4000}, {0x40ee6000}, {0x40ee8000}, {0x40eea000}, {0x40eec000}, {0x40eee000}, {0x40ef0000}, {0x40ef2000}, {0x40ef4000}, {0x40ef6000}, {0x40ef8000}, {0x40efa000}, {0x40efc000}, {0x40efe000}, {0x40f00000}, {0x40f02000}, {0x40f04000}, {0x40f06000}, {0x40f08000}, {0x40f0a000}, {0x40f0c000}, {0x40f0e000}, {0x40f10000}, {0x40f12000}, {0x40f14000}, {0x40f16000}, {0x40f18000}, {0x40f1a000}, {0x40f1c000}, {0x40f1e000}, {0x40f20000}, {0x40f22000}, {0x40f24000}, {0x40f26000}, {0x40f28000}, {0x40f2a000}, {0x40f2c000}, {0x40f2e000}, {0x40f30000}, {0x40f32000}, {0x40f34000}, {0x40f36000}, {0x40f38000}, {0x40f3a000}, {0x40f3c000}, {0x40f3e000}, {0x40f40000}, {0x40f42000}, {0x40f44000}, {0x40f46000}, {0x40f48000}, {0x40f4a000}, {0x40f4c000}, {0x40f4e000}, {0x40f50000}, {0x40f52000}, {0x40f54000}, {0x40f56000}, {0x40f58000}, {0x40f5a000}, {0x40f5c000}, {0x40f5e000}, {0x40f60000}, {0x40f62000}, {0x40f64000}, {0x40f66000}, {0x40f68000}, {0x40f6a000}, {0x40f6c000}, {0x40f6e000}, {0x40f70000}, {0x40f72000}, {0x40f74000}, {0x40f76000}, {0x40f78000}, {0x40f7a000}, {0x40f7c000}, {0x40f7e000}, {0x40f80000}, {0x40f82000}, {0x40f84000}, {0x40f86000}, {0x40f88000}, {0x40f8a000}, {0x40f8c000}, {0x40f8e000}, {0x40f90000}, {0x40f92000}, {0x40f94000}, {0x40f96000}, {0x40f98000}, {0x40f9a000}, {0x40f9c000}, {0x40f9e000}, {0x40fa0000}, {0x40fa2000}, {0x40fa4000}, {0x40fa6000}, {0x40fa8000}, {0x40faa000}, {0x40fac000}, {0x40fae000}, {0x40fb0000}, {0x40fb2000}, {0x40fb4000}, {0x40fb6000}, {0x40fb8000}, {0x40fba000}, {0x40fbc000}, {0x40fbe000}, {0x40fc0000}, {0x40fc2000}, {0x40fc4000}, {0x40fc6000}, {0x40fc8000}, {0x40fca000}, {0x40fcc000}, {0x40fce000}, {0x40fd0000}, {0x40fd2000}, {0x40fd4000}, {0x40fd6000}, {0x40fd8000}, {0x40fda000}, {0x40fdc000}, {0x40fde000}, {0x40fe0000}, {0x40fe2000}, {0x40fe4000}, {0x40fe6000}, {0x40fe8000}, {0x40fea000}, {0x40fec000}, {0x40fee000}, {0x40ff0000}, {0x40ff2000}, {0x40ff4000}, {0x40ff6000}, {0x40ff8000}, {0x40ffa000}, {0x40ffc000}, {0x40ffe000}, {0x41000000}, {0x41002000}, {0x41004000}, {0x41006000}, {0x41008000}, {0x4100a000}, {0x4100c000}, {0x4100e000}, {0x41010000}, {0x41012000}, {0x41014000}, {0x41016000}, {0x41018000}, {0x4101a000}, {0x4101c000}, {0x4101e000}, {0x41020000}, {0x41022000}, {0x41024000}, {0x41026000}, {0x41028000}, {0x4102a000}, {0x4102c000}, {0x4102e000}, {0x41030000}, {0x41032000}, {0x41034000}, {0x41036000}, {0x41038000}, {0x4103a000}, {0x4103c000}, {0x4103e000}, {0x41040000}, {0x41042000}, {0x41044000}, {0x41046000}, {0x41048000}, {0x4104a000}, {0x4104c000}, {0x4104e000}, {0x41050000}, {0x41052000}, {0x41054000}, {0x41056000}, {0x41058000}, {0x4105a000}, {0x4105c000}, {0x4105e000}, {0x41060000}, {0x41062000}, {0x41064000}, {0x41066000}, {0x41068000}, {0x4106a000}, {0x4106c000}, {0x4106e000}, {0x41070000}, {0x41072000}, {0x41074000}, {0x41076000}, {0x41078000}, {0x4107a000}, {0x4107c000}, {0x4107e000}, {0x41080000}, {0x41082000}, {0x41084000}, {0x41086000}, {0x41088000}, {0x4108a000}, {0x4108c000}, {0x4108e000}, {0x41090000}, {0x41092000}, {0x41094000}, {0x41096000}, {0x41098000}, {0x4109a000}, {0x4109c000}, {0x4109e000}, {0x410a0000}, {0x410a2000}, {0x410a4000}, {0x410a6000}, {0x410a8000}, {0x410aa000}, {0x410ac000}, {0x410ae000}, {0x410b0000}, {0x410b2000}, {0x410b4000}, {0x410b6000}, {0x410b8000}, {0x410ba000}, {0x410bc000}, {0x410be000}, {0x410c0000}, {0x410c2000}, {0x410c4000}, {0x410c6000}, {0x410c8000}, {0x410ca000}, {0x410cc000}, {0x410ce000}, {0x410d0000}, {0x410d2000}, {0x410d4000}, {0x410d6000}, {0x410d8000}, {0x410da000}, {0x410dc000}, {0x410de000}, {0x410e0000}, {0x410e2000}, {0x410e4000}, {0x410e6000}, {0x410e8000}, {0x410ea000}, {0x410ec000}, {0x410ee000}, {0x410f0000}, {0x410f2000}, {0x410f4000}, {0x410f6000}, {0x410f8000}, {0x410fa000}, {0x410fc000}, {0x410fe000}, {0x41100000}, {0x41102000}, {0x41104000}, {0x41106000}, {0x41108000}, {0x4110a000}, {0x4110c000}, {0x4110e000}, {0x41110000}, {0x41112000}, {0x41114000}, {0x41116000}, {0x41118000}, {0x4111a000}, {0x4111c000}, {0x4111e000}, {0x41120000}, {0x41122000}, {0x41124000}, {0x41126000}, {0x41128000}, {0x4112a000}, {0x4112c000}, {0x4112e000}, {0x41130000}, {0x41132000}, {0x41134000}, {0x41136000}, {0x41138000}, {0x4113a000}, {0x4113c000}, {0x4113e000}, {0x41140000}, {0x41142000}, {0x41144000}, {0x41146000}, {0x41148000}, {0x4114a000}, {0x4114c000}, {0x4114e000}, {0x41150000}, {0x41152000}, {0x41154000}, {0x41156000}, {0x41158000}, {0x4115a000}, {0x4115c000}, {0x4115e000}, {0x41160000}, {0x41162000}, {0x41164000}, {0x41166000}, {0x41168000}, {0x4116a000}, {0x4116c000}, {0x4116e000}, {0x41170000}, {0x41172000}, {0x41174000}, {0x41176000}, {0x41178000}, {0x4117a000}, {0x4117c000}, {0x4117e000}, {0x41180000}, {0x41182000}, {0x41184000}, {0x41186000}, {0x41188000}, {0x4118a000}, {0x4118c000}, {0x4118e000}, {0x41190000}, {0x41192000}, {0x41194000}, {0x41196000}, {0x41198000}, {0x4119a000}, {0x4119c000}, {0x4119e000}, {0x411a0000}, {0x411a2000}, {0x411a4000}, {0x411a6000}, {0x411a8000}, {0x411aa000}, {0x411ac000}, {0x411ae000}, {0x411b0000}, {0x411b2000}, {0x411b4000}, {0x411b6000}, {0x411b8000}, {0x411ba000}, {0x411bc000}, {0x411be000}, {0x411c0000}, {0x411c2000}, {0x411c4000}, {0x411c6000}, {0x411c8000}, {0x411ca000}, {0x411cc000}, {0x411ce000}, {0x411d0000}, {0x411d2000}, {0x411d4000}, {0x411d6000}, {0x411d8000}, {0x411da000}, {0x411dc000}, {0x411de000}, {0x411e0000}, {0x411e2000}, {0x411e4000}, {0x411e6000}, {0x411e8000}, {0x411ea000}, {0x411ec000}, {0x411ee000}, {0x411f0000}, {0x411f2000}, {0x411f4000}, {0x411f6000}, {0x411f8000}, {0x411fa000}, {0x411fc000}, {0x411fe000}, {0x41200000}, {0x41202000}, {0x41204000}, {0x41206000}, {0x41208000}, {0x4120a000}, {0x4120c000}, {0x4120e000}, {0x41210000}, {0x41212000}, {0x41214000}, {0x41216000}, {0x41218000}, {0x4121a000}, {0x4121c000}, {0x4121e000}, {0x41220000}, {0x41222000}, {0x41224000}, {0x41226000}, {0x41228000}, {0x4122a000}, {0x4122c000}, {0x4122e000}, {0x41230000}, {0x41232000}, {0x41234000}, {0x41236000}, {0x41238000}, {0x4123a000}, {0x4123c000}, {0x4123e000}, {0x41240000}, {0x41242000}, {0x41244000}, {0x41246000}, {0x41248000}, {0x4124a000}, {0x4124c000}, {0x4124e000}, {0x41250000}, {0x41252000}, {0x41254000}, {0x41256000}, {0x41258000}, {0x4125a000}, {0x4125c000}, {0x4125e000}, {0x41260000}, {0x41262000}, {0x41264000}, {0x41266000}, {0x41268000}, {0x4126a000}, {0x4126c000}, {0x4126e000}, {0x41270000}, {0x41272000}, {0x41274000}, {0x41276000}, {0x41278000}, {0x4127a000}, {0x4127c000}, {0x4127e000}, {0x41280000}, {0x41282000}, {0x41284000}, {0x41286000}, {0x41288000}, {0x4128a000}, {0x4128c000}, {0x4128e000}, {0x41290000}, {0x41292000}, {0x41294000}, {0x41296000}, {0x41298000}, {0x4129a000}, {0x4129c000}, {0x4129e000}, {0x412a0000}, {0x412a2000}, {0x412a4000}, {0x412a6000}, {0x412a8000}, {0x412aa000}, {0x412ac000}, {0x412ae000}, {0x412b0000}, {0x412b2000}, {0x412b4000}, {0x412b6000}, {0x412b8000}, {0x412ba000}, {0x412bc000}, {0x412be000}, {0x412c0000}, {0x412c2000}, {0x412c4000}, {0x412c6000}, {0x412c8000}, {0x412ca000}, {0x412cc000}, {0x412ce000}, {0x412d0000}, {0x412d2000}, {0x412d4000}, {0x412d6000}, {0x412d8000}, {0x412da000}, {0x412dc000}, {0x412de000}, {0x412e0000}, {0x412e2000}, {0x412e4000}, {0x412e6000}, {0x412e8000}, {0x412ea000}, {0x412ec000}, {0x412ee000}, {0x412f0000}, {0x412f2000}, {0x412f4000}, {0x412f6000}, {0x412f8000}, {0x412fa000}, {0x412fc000}, {0x412fe000}, {0x41300000}, {0x41302000}, {0x41304000}, {0x41306000}, {0x41308000}, {0x4130a000}, {0x4130c000}, {0x4130e000}, {0x41310000}, {0x41312000}, {0x41314000}, {0x41316000}, {0x41318000}, {0x4131a000}, {0x4131c000}, {0x4131e000}, {0x41320000}, {0x41322000}, {0x41324000}, {0x41326000}, {0x41328000}, {0x4132a000}, {0x4132c000}, {0x4132e000}, {0x41330000}, {0x41332000}, {0x41334000}, {0x41336000}, {0x41338000}, {0x4133a000}, {0x4133c000}, {0x4133e000}, {0x41340000}, {0x41342000}, {0x41344000}, {0x41346000}, {0x41348000}, {0x4134a000}, {0x4134c000}, {0x4134e000}, {0x41350000}, {0x41352000}, {0x41354000}, {0x41356000}, {0x41358000}, {0x4135a000}, {0x4135c000}, {0x4135e000}, {0x41360000}, {0x41362000}, {0x41364000}, {0x41366000}, {0x41368000}, {0x4136a000}, {0x4136c000}, {0x4136e000}, {0x41370000}, {0x41372000}, {0x41374000}, {0x41376000}, {0x41378000}, {0x4137a000}, {0x4137c000}, {0x4137e000}, {0x41380000}, {0x41382000}, {0x41384000}, {0x41386000}, {0x41388000}, {0x4138a000}, {0x4138c000}, {0x4138e000}, {0x41390000}, {0x41392000}, {0x41394000}, {0x41396000}, {0x41398000}, {0x4139a000}, {0x4139c000}, {0x4139e000}, {0x413a0000}, {0x413a2000}, {0x413a4000}, {0x413a6000}, {0x413a8000}, {0x413aa000}, {0x413ac000}, {0x413ae000}, {0x413b0000}, {0x413b2000}, {0x413b4000}, {0x413b6000}, {0x413b8000}, {0x413ba000}, {0x413bc000}, {0x413be000}, {0x413c0000}, {0x413c2000}, {0x413c4000}, {0x413c6000}, {0x413c8000}, {0x413ca000}, {0x413cc000}, {0x413ce000}, {0x413d0000}, {0x413d2000}, {0x413d4000}, {0x413d6000}, {0x413d8000}, {0x413da000}, {0x413dc000}, {0x413de000}, {0x413e0000}, {0x413e2000}, {0x413e4000}, {0x413e6000}, {0x413e8000}, {0x413ea000}, {0x413ec000}, {0x413ee000}, {0x413f0000}, {0x413f2000}, {0x413f4000}, {0x413f6000}, {0x413f8000}, {0x413fa000}, {0x413fc000}, {0x413fe000}, {0x41400000}, {0x41402000}, {0x41404000}, {0x41406000}, {0x41408000}, {0x4140a000}, {0x4140c000}, {0x4140e000}, {0x41410000}, {0x41412000}, {0x41414000}, {0x41416000}, {0x41418000}, {0x4141a000}, {0x4141c000}, {0x4141e000}, {0x41420000}, {0x41422000}, {0x41424000}, {0x41426000}, {0x41428000}, {0x4142a000}, {0x4142c000}, {0x4142e000}, {0x41430000}, {0x41432000}, {0x41434000}, {0x41436000}, {0x41438000}, {0x4143a000}, {0x4143c000}, {0x4143e000}, {0x41440000}, {0x41442000}, {0x41444000}, {0x41446000}, {0x41448000}, {0x4144a000}, {0x4144c000}, {0x4144e000}, {0x41450000}, {0x41452000}, {0x41454000}, {0x41456000}, {0x41458000}, {0x4145a000}, {0x4145c000}, {0x4145e000}, {0x41460000}, {0x41462000}, {0x41464000}, {0x41466000}, {0x41468000}, {0x4146a000}, {0x4146c000}, {0x4146e000}, {0x41470000}, {0x41472000}, {0x41474000}, {0x41476000}, {0x41478000}, {0x4147a000}, {0x4147c000}, {0x4147e000}, {0x41480000}, {0x41482000}, {0x41484000}, {0x41486000}, {0x41488000}, {0x4148a000}, {0x4148c000}, {0x4148e000}, {0x41490000}, {0x41492000}, {0x41494000}, {0x41496000}, {0x41498000}, {0x4149a000}, {0x4149c000}, {0x4149e000}, {0x414a0000}, {0x414a2000}, {0x414a4000}, {0x414a6000}, {0x414a8000}, {0x414aa000}, {0x414ac000}, {0x414ae000}, {0x414b0000}, {0x414b2000}, {0x414b4000}, {0x414b6000}, {0x414b8000}, {0x414ba000}, {0x414bc000}, {0x414be000}, {0x414c0000}, {0x414c2000}, {0x414c4000}, {0x414c6000}, {0x414c8000}, {0x414ca000}, {0x414cc000}, {0x414ce000}, {0x414d0000}, {0x414d2000}, {0x414d4000}, {0x414d6000}, {0x414d8000}, {0x414da000}, {0x414dc000}, {0x414de000}, {0x414e0000}, {0x414e2000}, {0x414e4000}, {0x414e6000}, {0x414e8000}, {0x414ea000}, {0x414ec000}, {0x414ee000}, {0x414f0000}, {0x414f2000}, {0x414f4000}, {0x414f6000}, {0x414f8000}, {0x414fa000}, {0x414fc000}, {0x414fe000}, {0x41500000}, {0x41502000}, {0x41504000}, {0x41506000}, {0x41508000}, {0x4150a000}, {0x4150c000}, {0x4150e000}, {0x41510000}, {0x41512000}, {0x41514000}, {0x41516000}, {0x41518000}, {0x4151a000}, {0x4151c000}, {0x4151e000}, {0x41520000}, {0x41522000}, {0x41524000}, {0x41526000}, {0x41528000}, {0x4152a000}, {0x4152c000}, {0x4152e000}, {0x41530000}, {0x41532000}, {0x41534000}, {0x41536000}, {0x41538000}, {0x4153a000}, {0x4153c000}, {0x4153e000}, {0x41540000}, {0x41542000}, {0x41544000}, {0x41546000}, {0x41548000}, {0x4154a000}, {0x4154c000}, {0x4154e000}, {0x41550000}, {0x41552000}, {0x41554000}, {0x41556000}, {0x41558000}, {0x4155a000}, {0x4155c000}, {0x4155e000}, {0x41560000}, {0x41562000}, {0x41564000}, {0x41566000}, {0x41568000}, {0x4156a000}, {0x4156c000}, {0x4156e000}, {0x41570000}, {0x41572000}, {0x41574000}, {0x41576000}, {0x41578000}, {0x4157a000}, {0x4157c000}, {0x4157e000}, {0x41580000}, {0x41582000}, {0x41584000}, {0x41586000}, {0x41588000}, {0x4158a000}, {0x4158c000}, {0x4158e000}, {0x41590000}, {0x41592000}, {0x41594000}, {0x41596000}, {0x41598000}, {0x4159a000}, {0x4159c000}, {0x4159e000}, {0x415a0000}, {0x415a2000}, {0x415a4000}, {0x415a6000}, {0x415a8000}, {0x415aa000}, {0x415ac000}, {0x415ae000}, {0x415b0000}, {0x415b2000}, {0x415b4000}, {0x415b6000}, {0x415b8000}, {0x415ba000}, {0x415bc000}, {0x415be000}, {0x415c0000}, {0x415c2000}, {0x415c4000}, {0x415c6000}, {0x415c8000}, {0x415ca000}, {0x415cc000}, {0x415ce000}, {0x415d0000}, {0x415d2000}, {0x415d4000}, {0x415d6000}, {0x415d8000}, {0x415da000}, {0x415dc000}, {0x415de000}, {0x415e0000}, {0x415e2000}, {0x415e4000}, {0x415e6000}, {0x415e8000}, {0x415ea000}, {0x415ec000}, {0x415ee000}, {0x415f0000}, {0x415f2000}, {0x415f4000}, {0x415f6000}, {0x415f8000}, {0x415fa000}, {0x415fc000}, {0x415fe000}, {0x41600000}, {0x41602000}, {0x41604000}, {0x41606000}, {0x41608000}, {0x4160a000}, {0x4160c000}, {0x4160e000}, {0x41610000}, {0x41612000}, {0x41614000}, {0x41616000}, {0x41618000}, {0x4161a000}, {0x4161c000}, {0x4161e000}, {0x41620000}, {0x41622000}, {0x41624000}, {0x41626000}, {0x41628000}, {0x4162a000}, {0x4162c000}, {0x4162e000}, {0x41630000}, {0x41632000}, {0x41634000}, {0x41636000}, {0x41638000}, {0x4163a000}, {0x4163c000}, {0x4163e000}, {0x41640000}, {0x41642000}, {0x41644000}, {0x41646000}, {0x41648000}, {0x4164a000}, {0x4164c000}, {0x4164e000}, {0x41650000}, {0x41652000}, {0x41654000}, {0x41656000}, {0x41658000}, {0x4165a000}, {0x4165c000}, {0x4165e000}, {0x41660000}, {0x41662000}, {0x41664000}, {0x41666000}, {0x41668000}, {0x4166a000}, {0x4166c000}, {0x4166e000}, {0x41670000}, {0x41672000}, {0x41674000}, {0x41676000}, {0x41678000}, {0x4167a000}, {0x4167c000}, {0x4167e000}, {0x41680000}, {0x41682000}, {0x41684000}, {0x41686000}, {0x41688000}, {0x4168a000}, {0x4168c000}, {0x4168e000}, {0x41690000}, {0x41692000}, {0x41694000}, {0x41696000}, {0x41698000}, {0x4169a000}, {0x4169c000}, {0x4169e000}, {0x416a0000}, {0x416a2000}, {0x416a4000}, {0x416a6000}, {0x416a8000}, {0x416aa000}, {0x416ac000}, {0x416ae000}, {0x416b0000}, {0x416b2000}, {0x416b4000}, {0x416b6000}, {0x416b8000}, {0x416ba000}, {0x416bc000}, {0x416be000}, {0x416c0000}, {0x416c2000}, {0x416c4000}, {0x416c6000}, {0x416c8000}, {0x416ca000}, {0x416cc000}, {0x416ce000}, {0x416d0000}, {0x416d2000}, {0x416d4000}, {0x416d6000}, {0x416d8000}, {0x416da000}, {0x416dc000}, {0x416de000}, {0x416e0000}, {0x416e2000}, {0x416e4000}, {0x416e6000}, {0x416e8000}, {0x416ea000}, {0x416ec000}, {0x416ee000}, {0x416f0000}, {0x416f2000}, {0x416f4000}, {0x416f6000}, {0x416f8000}, {0x416fa000}, {0x416fc000}, {0x416fe000}, {0x41700000}, {0x41702000}, {0x41704000}, {0x41706000}, {0x41708000}, {0x4170a000}, {0x4170c000}, {0x4170e000}, {0x41710000}, {0x41712000}, {0x41714000}, {0x41716000}, {0x41718000}, {0x4171a000}, {0x4171c000}, {0x4171e000}, {0x41720000}, {0x41722000}, {0x41724000}, {0x41726000}, {0x41728000}, {0x4172a000}, {0x4172c000}, {0x4172e000}, {0x41730000}, {0x41732000}, {0x41734000}, {0x41736000}, {0x41738000}, {0x4173a000}, {0x4173c000}, {0x4173e000}, {0x41740000}, {0x41742000}, {0x41744000}, {0x41746000}, {0x41748000}, {0x4174a000}, {0x4174c000}, {0x4174e000}, {0x41750000}, {0x41752000}, {0x41754000}, {0x41756000}, {0x41758000}, {0x4175a000}, {0x4175c000}, {0x4175e000}, {0x41760000}, {0x41762000}, {0x41764000}, {0x41766000}, {0x41768000}, {0x4176a000}, {0x4176c000}, {0x4176e000}, {0x41770000}, {0x41772000}, {0x41774000}, {0x41776000}, {0x41778000}, {0x4177a000}, {0x4177c000}, {0x4177e000}, {0x41780000}, {0x41782000}, {0x41784000}, {0x41786000}, {0x41788000}, {0x4178a000}, {0x4178c000}, {0x4178e000}, {0x41790000}, {0x41792000}, {0x41794000}, {0x41796000}, {0x41798000}, {0x4179a000}, {0x4179c000}, {0x4179e000}, {0x417a0000}, {0x417a2000}, {0x417a4000}, {0x417a6000}, {0x417a8000}, {0x417aa000}, {0x417ac000}, {0x417ae000}, {0x417b0000}, {0x417b2000}, {0x417b4000}, {0x417b6000}, {0x417b8000}, {0x417ba000}, {0x417bc000}, {0x417be000}, {0x417c0000}, {0x417c2000}, {0x417c4000}, {0x417c6000}, {0x417c8000}, {0x417ca000}, {0x417cc000}, {0x417ce000}, {0x417d0000}, {0x417d2000}, {0x417d4000}, {0x417d6000}, {0x417d8000}, {0x417da000}, {0x417dc000}, {0x417de000}, {0x417e0000}, {0x417e2000}, {0x417e4000}, {0x417e6000}, {0x417e8000}, {0x417ea000}, {0x417ec000}, {0x417ee000}, {0x417f0000}, {0x417f2000}, {0x417f4000}, {0x417f6000}, {0x417f8000}, {0x417fa000}, {0x417fc000}, {0x417fe000}, {0x41800000}, {0x41802000}, {0x41804000}, {0x41806000}, {0x41808000}, {0x4180a000}, {0x4180c000}, {0x4180e000}, {0x41810000}, {0x41812000}, {0x41814000}, {0x41816000}, {0x41818000}, {0x4181a000}, {0x4181c000}, {0x4181e000}, {0x41820000}, {0x41822000}, {0x41824000}, {0x41826000}, {0x41828000}, {0x4182a000}, {0x4182c000}, {0x4182e000}, {0x41830000}, {0x41832000}, {0x41834000}, {0x41836000}, {0x41838000}, {0x4183a000}, {0x4183c000}, {0x4183e000}, {0x41840000}, {0x41842000}, {0x41844000}, {0x41846000}, {0x41848000}, {0x4184a000}, {0x4184c000}, {0x4184e000}, {0x41850000}, {0x41852000}, {0x41854000}, {0x41856000}, {0x41858000}, {0x4185a000}, {0x4185c000}, {0x4185e000}, {0x41860000}, {0x41862000}, {0x41864000}, {0x41866000}, {0x41868000}, {0x4186a000}, {0x4186c000}, {0x4186e000}, {0x41870000}, {0x41872000}, {0x41874000}, {0x41876000}, {0x41878000}, {0x4187a000}, {0x4187c000}, {0x4187e000}, {0x41880000}, {0x41882000}, {0x41884000}, {0x41886000}, {0x41888000}, {0x4188a000}, {0x4188c000}, {0x4188e000}, {0x41890000}, {0x41892000}, {0x41894000}, {0x41896000}, {0x41898000}, {0x4189a000}, {0x4189c000}, {0x4189e000}, {0x418a0000}, {0x418a2000}, {0x418a4000}, {0x418a6000}, {0x418a8000}, {0x418aa000}, {0x418ac000}, {0x418ae000}, {0x418b0000}, {0x418b2000}, {0x418b4000}, {0x418b6000}, {0x418b8000}, {0x418ba000}, {0x418bc000}, {0x418be000}, {0x418c0000}, {0x418c2000}, {0x418c4000}, {0x418c6000}, {0x418c8000}, {0x418ca000}, {0x418cc000}, {0x418ce000}, {0x418d0000}, {0x418d2000}, {0x418d4000}, {0x418d6000}, {0x418d8000}, {0x418da000}, {0x418dc000}, {0x418de000}, {0x418e0000}, {0x418e2000}, {0x418e4000}, {0x418e6000}, {0x418e8000}, {0x418ea000}, {0x418ec000}, {0x418ee000}, {0x418f0000}, {0x418f2000}, {0x418f4000}, {0x418f6000}, {0x418f8000}, {0x418fa000}, {0x418fc000}, {0x418fe000}, {0x41900000}, {0x41902000}, {0x41904000}, {0x41906000}, {0x41908000}, {0x4190a000}, {0x4190c000}, {0x4190e000}, {0x41910000}, {0x41912000}, {0x41914000}, {0x41916000}, {0x41918000}, {0x4191a000}, {0x4191c000}, {0x4191e000}, {0x41920000}, {0x41922000}, {0x41924000}, {0x41926000}, {0x41928000}, {0x4192a000}, {0x4192c000}, {0x4192e000}, {0x41930000}, {0x41932000}, {0x41934000}, {0x41936000}, {0x41938000}, {0x4193a000}, {0x4193c000}, {0x4193e000}, {0x41940000}, {0x41942000}, {0x41944000}, {0x41946000}, {0x41948000}, {0x4194a000}, {0x4194c000}, {0x4194e000}, {0x41950000}, {0x41952000}, {0x41954000}, {0x41956000}, {0x41958000}, {0x4195a000}, {0x4195c000}, {0x4195e000}, {0x41960000}, {0x41962000}, {0x41964000}, {0x41966000}, {0x41968000}, {0x4196a000}, {0x4196c000}, {0x4196e000}, {0x41970000}, {0x41972000}, {0x41974000}, {0x41976000}, {0x41978000}, {0x4197a000}, {0x4197c000}, {0x4197e000}, {0x41980000}, {0x41982000}, {0x41984000}, {0x41986000}, {0x41988000}, {0x4198a000}, {0x4198c000}, {0x4198e000}, {0x41990000}, {0x41992000}, {0x41994000}, {0x41996000}, {0x41998000}, {0x4199a000}, {0x4199c000}, {0x4199e000}, {0x419a0000}, {0x419a2000}, {0x419a4000}, {0x419a6000}, {0x419a8000}, {0x419aa000}, {0x419ac000}, {0x419ae000}, {0x419b0000}, {0x419b2000}, {0x419b4000}, {0x419b6000}, {0x419b8000}, {0x419ba000}, {0x419bc000}, {0x419be000}, {0x419c0000}, {0x419c2000}, {0x419c4000}, {0x419c6000}, {0x419c8000}, {0x419ca000}, {0x419cc000}, {0x419ce000}, {0x419d0000}, {0x419d2000}, {0x419d4000}, {0x419d6000}, {0x419d8000}, {0x419da000}, {0x419dc000}, {0x419de000}, {0x419e0000}, {0x419e2000}, {0x419e4000}, {0x419e6000}, {0x419e8000}, {0x419ea000}, {0x419ec000}, {0x419ee000}, {0x419f0000}, {0x419f2000}, {0x419f4000}, {0x419f6000}, {0x419f8000}, {0x419fa000}, {0x419fc000}, {0x419fe000}, {0x41a00000}, {0x41a02000}, {0x41a04000}, {0x41a06000}, {0x41a08000}, {0x41a0a000}, {0x41a0c000}, {0x41a0e000}, {0x41a10000}, {0x41a12000}, {0x41a14000}, {0x41a16000}, {0x41a18000}, {0x41a1a000}, {0x41a1c000}, {0x41a1e000}, {0x41a20000}, {0x41a22000}, {0x41a24000}, {0x41a26000}, {0x41a28000}, {0x41a2a000}, {0x41a2c000}, {0x41a2e000}, {0x41a30000}, {0x41a32000}, {0x41a34000}, {0x41a36000}, {0x41a38000}, {0x41a3a000}, {0x41a3c000}, {0x41a3e000}, {0x41a40000}, {0x41a42000}, {0x41a44000}, {0x41a46000}, {0x41a48000}, {0x41a4a000}, {0x41a4c000}, {0x41a4e000}, {0x41a50000}, {0x41a52000}, {0x41a54000}, {0x41a56000}, {0x41a58000}, {0x41a5a000}, {0x41a5c000}, {0x41a5e000}, {0x41a60000}, {0x41a62000}, {0x41a64000}, {0x41a66000}, {0x41a68000}, {0x41a6a000}, {0x41a6c000}, {0x41a6e000}, {0x41a70000}, {0x41a72000}, {0x41a74000}, {0x41a76000}, {0x41a78000}, {0x41a7a000}, {0x41a7c000}, {0x41a7e000}, {0x41a80000}, {0x41a82000}, {0x41a84000}, {0x41a86000}, {0x41a88000}, {0x41a8a000}, {0x41a8c000}, {0x41a8e000}, {0x41a90000}, {0x41a92000}, {0x41a94000}, {0x41a96000}, {0x41a98000}, {0x41a9a000}, {0x41a9c000}, {0x41a9e000}, {0x41aa0000}, {0x41aa2000}, {0x41aa4000}, {0x41aa6000}, {0x41aa8000}, {0x41aaa000}, {0x41aac000}, {0x41aae000}, {0x41ab0000}, {0x41ab2000}, {0x41ab4000}, {0x41ab6000}, {0x41ab8000}, {0x41aba000}, {0x41abc000}, {0x41abe000}, {0x41ac0000}, {0x41ac2000}, {0x41ac4000}, {0x41ac6000}, {0x41ac8000}, {0x41aca000}, {0x41acc000}, {0x41ace000}, {0x41ad0000}, {0x41ad2000}, {0x41ad4000}, {0x41ad6000}, {0x41ad8000}, {0x41ada000}, {0x41adc000}, {0x41ade000}, {0x41ae0000}, {0x41ae2000}, {0x41ae4000}, {0x41ae6000}, {0x41ae8000}, {0x41aea000}, {0x41aec000}, {0x41aee000}, {0x41af0000}, {0x41af2000}, {0x41af4000}, {0x41af6000}, {0x41af8000}, {0x41afa000}, {0x41afc000}, {0x41afe000}, {0x41b00000}, {0x41b02000}, {0x41b04000}, {0x41b06000}, {0x41b08000}, {0x41b0a000}, {0x41b0c000}, {0x41b0e000}, {0x41b10000}, {0x41b12000}, {0x41b14000}, {0x41b16000}, {0x41b18000}, {0x41b1a000}, {0x41b1c000}, {0x41b1e000}, {0x41b20000}, {0x41b22000}, {0x41b24000}, {0x41b26000}, {0x41b28000}, {0x41b2a000}, {0x41b2c000}, {0x41b2e000}, {0x41b30000}, {0x41b32000}, {0x41b34000}, {0x41b36000}, {0x41b38000}, {0x41b3a000}, {0x41b3c000}, {0x41b3e000}, {0x41b40000}, {0x41b42000}, {0x41b44000}, {0x41b46000}, {0x41b48000}, {0x41b4a000}, {0x41b4c000}, {0x41b4e000}, {0x41b50000}, {0x41b52000}, {0x41b54000}, {0x41b56000}, {0x41b58000}, {0x41b5a000}, {0x41b5c000}, {0x41b5e000}, {0x41b60000}, {0x41b62000}, {0x41b64000}, {0x41b66000}, {0x41b68000}, {0x41b6a000}, {0x41b6c000}, {0x41b6e000}, {0x41b70000}, {0x41b72000}, {0x41b74000}, {0x41b76000}, {0x41b78000}, {0x41b7a000}, {0x41b7c000}, {0x41b7e000}, {0x41b80000}, {0x41b82000}, {0x41b84000}, {0x41b86000}, {0x41b88000}, {0x41b8a000}, {0x41b8c000}, {0x41b8e000}, {0x41b90000}, {0x41b92000}, {0x41b94000}, {0x41b96000}, {0x41b98000}, {0x41b9a000}, {0x41b9c000}, {0x41b9e000}, {0x41ba0000}, {0x41ba2000}, {0x41ba4000}, {0x41ba6000}, {0x41ba8000}, {0x41baa000}, {0x41bac000}, {0x41bae000}, {0x41bb0000}, {0x41bb2000}, {0x41bb4000}, {0x41bb6000}, {0x41bb8000}, {0x41bba000}, {0x41bbc000}, {0x41bbe000}, {0x41bc0000}, {0x41bc2000}, {0x41bc4000}, {0x41bc6000}, {0x41bc8000}, {0x41bca000}, {0x41bcc000}, {0x41bce000}, {0x41bd0000}, {0x41bd2000}, {0x41bd4000}, {0x41bd6000}, {0x41bd8000}, {0x41bda000}, {0x41bdc000}, {0x41bde000}, {0x41be0000}, {0x41be2000}, {0x41be4000}, {0x41be6000}, {0x41be8000}, {0x41bea000}, {0x41bec000}, {0x41bee000}, {0x41bf0000}, {0x41bf2000}, {0x41bf4000}, {0x41bf6000}, {0x41bf8000}, {0x41bfa000}, {0x41bfc000}, {0x41bfe000}, {0x41c00000}, {0x41c02000}, {0x41c04000}, {0x41c06000}, {0x41c08000}, {0x41c0a000}, {0x41c0c000}, {0x41c0e000}, {0x41c10000}, {0x41c12000}, {0x41c14000}, {0x41c16000}, {0x41c18000}, {0x41c1a000}, {0x41c1c000}, {0x41c1e000}, {0x41c20000}, {0x41c22000}, {0x41c24000}, {0x41c26000}, {0x41c28000}, {0x41c2a000}, {0x41c2c000}, {0x41c2e000}, {0x41c30000}, {0x41c32000}, {0x41c34000}, {0x41c36000}, {0x41c38000}, {0x41c3a000}, {0x41c3c000}, {0x41c3e000}, {0x41c40000}, {0x41c42000}, {0x41c44000}, {0x41c46000}, {0x41c48000}, {0x41c4a000}, {0x41c4c000}, {0x41c4e000}, {0x41c50000}, {0x41c52000}, {0x41c54000}, {0x41c56000}, {0x41c58000}, {0x41c5a000}, {0x41c5c000}, {0x41c5e000}, {0x41c60000}, {0x41c62000}, {0x41c64000}, {0x41c66000}, {0x41c68000}, {0x41c6a000}, {0x41c6c000}, {0x41c6e000}, {0x41c70000}, {0x41c72000}, {0x41c74000}, {0x41c76000}, {0x41c78000}, {0x41c7a000}, {0x41c7c000}, {0x41c7e000}, {0x41c80000}, {0x41c82000}, {0x41c84000}, {0x41c86000}, {0x41c88000}, {0x41c8a000}, {0x41c8c000}, {0x41c8e000}, {0x41c90000}, {0x41c92000}, {0x41c94000}, {0x41c96000}, {0x41c98000}, {0x41c9a000}, {0x41c9c000}, {0x41c9e000}, {0x41ca0000}, {0x41ca2000}, {0x41ca4000}, {0x41ca6000}, {0x41ca8000}, {0x41caa000}, {0x41cac000}, {0x41cae000}, {0x41cb0000}, {0x41cb2000}, {0x41cb4000}, {0x41cb6000}, {0x41cb8000}, {0x41cba000}, {0x41cbc000}, {0x41cbe000}, {0x41cc0000}, {0x41cc2000}, {0x41cc4000}, {0x41cc6000}, {0x41cc8000}, {0x41cca000}, {0x41ccc000}, {0x41cce000}, {0x41cd0000}, {0x41cd2000}, {0x41cd4000}, {0x41cd6000}, {0x41cd8000}, {0x41cda000}, {0x41cdc000}, {0x41cde000}, {0x41ce0000}, {0x41ce2000}, {0x41ce4000}, {0x41ce6000}, {0x41ce8000}, {0x41cea000}, {0x41cec000}, {0x41cee000}, {0x41cf0000}, {0x41cf2000}, {0x41cf4000}, {0x41cf6000}, {0x41cf8000}, {0x41cfa000}, {0x41cfc000}, {0x41cfe000}, {0x41d00000}, {0x41d02000}, {0x41d04000}, {0x41d06000}, {0x41d08000}, {0x41d0a000}, {0x41d0c000}, {0x41d0e000}, {0x41d10000}, {0x41d12000}, {0x41d14000}, {0x41d16000}, {0x41d18000}, {0x41d1a000}, {0x41d1c000}, {0x41d1e000}, {0x41d20000}, {0x41d22000}, {0x41d24000}, {0x41d26000}, {0x41d28000}, {0x41d2a000}, {0x41d2c000}, {0x41d2e000}, {0x41d30000}, {0x41d32000}, {0x41d34000}, {0x41d36000}, {0x41d38000}, {0x41d3a000}, {0x41d3c000}, {0x41d3e000}, {0x41d40000}, {0x41d42000}, {0x41d44000}, {0x41d46000}, {0x41d48000}, {0x41d4a000}, {0x41d4c000}, {0x41d4e000}, {0x41d50000}, {0x41d52000}, {0x41d54000}, {0x41d56000}, {0x41d58000}, {0x41d5a000}, {0x41d5c000}, {0x41d5e000}, {0x41d60000}, {0x41d62000}, {0x41d64000}, {0x41d66000}, {0x41d68000}, {0x41d6a000}, {0x41d6c000}, {0x41d6e000}, {0x41d70000}, {0x41d72000}, {0x41d74000}, {0x41d76000}, {0x41d78000}, {0x41d7a000}, {0x41d7c000}, {0x41d7e000}, {0x41d80000}, {0x41d82000}, {0x41d84000}, {0x41d86000}, {0x41d88000}, {0x41d8a000}, {0x41d8c000}, {0x41d8e000}, {0x41d90000}, {0x41d92000}, {0x41d94000}, {0x41d96000}, {0x41d98000}, {0x41d9a000}, {0x41d9c000}, {0x41d9e000}, {0x41da0000}, {0x41da2000}, {0x41da4000}, {0x41da6000}, {0x41da8000}, {0x41daa000}, {0x41dac000}, {0x41dae000}, {0x41db0000}, {0x41db2000}, {0x41db4000}, {0x41db6000}, {0x41db8000}, {0x41dba000}, {0x41dbc000}, {0x41dbe000}, {0x41dc0000}, {0x41dc2000}, {0x41dc4000}, {0x41dc6000}, {0x41dc8000}, {0x41dca000}, {0x41dcc000}, {0x41dce000}, {0x41dd0000}, {0x41dd2000}, {0x41dd4000}, {0x41dd6000}, {0x41dd8000}, {0x41dda000}, {0x41ddc000}, {0x41dde000}, {0x41de0000}, {0x41de2000}, {0x41de4000}, {0x41de6000}, {0x41de8000}, {0x41dea000}, {0x41dec000}, {0x41dee000}, {0x41df0000}, {0x41df2000}, {0x41df4000}, {0x41df6000}, {0x41df8000}, {0x41dfa000}, {0x41dfc000}, {0x41dfe000}, {0x41e00000}, {0x41e02000}, {0x41e04000}, {0x41e06000}, {0x41e08000}, {0x41e0a000}, {0x41e0c000}, {0x41e0e000}, {0x41e10000}, {0x41e12000}, {0x41e14000}, {0x41e16000}, {0x41e18000}, {0x41e1a000}, {0x41e1c000}, {0x41e1e000}, {0x41e20000}, {0x41e22000}, {0x41e24000}, {0x41e26000}, {0x41e28000}, {0x41e2a000}, {0x41e2c000}, {0x41e2e000}, {0x41e30000}, {0x41e32000}, {0x41e34000}, {0x41e36000}, {0x41e38000}, {0x41e3a000}, {0x41e3c000}, {0x41e3e000}, {0x41e40000}, {0x41e42000}, {0x41e44000}, {0x41e46000}, {0x41e48000}, {0x41e4a000}, {0x41e4c000}, {0x41e4e000}, {0x41e50000}, {0x41e52000}, {0x41e54000}, {0x41e56000}, {0x41e58000}, {0x41e5a000}, {0x41e5c000}, {0x41e5e000}, {0x41e60000}, {0x41e62000}, {0x41e64000}, {0x41e66000}, {0x41e68000}, {0x41e6a000}, {0x41e6c000}, {0x41e6e000}, {0x41e70000}, {0x41e72000}, {0x41e74000}, {0x41e76000}, {0x41e78000}, {0x41e7a000}, {0x41e7c000}, {0x41e7e000}, {0x41e80000}, {0x41e82000}, {0x41e84000}, {0x41e86000}, {0x41e88000}, {0x41e8a000}, {0x41e8c000}, {0x41e8e000}, {0x41e90000}, {0x41e92000}, {0x41e94000}, {0x41e96000}, {0x41e98000}, {0x41e9a000}, {0x41e9c000}, {0x41e9e000}, {0x41ea0000}, {0x41ea2000}, {0x41ea4000}, {0x41ea6000}, {0x41ea8000}, {0x41eaa000}, {0x41eac000}, {0x41eae000}, {0x41eb0000}, {0x41eb2000}, {0x41eb4000}, {0x41eb6000}, {0x41eb8000}, {0x41eba000}, {0x41ebc000}, {0x41ebe000}, {0x41ec0000}, {0x41ec2000}, {0x41ec4000}, {0x41ec6000}, {0x41ec8000}, {0x41eca000}, {0x41ecc000}, {0x41ece000}, {0x41ed0000}, {0x41ed2000}, {0x41ed4000}, {0x41ed6000}, {0x41ed8000}, {0x41eda000}, {0x41edc000}, {0x41ede000}, {0x41ee0000}, {0x41ee2000}, {0x41ee4000}, {0x41ee6000}, {0x41ee8000}, {0x41eea000}, {0x41eec000}, {0x41eee000}, {0x41ef0000}, {0x41ef2000}, {0x41ef4000}, {0x41ef6000}, {0x41ef8000}, {0x41efa000}, {0x41efc000}, {0x41efe000}, {0x41f00000}, {0x41f02000}, {0x41f04000}, {0x41f06000}, {0x41f08000}, {0x41f0a000}, {0x41f0c000}, {0x41f0e000}, {0x41f10000}, {0x41f12000}, {0x41f14000}, {0x41f16000}, {0x41f18000}, {0x41f1a000}, {0x41f1c000}, {0x41f1e000}, {0x41f20000}, {0x41f22000}, {0x41f24000}, {0x41f26000}, {0x41f28000}, {0x41f2a000}, {0x41f2c000}, {0x41f2e000}, {0x41f30000}, {0x41f32000}, {0x41f34000}, {0x41f36000}, {0x41f38000}, {0x41f3a000}, {0x41f3c000}, {0x41f3e000}, {0x41f40000}, {0x41f42000}, {0x41f44000}, {0x41f46000}, {0x41f48000}, {0x41f4a000}, {0x41f4c000}, {0x41f4e000}, {0x41f50000}, {0x41f52000}, {0x41f54000}, {0x41f56000}, {0x41f58000}, {0x41f5a000}, {0x41f5c000}, {0x41f5e000}, {0x41f60000}, {0x41f62000}, {0x41f64000}, {0x41f66000}, {0x41f68000}, {0x41f6a000}, {0x41f6c000}, {0x41f6e000}, {0x41f70000}, {0x41f72000}, {0x41f74000}, {0x41f76000}, {0x41f78000}, {0x41f7a000}, {0x41f7c000}, {0x41f7e000}, {0x41f80000}, {0x41f82000}, {0x41f84000}, {0x41f86000}, {0x41f88000}, {0x41f8a000}, {0x41f8c000}, {0x41f8e000}, {0x41f90000}, {0x41f92000}, {0x41f94000}, {0x41f96000}, {0x41f98000}, {0x41f9a000}, {0x41f9c000}, {0x41f9e000}, {0x41fa0000}, {0x41fa2000}, {0x41fa4000}, {0x41fa6000}, {0x41fa8000}, {0x41faa000}, {0x41fac000}, {0x41fae000}, {0x41fb0000}, {0x41fb2000}, {0x41fb4000}, {0x41fb6000}, {0x41fb8000}, {0x41fba000}, {0x41fbc000}, {0x41fbe000}, {0x41fc0000}, {0x41fc2000}, {0x41fc4000}, {0x41fc6000}, {0x41fc8000}, {0x41fca000}, {0x41fcc000}, {0x41fce000}, {0x41fd0000}, {0x41fd2000}, {0x41fd4000}, {0x41fd6000}, {0x41fd8000}, {0x41fda000}, {0x41fdc000}, {0x41fde000}, {0x41fe0000}, {0x41fe2000}, {0x41fe4000}, {0x41fe6000}, {0x41fe8000}, {0x41fea000}, {0x41fec000}, {0x41fee000}, {0x41ff0000}, {0x41ff2000}, {0x41ff4000}, {0x41ff6000}, {0x41ff8000}, {0x41ffa000}, {0x41ffc000}, {0x41ffe000}, {0x42000000}, {0x42002000}, {0x42004000}, {0x42006000}, {0x42008000}, {0x4200a000}, {0x4200c000}, {0x4200e000}, {0x42010000}, {0x42012000}, {0x42014000}, {0x42016000}, {0x42018000}, {0x4201a000}, {0x4201c000}, {0x4201e000}, {0x42020000}, {0x42022000}, {0x42024000}, {0x42026000}, {0x42028000}, {0x4202a000}, {0x4202c000}, {0x4202e000}, {0x42030000}, {0x42032000}, {0x42034000}, {0x42036000}, {0x42038000}, {0x4203a000}, {0x4203c000}, {0x4203e000}, {0x42040000}, {0x42042000}, {0x42044000}, {0x42046000}, {0x42048000}, {0x4204a000}, {0x4204c000}, {0x4204e000}, {0x42050000}, {0x42052000}, {0x42054000}, {0x42056000}, {0x42058000}, {0x4205a000}, {0x4205c000}, {0x4205e000}, {0x42060000}, {0x42062000}, {0x42064000}, {0x42066000}, {0x42068000}, {0x4206a000}, {0x4206c000}, {0x4206e000}, {0x42070000}, {0x42072000}, {0x42074000}, {0x42076000}, {0x42078000}, {0x4207a000}, {0x4207c000}, {0x4207e000}, {0x42080000}, {0x42082000}, {0x42084000}, {0x42086000}, {0x42088000}, {0x4208a000}, {0x4208c000}, {0x4208e000}, {0x42090000}, {0x42092000}, {0x42094000}, {0x42096000}, {0x42098000}, {0x4209a000}, {0x4209c000}, {0x4209e000}, {0x420a0000}, {0x420a2000}, {0x420a4000}, {0x420a6000}, {0x420a8000}, {0x420aa000}, {0x420ac000}, {0x420ae000}, {0x420b0000}, {0x420b2000}, {0x420b4000}, {0x420b6000}, {0x420b8000}, {0x420ba000}, {0x420bc000}, {0x420be000}, {0x420c0000}, {0x420c2000}, {0x420c4000}, {0x420c6000}, {0x420c8000}, {0x420ca000}, {0x420cc000}, {0x420ce000}, {0x420d0000}, {0x420d2000}, {0x420d4000}, {0x420d6000}, {0x420d8000}, {0x420da000}, {0x420dc000}, {0x420de000}, {0x420e0000}, {0x420e2000}, {0x420e4000}, {0x420e6000}, {0x420e8000}, {0x420ea000}, {0x420ec000}, {0x420ee000}, {0x420f0000}, {0x420f2000}, {0x420f4000}, {0x420f6000}, {0x420f8000}, {0x420fa000}, {0x420fc000}, {0x420fe000}, {0x42100000}, {0x42102000}, {0x42104000}, {0x42106000}, {0x42108000}, {0x4210a000}, {0x4210c000}, {0x4210e000}, {0x42110000}, {0x42112000}, {0x42114000}, {0x42116000}, {0x42118000}, {0x4211a000}, {0x4211c000}, {0x4211e000}, {0x42120000}, {0x42122000}, {0x42124000}, {0x42126000}, {0x42128000}, {0x4212a000}, {0x4212c000}, {0x4212e000}, {0x42130000}, {0x42132000}, {0x42134000}, {0x42136000}, {0x42138000}, {0x4213a000}, {0x4213c000}, {0x4213e000}, {0x42140000}, {0x42142000}, {0x42144000}, {0x42146000}, {0x42148000}, {0x4214a000}, {0x4214c000}, {0x4214e000}, {0x42150000}, {0x42152000}, {0x42154000}, {0x42156000}, {0x42158000}, {0x4215a000}, {0x4215c000}, {0x4215e000}, {0x42160000}, {0x42162000}, {0x42164000}, {0x42166000}, {0x42168000}, {0x4216a000}, {0x4216c000}, {0x4216e000}, {0x42170000}, {0x42172000}, {0x42174000}, {0x42176000}, {0x42178000}, {0x4217a000}, {0x4217c000}, {0x4217e000}, {0x42180000}, {0x42182000}, {0x42184000}, {0x42186000}, {0x42188000}, {0x4218a000}, {0x4218c000}, {0x4218e000}, {0x42190000}, {0x42192000}, {0x42194000}, {0x42196000}, {0x42198000}, {0x4219a000}, {0x4219c000}, {0x4219e000}, {0x421a0000}, {0x421a2000}, {0x421a4000}, {0x421a6000}, {0x421a8000}, {0x421aa000}, {0x421ac000}, {0x421ae000}, {0x421b0000}, {0x421b2000}, {0x421b4000}, {0x421b6000}, {0x421b8000}, {0x421ba000}, {0x421bc000}, {0x421be000}, {0x421c0000}, {0x421c2000}, {0x421c4000}, {0x421c6000}, {0x421c8000}, {0x421ca000}, {0x421cc000}, {0x421ce000}, {0x421d0000}, {0x421d2000}, {0x421d4000}, {0x421d6000}, {0x421d8000}, {0x421da000}, {0x421dc000}, {0x421de000}, {0x421e0000}, {0x421e2000}, {0x421e4000}, {0x421e6000}, {0x421e8000}, {0x421ea000}, {0x421ec000}, {0x421ee000}, {0x421f0000}, {0x421f2000}, {0x421f4000}, {0x421f6000}, {0x421f8000}, {0x421fa000}, {0x421fc000}, {0x421fe000}, {0x42200000}, {0x42202000}, {0x42204000}, {0x42206000}, {0x42208000}, {0x4220a000}, {0x4220c000}, {0x4220e000}, {0x42210000}, {0x42212000}, {0x42214000}, {0x42216000}, {0x42218000}, {0x4221a000}, {0x4221c000}, {0x4221e000}, {0x42220000}, {0x42222000}, {0x42224000}, {0x42226000}, {0x42228000}, {0x4222a000}, {0x4222c000}, {0x4222e000}, {0x42230000}, {0x42232000}, {0x42234000}, {0x42236000}, {0x42238000}, {0x4223a000}, {0x4223c000}, {0x4223e000}, {0x42240000}, {0x42242000}, {0x42244000}, {0x42246000}, {0x42248000}, {0x4224a000}, {0x4224c000}, {0x4224e000}, {0x42250000}, {0x42252000}, {0x42254000}, {0x42256000}, {0x42258000}, {0x4225a000}, {0x4225c000}, {0x4225e000}, {0x42260000}, {0x42262000}, {0x42264000}, {0x42266000}, {0x42268000}, {0x4226a000}, {0x4226c000}, {0x4226e000}, {0x42270000}, {0x42272000}, {0x42274000}, {0x42276000}, {0x42278000}, {0x4227a000}, {0x4227c000}, {0x4227e000}, {0x42280000}, {0x42282000}, {0x42284000}, {0x42286000}, {0x42288000}, {0x4228a000}, {0x4228c000}, {0x4228e000}, {0x42290000}, {0x42292000}, {0x42294000}, {0x42296000}, {0x42298000}, {0x4229a000}, {0x4229c000}, {0x4229e000}, {0x422a0000}, {0x422a2000}, {0x422a4000}, {0x422a6000}, {0x422a8000}, {0x422aa000}, {0x422ac000}, {0x422ae000}, {0x422b0000}, {0x422b2000}, {0x422b4000}, {0x422b6000}, {0x422b8000}, {0x422ba000}, {0x422bc000}, {0x422be000}, {0x422c0000}, {0x422c2000}, {0x422c4000}, {0x422c6000}, {0x422c8000}, {0x422ca000}, {0x422cc000}, {0x422ce000}, {0x422d0000}, {0x422d2000}, {0x422d4000}, {0x422d6000}, {0x422d8000}, {0x422da000}, {0x422dc000}, {0x422de000}, {0x422e0000}, {0x422e2000}, {0x422e4000}, {0x422e6000}, {0x422e8000}, {0x422ea000}, {0x422ec000}, {0x422ee000}, {0x422f0000}, {0x422f2000}, {0x422f4000}, {0x422f6000}, {0x422f8000}, {0x422fa000}, {0x422fc000}, {0x422fe000}, {0x42300000}, {0x42302000}, {0x42304000}, {0x42306000}, {0x42308000}, {0x4230a000}, {0x4230c000}, {0x4230e000}, {0x42310000}, {0x42312000}, {0x42314000}, {0x42316000}, {0x42318000}, {0x4231a000}, {0x4231c000}, {0x4231e000}, {0x42320000}, {0x42322000}, {0x42324000}, {0x42326000}, {0x42328000}, {0x4232a000}, {0x4232c000}, {0x4232e000}, {0x42330000}, {0x42332000}, {0x42334000}, {0x42336000}, {0x42338000}, {0x4233a000}, {0x4233c000}, {0x4233e000}, {0x42340000}, {0x42342000}, {0x42344000}, {0x42346000}, {0x42348000}, {0x4234a000}, {0x4234c000}, {0x4234e000}, {0x42350000}, {0x42352000}, {0x42354000}, {0x42356000}, {0x42358000}, {0x4235a000}, {0x4235c000}, {0x4235e000}, {0x42360000}, {0x42362000}, {0x42364000}, {0x42366000}, {0x42368000}, {0x4236a000}, {0x4236c000}, {0x4236e000}, {0x42370000}, {0x42372000}, {0x42374000}, {0x42376000}, {0x42378000}, {0x4237a000}, {0x4237c000}, {0x4237e000}, {0x42380000}, {0x42382000}, {0x42384000}, {0x42386000}, {0x42388000}, {0x4238a000}, {0x4238c000}, {0x4238e000}, {0x42390000}, {0x42392000}, {0x42394000}, {0x42396000}, {0x42398000}, {0x4239a000}, {0x4239c000}, {0x4239e000}, {0x423a0000}, {0x423a2000}, {0x423a4000}, {0x423a6000}, {0x423a8000}, {0x423aa000}, {0x423ac000}, {0x423ae000}, {0x423b0000}, {0x423b2000}, {0x423b4000}, {0x423b6000}, {0x423b8000}, {0x423ba000}, {0x423bc000}, {0x423be000}, {0x423c0000}, {0x423c2000}, {0x423c4000}, {0x423c6000}, {0x423c8000}, {0x423ca000}, {0x423cc000}, {0x423ce000}, {0x423d0000}, {0x423d2000}, {0x423d4000}, {0x423d6000}, {0x423d8000}, {0x423da000}, {0x423dc000}, {0x423de000}, {0x423e0000}, {0x423e2000}, {0x423e4000}, {0x423e6000}, {0x423e8000}, {0x423ea000}, {0x423ec000}, {0x423ee000}, {0x423f0000}, {0x423f2000}, {0x423f4000}, {0x423f6000}, {0x423f8000}, {0x423fa000}, {0x423fc000}, {0x423fe000}, {0x42400000}, {0x42402000}, {0x42404000}, {0x42406000}, {0x42408000}, {0x4240a000}, {0x4240c000}, {0x4240e000}, {0x42410000}, {0x42412000}, {0x42414000}, {0x42416000}, {0x42418000}, {0x4241a000}, {0x4241c000}, {0x4241e000}, {0x42420000}, {0x42422000}, {0x42424000}, {0x42426000}, {0x42428000}, {0x4242a000}, {0x4242c000}, {0x4242e000}, {0x42430000}, {0x42432000}, {0x42434000}, {0x42436000}, {0x42438000}, {0x4243a000}, {0x4243c000}, {0x4243e000}, {0x42440000}, {0x42442000}, {0x42444000}, {0x42446000}, {0x42448000}, {0x4244a000}, {0x4244c000}, {0x4244e000}, {0x42450000}, {0x42452000}, {0x42454000}, {0x42456000}, {0x42458000}, {0x4245a000}, {0x4245c000}, {0x4245e000}, {0x42460000}, {0x42462000}, {0x42464000}, {0x42466000}, {0x42468000}, {0x4246a000}, {0x4246c000}, {0x4246e000}, {0x42470000}, {0x42472000}, {0x42474000}, {0x42476000}, {0x42478000}, {0x4247a000}, {0x4247c000}, {0x4247e000}, {0x42480000}, {0x42482000}, {0x42484000}, {0x42486000}, {0x42488000}, {0x4248a000}, {0x4248c000}, {0x4248e000}, {0x42490000}, {0x42492000}, {0x42494000}, {0x42496000}, {0x42498000}, {0x4249a000}, {0x4249c000}, {0x4249e000}, {0x424a0000}, {0x424a2000}, {0x424a4000}, {0x424a6000}, {0x424a8000}, {0x424aa000}, {0x424ac000}, {0x424ae000}, {0x424b0000}, {0x424b2000}, {0x424b4000}, {0x424b6000}, {0x424b8000}, {0x424ba000}, {0x424bc000}, {0x424be000}, {0x424c0000}, {0x424c2000}, {0x424c4000}, {0x424c6000}, {0x424c8000}, {0x424ca000}, {0x424cc000}, {0x424ce000}, {0x424d0000}, {0x424d2000}, {0x424d4000}, {0x424d6000}, {0x424d8000}, {0x424da000}, {0x424dc000}, {0x424de000}, {0x424e0000}, {0x424e2000}, {0x424e4000}, {0x424e6000}, {0x424e8000}, {0x424ea000}, {0x424ec000}, {0x424ee000}, {0x424f0000}, {0x424f2000}, {0x424f4000}, {0x424f6000}, {0x424f8000}, {0x424fa000}, {0x424fc000}, {0x424fe000}, {0x42500000}, {0x42502000}, {0x42504000}, {0x42506000}, {0x42508000}, {0x4250a000}, {0x4250c000}, {0x4250e000}, {0x42510000}, {0x42512000}, {0x42514000}, {0x42516000}, {0x42518000}, {0x4251a000}, {0x4251c000}, {0x4251e000}, {0x42520000}, {0x42522000}, {0x42524000}, {0x42526000}, {0x42528000}, {0x4252a000}, {0x4252c000}, {0x4252e000}, {0x42530000}, {0x42532000}, {0x42534000}, {0x42536000}, {0x42538000}, {0x4253a000}, {0x4253c000}, {0x4253e000}, {0x42540000}, {0x42542000}, {0x42544000}, {0x42546000}, {0x42548000}, {0x4254a000}, {0x4254c000}, {0x4254e000}, {0x42550000}, {0x42552000}, {0x42554000}, {0x42556000}, {0x42558000}, {0x4255a000}, {0x4255c000}, {0x4255e000}, {0x42560000}, {0x42562000}, {0x42564000}, {0x42566000}, {0x42568000}, {0x4256a000}, {0x4256c000}, {0x4256e000}, {0x42570000}, {0x42572000}, {0x42574000}, {0x42576000}, {0x42578000}, {0x4257a000}, {0x4257c000}, {0x4257e000}, {0x42580000}, {0x42582000}, {0x42584000}, {0x42586000}, {0x42588000}, {0x4258a000}, {0x4258c000}, {0x4258e000}, {0x42590000}, {0x42592000}, {0x42594000}, {0x42596000}, {0x42598000}, {0x4259a000}, {0x4259c000}, {0x4259e000}, {0x425a0000}, {0x425a2000}, {0x425a4000}, {0x425a6000}, {0x425a8000}, {0x425aa000}, {0x425ac000}, {0x425ae000}, {0x425b0000}, {0x425b2000}, {0x425b4000}, {0x425b6000}, {0x425b8000}, {0x425ba000}, {0x425bc000}, {0x425be000}, {0x425c0000}, {0x425c2000}, {0x425c4000}, {0x425c6000}, {0x425c8000}, {0x425ca000}, {0x425cc000}, {0x425ce000}, {0x425d0000}, {0x425d2000}, {0x425d4000}, {0x425d6000}, {0x425d8000}, {0x425da000}, {0x425dc000}, {0x425de000}, {0x425e0000}, {0x425e2000}, {0x425e4000}, {0x425e6000}, {0x425e8000}, {0x425ea000}, {0x425ec000}, {0x425ee000}, {0x425f0000}, {0x425f2000}, {0x425f4000}, {0x425f6000}, {0x425f8000}, {0x425fa000}, {0x425fc000}, {0x425fe000}, {0x42600000}, {0x42602000}, {0x42604000}, {0x42606000}, {0x42608000}, {0x4260a000}, {0x4260c000}, {0x4260e000}, {0x42610000}, {0x42612000}, {0x42614000}, {0x42616000}, {0x42618000}, {0x4261a000}, {0x4261c000}, {0x4261e000}, {0x42620000}, {0x42622000}, {0x42624000}, {0x42626000}, {0x42628000}, {0x4262a000}, {0x4262c000}, {0x4262e000}, {0x42630000}, {0x42632000}, {0x42634000}, {0x42636000}, {0x42638000}, {0x4263a000}, {0x4263c000}, {0x4263e000}, {0x42640000}, {0x42642000}, {0x42644000}, {0x42646000}, {0x42648000}, {0x4264a000}, {0x4264c000}, {0x4264e000}, {0x42650000}, {0x42652000}, {0x42654000}, {0x42656000}, {0x42658000}, {0x4265a000}, {0x4265c000}, {0x4265e000}, {0x42660000}, {0x42662000}, {0x42664000}, {0x42666000}, {0x42668000}, {0x4266a000}, {0x4266c000}, {0x4266e000}, {0x42670000}, {0x42672000}, {0x42674000}, {0x42676000}, {0x42678000}, {0x4267a000}, {0x4267c000}, {0x4267e000}, {0x42680000}, {0x42682000}, {0x42684000}, {0x42686000}, {0x42688000}, {0x4268a000}, {0x4268c000}, {0x4268e000}, {0x42690000}, {0x42692000}, {0x42694000}, {0x42696000}, {0x42698000}, {0x4269a000}, {0x4269c000}, {0x4269e000}, {0x426a0000}, {0x426a2000}, {0x426a4000}, {0x426a6000}, {0x426a8000}, {0x426aa000}, {0x426ac000}, {0x426ae000}, {0x426b0000}, {0x426b2000}, {0x426b4000}, {0x426b6000}, {0x426b8000}, {0x426ba000}, {0x426bc000}, {0x426be000}, {0x426c0000}, {0x426c2000}, {0x426c4000}, {0x426c6000}, {0x426c8000}, {0x426ca000}, {0x426cc000}, {0x426ce000}, {0x426d0000}, {0x426d2000}, {0x426d4000}, {0x426d6000}, {0x426d8000}, {0x426da000}, {0x426dc000}, {0x426de000}, {0x426e0000}, {0x426e2000}, {0x426e4000}, {0x426e6000}, {0x426e8000}, {0x426ea000}, {0x426ec000}, {0x426ee000}, {0x426f0000}, {0x426f2000}, {0x426f4000}, {0x426f6000}, {0x426f8000}, {0x426fa000}, {0x426fc000}, {0x426fe000}, {0x42700000}, {0x42702000}, {0x42704000}, {0x42706000}, {0x42708000}, {0x4270a000}, {0x4270c000}, {0x4270e000}, {0x42710000}, {0x42712000}, {0x42714000}, {0x42716000}, {0x42718000}, {0x4271a000}, {0x4271c000}, {0x4271e000}, {0x42720000}, {0x42722000}, {0x42724000}, {0x42726000}, {0x42728000}, {0x4272a000}, {0x4272c000}, {0x4272e000}, {0x42730000}, {0x42732000}, {0x42734000}, {0x42736000}, {0x42738000}, {0x4273a000}, {0x4273c000}, {0x4273e000}, {0x42740000}, {0x42742000}, {0x42744000}, {0x42746000}, {0x42748000}, {0x4274a000}, {0x4274c000}, {0x4274e000}, {0x42750000}, {0x42752000}, {0x42754000}, {0x42756000}, {0x42758000}, {0x4275a000}, {0x4275c000}, {0x4275e000}, {0x42760000}, {0x42762000}, {0x42764000}, {0x42766000}, {0x42768000}, {0x4276a000}, {0x4276c000}, {0x4276e000}, {0x42770000}, {0x42772000}, {0x42774000}, {0x42776000}, {0x42778000}, {0x4277a000}, {0x4277c000}, {0x4277e000}, {0x42780000}, {0x42782000}, {0x42784000}, {0x42786000}, {0x42788000}, {0x4278a000}, {0x4278c000}, {0x4278e000}, {0x42790000}, {0x42792000}, {0x42794000}, {0x42796000}, {0x42798000}, {0x4279a000}, {0x4279c000}, {0x4279e000}, {0x427a0000}, {0x427a2000}, {0x427a4000}, {0x427a6000}, {0x427a8000}, {0x427aa000}, {0x427ac000}, {0x427ae000}, {0x427b0000}, {0x427b2000}, {0x427b4000}, {0x427b6000}, {0x427b8000}, {0x427ba000}, {0x427bc000}, {0x427be000}, {0x427c0000}, {0x427c2000}, {0x427c4000}, {0x427c6000}, {0x427c8000}, {0x427ca000}, {0x427cc000}, {0x427ce000}, {0x427d0000}, {0x427d2000}, {0x427d4000}, {0x427d6000}, {0x427d8000}, {0x427da000}, {0x427dc000}, {0x427de000}, {0x427e0000}, {0x427e2000}, {0x427e4000}, {0x427e6000}, {0x427e8000}, {0x427ea000}, {0x427ec000}, {0x427ee000}, {0x427f0000}, {0x427f2000}, {0x427f4000}, {0x427f6000}, {0x427f8000}, {0x427fa000}, {0x427fc000}, {0x427fe000}, {0x42800000}, {0x42802000}, {0x42804000}, {0x42806000}, {0x42808000}, {0x4280a000}, {0x4280c000}, {0x4280e000}, {0x42810000}, {0x42812000}, {0x42814000}, {0x42816000}, {0x42818000}, {0x4281a000}, {0x4281c000}, {0x4281e000}, {0x42820000}, {0x42822000}, {0x42824000}, {0x42826000}, {0x42828000}, {0x4282a000}, {0x4282c000}, {0x4282e000}, {0x42830000}, {0x42832000}, {0x42834000}, {0x42836000}, {0x42838000}, {0x4283a000}, {0x4283c000}, {0x4283e000}, {0x42840000}, {0x42842000}, {0x42844000}, {0x42846000}, {0x42848000}, {0x4284a000}, {0x4284c000}, {0x4284e000}, {0x42850000}, {0x42852000}, {0x42854000}, {0x42856000}, {0x42858000}, {0x4285a000}, {0x4285c000}, {0x4285e000}, {0x42860000}, {0x42862000}, {0x42864000}, {0x42866000}, {0x42868000}, {0x4286a000}, {0x4286c000}, {0x4286e000}, {0x42870000}, {0x42872000}, {0x42874000}, {0x42876000}, {0x42878000}, {0x4287a000}, {0x4287c000}, {0x4287e000}, {0x42880000}, {0x42882000}, {0x42884000}, {0x42886000}, {0x42888000}, {0x4288a000}, {0x4288c000}, {0x4288e000}, {0x42890000}, {0x42892000}, {0x42894000}, {0x42896000}, {0x42898000}, {0x4289a000}, {0x4289c000}, {0x4289e000}, {0x428a0000}, {0x428a2000}, {0x428a4000}, {0x428a6000}, {0x428a8000}, {0x428aa000}, {0x428ac000}, {0x428ae000}, {0x428b0000}, {0x428b2000}, {0x428b4000}, {0x428b6000}, {0x428b8000}, {0x428ba000}, {0x428bc000}, {0x428be000}, {0x428c0000}, {0x428c2000}, {0x428c4000}, {0x428c6000}, {0x428c8000}, {0x428ca000}, {0x428cc000}, {0x428ce000}, {0x428d0000}, {0x428d2000}, {0x428d4000}, {0x428d6000}, {0x428d8000}, {0x428da000}, {0x428dc000}, {0x428de000}, {0x428e0000}, {0x428e2000}, {0x428e4000}, {0x428e6000}, {0x428e8000}, {0x428ea000}, {0x428ec000}, {0x428ee000}, {0x428f0000}, {0x428f2000}, {0x428f4000}, {0x428f6000}, {0x428f8000}, {0x428fa000}, {0x428fc000}, {0x428fe000}, {0x42900000}, {0x42902000}, {0x42904000}, {0x42906000}, {0x42908000}, {0x4290a000}, {0x4290c000}, {0x4290e000}, {0x42910000}, {0x42912000}, {0x42914000}, {0x42916000}, {0x42918000}, {0x4291a000}, {0x4291c000}, {0x4291e000}, {0x42920000}, {0x42922000}, {0x42924000}, {0x42926000}, {0x42928000}, {0x4292a000}, {0x4292c000}, {0x4292e000}, {0x42930000}, {0x42932000}, {0x42934000}, {0x42936000}, {0x42938000}, {0x4293a000}, {0x4293c000}, {0x4293e000}, {0x42940000}, {0x42942000}, {0x42944000}, {0x42946000}, {0x42948000}, {0x4294a000}, {0x4294c000}, {0x4294e000}, {0x42950000}, {0x42952000}, {0x42954000}, {0x42956000}, {0x42958000}, {0x4295a000}, {0x4295c000}, {0x4295e000}, {0x42960000}, {0x42962000}, {0x42964000}, {0x42966000}, {0x42968000}, {0x4296a000}, {0x4296c000}, {0x4296e000}, {0x42970000}, {0x42972000}, {0x42974000}, {0x42976000}, {0x42978000}, {0x4297a000}, {0x4297c000}, {0x4297e000}, {0x42980000}, {0x42982000}, {0x42984000}, {0x42986000}, {0x42988000}, {0x4298a000}, {0x4298c000}, {0x4298e000}, {0x42990000}, {0x42992000}, {0x42994000}, {0x42996000}, {0x42998000}, {0x4299a000}, {0x4299c000}, {0x4299e000}, {0x429a0000}, {0x429a2000}, {0x429a4000}, {0x429a6000}, {0x429a8000}, {0x429aa000}, {0x429ac000}, {0x429ae000}, {0x429b0000}, {0x429b2000}, {0x429b4000}, {0x429b6000}, {0x429b8000}, {0x429ba000}, {0x429bc000}, {0x429be000}, {0x429c0000}, {0x429c2000}, {0x429c4000}, {0x429c6000}, {0x429c8000}, {0x429ca000}, {0x429cc000}, {0x429ce000}, {0x429d0000}, {0x429d2000}, {0x429d4000}, {0x429d6000}, {0x429d8000}, {0x429da000}, {0x429dc000}, {0x429de000}, {0x429e0000}, {0x429e2000}, {0x429e4000}, {0x429e6000}, {0x429e8000}, {0x429ea000}, {0x429ec000}, {0x429ee000}, {0x429f0000}, {0x429f2000}, {0x429f4000}, {0x429f6000}, {0x429f8000}, {0x429fa000}, {0x429fc000}, {0x429fe000}, {0x42a00000}, {0x42a02000}, {0x42a04000}, {0x42a06000}, {0x42a08000}, {0x42a0a000}, {0x42a0c000}, {0x42a0e000}, {0x42a10000}, {0x42a12000}, {0x42a14000}, {0x42a16000}, {0x42a18000}, {0x42a1a000}, {0x42a1c000}, {0x42a1e000}, {0x42a20000}, {0x42a22000}, {0x42a24000}, {0x42a26000}, {0x42a28000}, {0x42a2a000}, {0x42a2c000}, {0x42a2e000}, {0x42a30000}, {0x42a32000}, {0x42a34000}, {0x42a36000}, {0x42a38000}, {0x42a3a000}, {0x42a3c000}, {0x42a3e000}, {0x42a40000}, {0x42a42000}, {0x42a44000}, {0x42a46000}, {0x42a48000}, {0x42a4a000}, {0x42a4c000}, {0x42a4e000}, {0x42a50000}, {0x42a52000}, {0x42a54000}, {0x42a56000}, {0x42a58000}, {0x42a5a000}, {0x42a5c000}, {0x42a5e000}, {0x42a60000}, {0x42a62000}, {0x42a64000}, {0x42a66000}, {0x42a68000}, {0x42a6a000}, {0x42a6c000}, {0x42a6e000}, {0x42a70000}, {0x42a72000}, {0x42a74000}, {0x42a76000}, {0x42a78000}, {0x42a7a000}, {0x42a7c000}, {0x42a7e000}, {0x42a80000}, {0x42a82000}, {0x42a84000}, {0x42a86000}, {0x42a88000}, {0x42a8a000}, {0x42a8c000}, {0x42a8e000}, {0x42a90000}, {0x42a92000}, {0x42a94000}, {0x42a96000}, {0x42a98000}, {0x42a9a000}, {0x42a9c000}, {0x42a9e000}, {0x42aa0000}, {0x42aa2000}, {0x42aa4000}, {0x42aa6000}, {0x42aa8000}, {0x42aaa000}, {0x42aac000}, {0x42aae000}, {0x42ab0000}, {0x42ab2000}, {0x42ab4000}, {0x42ab6000}, {0x42ab8000}, {0x42aba000}, {0x42abc000}, {0x42abe000}, {0x42ac0000}, {0x42ac2000}, {0x42ac4000}, {0x42ac6000}, {0x42ac8000}, {0x42aca000}, {0x42acc000}, {0x42ace000}, {0x42ad0000}, {0x42ad2000}, {0x42ad4000}, {0x42ad6000}, {0x42ad8000}, {0x42ada000}, {0x42adc000}, {0x42ade000}, {0x42ae0000}, {0x42ae2000}, {0x42ae4000}, {0x42ae6000}, {0x42ae8000}, {0x42aea000}, {0x42aec000}, {0x42aee000}, {0x42af0000}, {0x42af2000}, {0x42af4000}, {0x42af6000}, {0x42af8000}, {0x42afa000}, {0x42afc000}, {0x42afe000}, {0x42b00000}, {0x42b02000}, {0x42b04000}, {0x42b06000}, {0x42b08000}, {0x42b0a000}, {0x42b0c000}, {0x42b0e000}, {0x42b10000}, {0x42b12000}, {0x42b14000}, {0x42b16000}, {0x42b18000}, {0x42b1a000}, {0x42b1c000}, {0x42b1e000}, {0x42b20000}, {0x42b22000}, {0x42b24000}, {0x42b26000}, {0x42b28000}, {0x42b2a000}, {0x42b2c000}, {0x42b2e000}, {0x42b30000}, {0x42b32000}, {0x42b34000}, {0x42b36000}, {0x42b38000}, {0x42b3a000}, {0x42b3c000}, {0x42b3e000}, {0x42b40000}, {0x42b42000}, {0x42b44000}, {0x42b46000}, {0x42b48000}, {0x42b4a000}, {0x42b4c000}, {0x42b4e000}, {0x42b50000}, {0x42b52000}, {0x42b54000}, {0x42b56000}, {0x42b58000}, {0x42b5a000}, {0x42b5c000}, {0x42b5e000}, {0x42b60000}, {0x42b62000}, {0x42b64000}, {0x42b66000}, {0x42b68000}, {0x42b6a000}, {0x42b6c000}, {0x42b6e000}, {0x42b70000}, {0x42b72000}, {0x42b74000}, {0x42b76000}, {0x42b78000}, {0x42b7a000}, {0x42b7c000}, {0x42b7e000}, {0x42b80000}, {0x42b82000}, {0x42b84000}, {0x42b86000}, {0x42b88000}, {0x42b8a000}, {0x42b8c000}, {0x42b8e000}, {0x42b90000}, {0x42b92000}, {0x42b94000}, {0x42b96000}, {0x42b98000}, {0x42b9a000}, {0x42b9c000}, {0x42b9e000}, {0x42ba0000}, {0x42ba2000}, {0x42ba4000}, {0x42ba6000}, {0x42ba8000}, {0x42baa000}, {0x42bac000}, {0x42bae000}, {0x42bb0000}, {0x42bb2000}, {0x42bb4000}, {0x42bb6000}, {0x42bb8000}, {0x42bba000}, {0x42bbc000}, {0x42bbe000}, {0x42bc0000}, {0x42bc2000}, {0x42bc4000}, {0x42bc6000}, {0x42bc8000}, {0x42bca000}, {0x42bcc000}, {0x42bce000}, {0x42bd0000}, {0x42bd2000}, {0x42bd4000}, {0x42bd6000}, {0x42bd8000}, {0x42bda000}, {0x42bdc000}, {0x42bde000}, {0x42be0000}, {0x42be2000}, {0x42be4000}, {0x42be6000}, {0x42be8000}, {0x42bea000}, {0x42bec000}, {0x42bee000}, {0x42bf0000}, {0x42bf2000}, {0x42bf4000}, {0x42bf6000}, {0x42bf8000}, {0x42bfa000}, {0x42bfc000}, {0x42bfe000}, {0x42c00000}, {0x42c02000}, {0x42c04000}, {0x42c06000}, {0x42c08000}, {0x42c0a000}, {0x42c0c000}, {0x42c0e000}, {0x42c10000}, {0x42c12000}, {0x42c14000}, {0x42c16000}, {0x42c18000}, {0x42c1a000}, {0x42c1c000}, {0x42c1e000}, {0x42c20000}, {0x42c22000}, {0x42c24000}, {0x42c26000}, {0x42c28000}, {0x42c2a000}, {0x42c2c000}, {0x42c2e000}, {0x42c30000}, {0x42c32000}, {0x42c34000}, {0x42c36000}, {0x42c38000}, {0x42c3a000}, {0x42c3c000}, {0x42c3e000}, {0x42c40000}, {0x42c42000}, {0x42c44000}, {0x42c46000}, {0x42c48000}, {0x42c4a000}, {0x42c4c000}, {0x42c4e000}, {0x42c50000}, {0x42c52000}, {0x42c54000}, {0x42c56000}, {0x42c58000}, {0x42c5a000}, {0x42c5c000}, {0x42c5e000}, {0x42c60000}, {0x42c62000}, {0x42c64000}, {0x42c66000}, {0x42c68000}, {0x42c6a000}, {0x42c6c000}, {0x42c6e000}, {0x42c70000}, {0x42c72000}, {0x42c74000}, {0x42c76000}, {0x42c78000}, {0x42c7a000}, {0x42c7c000}, {0x42c7e000}, {0x42c80000}, {0x42c82000}, {0x42c84000}, {0x42c86000}, {0x42c88000}, {0x42c8a000}, {0x42c8c000}, {0x42c8e000}, {0x42c90000}, {0x42c92000}, {0x42c94000}, {0x42c96000}, {0x42c98000}, {0x42c9a000}, {0x42c9c000}, {0x42c9e000}, {0x42ca0000}, {0x42ca2000}, {0x42ca4000}, {0x42ca6000}, {0x42ca8000}, {0x42caa000}, {0x42cac000}, {0x42cae000}, {0x42cb0000}, {0x42cb2000}, {0x42cb4000}, {0x42cb6000}, {0x42cb8000}, {0x42cba000}, {0x42cbc000}, {0x42cbe000}, {0x42cc0000}, {0x42cc2000}, {0x42cc4000}, {0x42cc6000}, {0x42cc8000}, {0x42cca000}, {0x42ccc000}, {0x42cce000}, {0x42cd0000}, {0x42cd2000}, {0x42cd4000}, {0x42cd6000}, {0x42cd8000}, {0x42cda000}, {0x42cdc000}, {0x42cde000}, {0x42ce0000}, {0x42ce2000}, {0x42ce4000}, {0x42ce6000}, {0x42ce8000}, {0x42cea000}, {0x42cec000}, {0x42cee000}, {0x42cf0000}, {0x42cf2000}, {0x42cf4000}, {0x42cf6000}, {0x42cf8000}, {0x42cfa000}, {0x42cfc000}, {0x42cfe000}, {0x42d00000}, {0x42d02000}, {0x42d04000}, {0x42d06000}, {0x42d08000}, {0x42d0a000}, {0x42d0c000}, {0x42d0e000}, {0x42d10000}, {0x42d12000}, {0x42d14000}, {0x42d16000}, {0x42d18000}, {0x42d1a000}, {0x42d1c000}, {0x42d1e000}, {0x42d20000}, {0x42d22000}, {0x42d24000}, {0x42d26000}, {0x42d28000}, {0x42d2a000}, {0x42d2c000}, {0x42d2e000}, {0x42d30000}, {0x42d32000}, {0x42d34000}, {0x42d36000}, {0x42d38000}, {0x42d3a000}, {0x42d3c000}, {0x42d3e000}, {0x42d40000}, {0x42d42000}, {0x42d44000}, {0x42d46000}, {0x42d48000}, {0x42d4a000}, {0x42d4c000}, {0x42d4e000}, {0x42d50000}, {0x42d52000}, {0x42d54000}, {0x42d56000}, {0x42d58000}, {0x42d5a000}, {0x42d5c000}, {0x42d5e000}, {0x42d60000}, {0x42d62000}, {0x42d64000}, {0x42d66000}, {0x42d68000}, {0x42d6a000}, {0x42d6c000}, {0x42d6e000}, {0x42d70000}, {0x42d72000}, {0x42d74000}, {0x42d76000}, {0x42d78000}, {0x42d7a000}, {0x42d7c000}, {0x42d7e000}, {0x42d80000}, {0x42d82000}, {0x42d84000}, {0x42d86000}, {0x42d88000}, {0x42d8a000}, {0x42d8c000}, {0x42d8e000}, {0x42d90000}, {0x42d92000}, {0x42d94000}, {0x42d96000}, {0x42d98000}, {0x42d9a000}, {0x42d9c000}, {0x42d9e000}, {0x42da0000}, {0x42da2000}, {0x42da4000}, {0x42da6000}, {0x42da8000}, {0x42daa000}, {0x42dac000}, {0x42dae000}, {0x42db0000}, {0x42db2000}, {0x42db4000}, {0x42db6000}, {0x42db8000}, {0x42dba000}, {0x42dbc000}, {0x42dbe000}, {0x42dc0000}, {0x42dc2000}, {0x42dc4000}, {0x42dc6000}, {0x42dc8000}, {0x42dca000}, {0x42dcc000}, {0x42dce000}, {0x42dd0000}, {0x42dd2000}, {0x42dd4000}, {0x42dd6000}, {0x42dd8000}, {0x42dda000}, {0x42ddc000}, {0x42dde000}, {0x42de0000}, {0x42de2000}, {0x42de4000}, {0x42de6000}, {0x42de8000}, {0x42dea000}, {0x42dec000}, {0x42dee000}, {0x42df0000}, {0x42df2000}, {0x42df4000}, {0x42df6000}, {0x42df8000}, {0x42dfa000}, {0x42dfc000}, {0x42dfe000}, {0x42e00000}, {0x42e02000}, {0x42e04000}, {0x42e06000}, {0x42e08000}, {0x42e0a000}, {0x42e0c000}, {0x42e0e000}, {0x42e10000}, {0x42e12000}, {0x42e14000}, {0x42e16000}, {0x42e18000}, {0x42e1a000}, {0x42e1c000}, {0x42e1e000}, {0x42e20000}, {0x42e22000}, {0x42e24000}, {0x42e26000}, {0x42e28000}, {0x42e2a000}, {0x42e2c000}, {0x42e2e000}, {0x42e30000}, {0x42e32000}, {0x42e34000}, {0x42e36000}, {0x42e38000}, {0x42e3a000}, {0x42e3c000}, {0x42e3e000}, {0x42e40000}, {0x42e42000}, {0x42e44000}, {0x42e46000}, {0x42e48000}, {0x42e4a000}, {0x42e4c000}, {0x42e4e000}, {0x42e50000}, {0x42e52000}, {0x42e54000}, {0x42e56000}, {0x42e58000}, {0x42e5a000}, {0x42e5c000}, {0x42e5e000}, {0x42e60000}, {0x42e62000}, {0x42e64000}, {0x42e66000}, {0x42e68000}, {0x42e6a000}, {0x42e6c000}, {0x42e6e000}, {0x42e70000}, {0x42e72000}, {0x42e74000}, {0x42e76000}, {0x42e78000}, {0x42e7a000}, {0x42e7c000}, {0x42e7e000}, {0x42e80000}, {0x42e82000}, {0x42e84000}, {0x42e86000}, {0x42e88000}, {0x42e8a000}, {0x42e8c000}, {0x42e8e000}, {0x42e90000}, {0x42e92000}, {0x42e94000}, {0x42e96000}, {0x42e98000}, {0x42e9a000}, {0x42e9c000}, {0x42e9e000}, {0x42ea0000}, {0x42ea2000}, {0x42ea4000}, {0x42ea6000}, {0x42ea8000}, {0x42eaa000}, {0x42eac000}, {0x42eae000}, {0x42eb0000}, {0x42eb2000}, {0x42eb4000}, {0x42eb6000}, {0x42eb8000}, {0x42eba000}, {0x42ebc000}, {0x42ebe000}, {0x42ec0000}, {0x42ec2000}, {0x42ec4000}, {0x42ec6000}, {0x42ec8000}, {0x42eca000}, {0x42ecc000}, {0x42ece000}, {0x42ed0000}, {0x42ed2000}, {0x42ed4000}, {0x42ed6000}, {0x42ed8000}, {0x42eda000}, {0x42edc000}, {0x42ede000}, {0x42ee0000}, {0x42ee2000}, {0x42ee4000}, {0x42ee6000}, {0x42ee8000}, {0x42eea000}, {0x42eec000}, {0x42eee000}, {0x42ef0000}, {0x42ef2000}, {0x42ef4000}, {0x42ef6000}, {0x42ef8000}, {0x42efa000}, {0x42efc000}, {0x42efe000}, {0x42f00000}, {0x42f02000}, {0x42f04000}, {0x42f06000}, {0x42f08000}, {0x42f0a000}, {0x42f0c000}, {0x42f0e000}, {0x42f10000}, {0x42f12000}, {0x42f14000}, {0x42f16000}, {0x42f18000}, {0x42f1a000}, {0x42f1c000}, {0x42f1e000}, {0x42f20000}, {0x42f22000}, {0x42f24000}, {0x42f26000}, {0x42f28000}, {0x42f2a000}, {0x42f2c000}, {0x42f2e000}, {0x42f30000}, {0x42f32000}, {0x42f34000}, {0x42f36000}, {0x42f38000}, {0x42f3a000}, {0x42f3c000}, {0x42f3e000}, {0x42f40000}, {0x42f42000}, {0x42f44000}, {0x42f46000}, {0x42f48000}, {0x42f4a000}, {0x42f4c000}, {0x42f4e000}, {0x42f50000}, {0x42f52000}, {0x42f54000}, {0x42f56000}, {0x42f58000}, {0x42f5a000}, {0x42f5c000}, {0x42f5e000}, {0x42f60000}, {0x42f62000}, {0x42f64000}, {0x42f66000}, {0x42f68000}, {0x42f6a000}, {0x42f6c000}, {0x42f6e000}, {0x42f70000}, {0x42f72000}, {0x42f74000}, {0x42f76000}, {0x42f78000}, {0x42f7a000}, {0x42f7c000}, {0x42f7e000}, {0x42f80000}, {0x42f82000}, {0x42f84000}, {0x42f86000}, {0x42f88000}, {0x42f8a000}, {0x42f8c000}, {0x42f8e000}, {0x42f90000}, {0x42f92000}, {0x42f94000}, {0x42f96000}, {0x42f98000}, {0x42f9a000}, {0x42f9c000}, {0x42f9e000}, {0x42fa0000}, {0x42fa2000}, {0x42fa4000}, {0x42fa6000}, {0x42fa8000}, {0x42faa000}, {0x42fac000}, {0x42fae000}, {0x42fb0000}, {0x42fb2000}, {0x42fb4000}, {0x42fb6000}, {0x42fb8000}, {0x42fba000}, {0x42fbc000}, {0x42fbe000}, {0x42fc0000}, {0x42fc2000}, {0x42fc4000}, {0x42fc6000}, {0x42fc8000}, {0x42fca000}, {0x42fcc000}, {0x42fce000}, {0x42fd0000}, {0x42fd2000}, {0x42fd4000}, {0x42fd6000}, {0x42fd8000}, {0x42fda000}, {0x42fdc000}, {0x42fde000}, {0x42fe0000}, {0x42fe2000}, {0x42fe4000}, {0x42fe6000}, {0x42fe8000}, {0x42fea000}, {0x42fec000}, {0x42fee000}, {0x42ff0000}, {0x42ff2000}, {0x42ff4000}, {0x42ff6000}, {0x42ff8000}, {0x42ffa000}, {0x42ffc000}, {0x42ffe000}, {0x43000000}, {0x43002000}, {0x43004000}, {0x43006000}, {0x43008000}, {0x4300a000}, {0x4300c000}, {0x4300e000}, {0x43010000}, {0x43012000}, {0x43014000}, {0x43016000}, {0x43018000}, {0x4301a000}, {0x4301c000}, {0x4301e000}, {0x43020000}, {0x43022000}, {0x43024000}, {0x43026000}, {0x43028000}, {0x4302a000}, {0x4302c000}, {0x4302e000}, {0x43030000}, {0x43032000}, {0x43034000}, {0x43036000}, {0x43038000}, {0x4303a000}, {0x4303c000}, {0x4303e000}, {0x43040000}, {0x43042000}, {0x43044000}, {0x43046000}, {0x43048000}, {0x4304a000}, {0x4304c000}, {0x4304e000}, {0x43050000}, {0x43052000}, {0x43054000}, {0x43056000}, {0x43058000}, {0x4305a000}, {0x4305c000}, {0x4305e000}, {0x43060000}, {0x43062000}, {0x43064000}, {0x43066000}, {0x43068000}, {0x4306a000}, {0x4306c000}, {0x4306e000}, {0x43070000}, {0x43072000}, {0x43074000}, {0x43076000}, {0x43078000}, {0x4307a000}, {0x4307c000}, {0x4307e000}, {0x43080000}, {0x43082000}, {0x43084000}, {0x43086000}, {0x43088000}, {0x4308a000}, {0x4308c000}, {0x4308e000}, {0x43090000}, {0x43092000}, {0x43094000}, {0x43096000}, {0x43098000}, {0x4309a000}, {0x4309c000}, {0x4309e000}, {0x430a0000}, {0x430a2000}, {0x430a4000}, {0x430a6000}, {0x430a8000}, {0x430aa000}, {0x430ac000}, {0x430ae000}, {0x430b0000}, {0x430b2000}, {0x430b4000}, {0x430b6000}, {0x430b8000}, {0x430ba000}, {0x430bc000}, {0x430be000}, {0x430c0000}, {0x430c2000}, {0x430c4000}, {0x430c6000}, {0x430c8000}, {0x430ca000}, {0x430cc000}, {0x430ce000}, {0x430d0000}, {0x430d2000}, {0x430d4000}, {0x430d6000}, {0x430d8000}, {0x430da000}, {0x430dc000}, {0x430de000}, {0x430e0000}, {0x430e2000}, {0x430e4000}, {0x430e6000}, {0x430e8000}, {0x430ea000}, {0x430ec000}, {0x430ee000}, {0x430f0000}, {0x430f2000}, {0x430f4000}, {0x430f6000}, {0x430f8000}, {0x430fa000}, {0x430fc000}, {0x430fe000}, {0x43100000}, {0x43102000}, {0x43104000}, {0x43106000}, {0x43108000}, {0x4310a000}, {0x4310c000}, {0x4310e000}, {0x43110000}, {0x43112000}, {0x43114000}, {0x43116000}, {0x43118000}, {0x4311a000}, {0x4311c000}, {0x4311e000}, {0x43120000}, {0x43122000}, {0x43124000}, {0x43126000}, {0x43128000}, {0x4312a000}, {0x4312c000}, {0x4312e000}, {0x43130000}, {0x43132000}, {0x43134000}, {0x43136000}, {0x43138000}, {0x4313a000}, {0x4313c000}, {0x4313e000}, {0x43140000}, {0x43142000}, {0x43144000}, {0x43146000}, {0x43148000}, {0x4314a000}, {0x4314c000}, {0x4314e000}, {0x43150000}, {0x43152000}, {0x43154000}, {0x43156000}, {0x43158000}, {0x4315a000}, {0x4315c000}, {0x4315e000}, {0x43160000}, {0x43162000}, {0x43164000}, {0x43166000}, {0x43168000}, {0x4316a000}, {0x4316c000}, {0x4316e000}, {0x43170000}, {0x43172000}, {0x43174000}, {0x43176000}, {0x43178000}, {0x4317a000}, {0x4317c000}, {0x4317e000}, {0x43180000}, {0x43182000}, {0x43184000}, {0x43186000}, {0x43188000}, {0x4318a000}, {0x4318c000}, {0x4318e000}, {0x43190000}, {0x43192000}, {0x43194000}, {0x43196000}, {0x43198000}, {0x4319a000}, {0x4319c000}, {0x4319e000}, {0x431a0000}, {0x431a2000}, {0x431a4000}, {0x431a6000}, {0x431a8000}, {0x431aa000}, {0x431ac000}, {0x431ae000}, {0x431b0000}, {0x431b2000}, {0x431b4000}, {0x431b6000}, {0x431b8000}, {0x431ba000}, {0x431bc000}, {0x431be000}, {0x431c0000}, {0x431c2000}, {0x431c4000}, {0x431c6000}, {0x431c8000}, {0x431ca000}, {0x431cc000}, {0x431ce000}, {0x431d0000}, {0x431d2000}, {0x431d4000}, {0x431d6000}, {0x431d8000}, {0x431da000}, {0x431dc000}, {0x431de000}, {0x431e0000}, {0x431e2000}, {0x431e4000}, {0x431e6000}, {0x431e8000}, {0x431ea000}, {0x431ec000}, {0x431ee000}, {0x431f0000}, {0x431f2000}, {0x431f4000}, {0x431f6000}, {0x431f8000}, {0x431fa000}, {0x431fc000}, {0x431fe000}, {0x43200000}, {0x43202000}, {0x43204000}, {0x43206000}, {0x43208000}, {0x4320a000}, {0x4320c000}, {0x4320e000}, {0x43210000}, {0x43212000}, {0x43214000}, {0x43216000}, {0x43218000}, {0x4321a000}, {0x4321c000}, {0x4321e000}, {0x43220000}, {0x43222000}, {0x43224000}, {0x43226000}, {0x43228000}, {0x4322a000}, {0x4322c000}, {0x4322e000}, {0x43230000}, {0x43232000}, {0x43234000}, {0x43236000}, {0x43238000}, {0x4323a000}, {0x4323c000}, {0x4323e000}, {0x43240000}, {0x43242000}, {0x43244000}, {0x43246000}, {0x43248000}, {0x4324a000}, {0x4324c000}, {0x4324e000}, {0x43250000}, {0x43252000}, {0x43254000}, {0x43256000}, {0x43258000}, {0x4325a000}, {0x4325c000}, {0x4325e000}, {0x43260000}, {0x43262000}, {0x43264000}, {0x43266000}, {0x43268000}, {0x4326a000}, {0x4326c000}, {0x4326e000}, {0x43270000}, {0x43272000}, {0x43274000}, {0x43276000}, {0x43278000}, {0x4327a000}, {0x4327c000}, {0x4327e000}, {0x43280000}, {0x43282000}, {0x43284000}, {0x43286000}, {0x43288000}, {0x4328a000}, {0x4328c000}, {0x4328e000}, {0x43290000}, {0x43292000}, {0x43294000}, {0x43296000}, {0x43298000}, {0x4329a000}, {0x4329c000}, {0x4329e000}, {0x432a0000}, {0x432a2000}, {0x432a4000}, {0x432a6000}, {0x432a8000}, {0x432aa000}, {0x432ac000}, {0x432ae000}, {0x432b0000}, {0x432b2000}, {0x432b4000}, {0x432b6000}, {0x432b8000}, {0x432ba000}, {0x432bc000}, {0x432be000}, {0x432c0000}, {0x432c2000}, {0x432c4000}, {0x432c6000}, {0x432c8000}, {0x432ca000}, {0x432cc000}, {0x432ce000}, {0x432d0000}, {0x432d2000}, {0x432d4000}, {0x432d6000}, {0x432d8000}, {0x432da000}, {0x432dc000}, {0x432de000}, {0x432e0000}, {0x432e2000}, {0x432e4000}, {0x432e6000}, {0x432e8000}, {0x432ea000}, {0x432ec000}, {0x432ee000}, {0x432f0000}, {0x432f2000}, {0x432f4000}, {0x432f6000}, {0x432f8000}, {0x432fa000}, {0x432fc000}, {0x432fe000}, {0x43300000}, {0x43302000}, {0x43304000}, {0x43306000}, {0x43308000}, {0x4330a000}, {0x4330c000}, {0x4330e000}, {0x43310000}, {0x43312000}, {0x43314000}, {0x43316000}, {0x43318000}, {0x4331a000}, {0x4331c000}, {0x4331e000}, {0x43320000}, {0x43322000}, {0x43324000}, {0x43326000}, {0x43328000}, {0x4332a000}, {0x4332c000}, {0x4332e000}, {0x43330000}, {0x43332000}, {0x43334000}, {0x43336000}, {0x43338000}, {0x4333a000}, {0x4333c000}, {0x4333e000}, {0x43340000}, {0x43342000}, {0x43344000}, {0x43346000}, {0x43348000}, {0x4334a000}, {0x4334c000}, {0x4334e000}, {0x43350000}, {0x43352000}, {0x43354000}, {0x43356000}, {0x43358000}, {0x4335a000}, {0x4335c000}, {0x4335e000}, {0x43360000}, {0x43362000}, {0x43364000}, {0x43366000}, {0x43368000}, {0x4336a000}, {0x4336c000}, {0x4336e000}, {0x43370000}, {0x43372000}, {0x43374000}, {0x43376000}, {0x43378000}, {0x4337a000}, {0x4337c000}, {0x4337e000}, {0x43380000}, {0x43382000}, {0x43384000}, {0x43386000}, {0x43388000}, {0x4338a000}, {0x4338c000}, {0x4338e000}, {0x43390000}, {0x43392000}, {0x43394000}, {0x43396000}, {0x43398000}, {0x4339a000}, {0x4339c000}, {0x4339e000}, {0x433a0000}, {0x433a2000}, {0x433a4000}, {0x433a6000}, {0x433a8000}, {0x433aa000}, {0x433ac000}, {0x433ae000}, {0x433b0000}, {0x433b2000}, {0x433b4000}, {0x433b6000}, {0x433b8000}, {0x433ba000}, {0x433bc000}, {0x433be000}, {0x433c0000}, {0x433c2000}, {0x433c4000}, {0x433c6000}, {0x433c8000}, {0x433ca000}, {0x433cc000}, {0x433ce000}, {0x433d0000}, {0x433d2000}, {0x433d4000}, {0x433d6000}, {0x433d8000}, {0x433da000}, {0x433dc000}, {0x433de000}, {0x433e0000}, {0x433e2000}, {0x433e4000}, {0x433e6000}, {0x433e8000}, {0x433ea000}, {0x433ec000}, {0x433ee000}, {0x433f0000}, {0x433f2000}, {0x433f4000}, {0x433f6000}, {0x433f8000}, {0x433fa000}, {0x433fc000}, {0x433fe000}, {0x43400000}, {0x43402000}, {0x43404000}, {0x43406000}, {0x43408000}, {0x4340a000}, {0x4340c000}, {0x4340e000}, {0x43410000}, {0x43412000}, {0x43414000}, {0x43416000}, {0x43418000}, {0x4341a000}, {0x4341c000}, {0x4341e000}, {0x43420000}, {0x43422000}, {0x43424000}, {0x43426000}, {0x43428000}, {0x4342a000}, {0x4342c000}, {0x4342e000}, {0x43430000}, {0x43432000}, {0x43434000}, {0x43436000}, {0x43438000}, {0x4343a000}, {0x4343c000}, {0x4343e000}, {0x43440000}, {0x43442000}, {0x43444000}, {0x43446000}, {0x43448000}, {0x4344a000}, {0x4344c000}, {0x4344e000}, {0x43450000}, {0x43452000}, {0x43454000}, {0x43456000}, {0x43458000}, {0x4345a000}, {0x4345c000}, {0x4345e000}, {0x43460000}, {0x43462000}, {0x43464000}, {0x43466000}, {0x43468000}, {0x4346a000}, {0x4346c000}, {0x4346e000}, {0x43470000}, {0x43472000}, {0x43474000}, {0x43476000}, {0x43478000}, {0x4347a000}, {0x4347c000}, {0x4347e000}, {0x43480000}, {0x43482000}, {0x43484000}, {0x43486000}, {0x43488000}, {0x4348a000}, {0x4348c000}, {0x4348e000}, {0x43490000}, {0x43492000}, {0x43494000}, {0x43496000}, {0x43498000}, {0x4349a000}, {0x4349c000}, {0x4349e000}, {0x434a0000}, {0x434a2000}, {0x434a4000}, {0x434a6000}, {0x434a8000}, {0x434aa000}, {0x434ac000}, {0x434ae000}, {0x434b0000}, {0x434b2000}, {0x434b4000}, {0x434b6000}, {0x434b8000}, {0x434ba000}, {0x434bc000}, {0x434be000}, {0x434c0000}, {0x434c2000}, {0x434c4000}, {0x434c6000}, {0x434c8000}, {0x434ca000}, {0x434cc000}, {0x434ce000}, {0x434d0000}, {0x434d2000}, {0x434d4000}, {0x434d6000}, {0x434d8000}, {0x434da000}, {0x434dc000}, {0x434de000}, {0x434e0000}, {0x434e2000}, {0x434e4000}, {0x434e6000}, {0x434e8000}, {0x434ea000}, {0x434ec000}, {0x434ee000}, {0x434f0000}, {0x434f2000}, {0x434f4000}, {0x434f6000}, {0x434f8000}, {0x434fa000}, {0x434fc000}, {0x434fe000}, {0x43500000}, {0x43502000}, {0x43504000}, {0x43506000}, {0x43508000}, {0x4350a000}, {0x4350c000}, {0x4350e000}, {0x43510000}, {0x43512000}, {0x43514000}, {0x43516000}, {0x43518000}, {0x4351a000}, {0x4351c000}, {0x4351e000}, {0x43520000}, {0x43522000}, {0x43524000}, {0x43526000}, {0x43528000}, {0x4352a000}, {0x4352c000}, {0x4352e000}, {0x43530000}, {0x43532000}, {0x43534000}, {0x43536000}, {0x43538000}, {0x4353a000}, {0x4353c000}, {0x4353e000}, {0x43540000}, {0x43542000}, {0x43544000}, {0x43546000}, {0x43548000}, {0x4354a000}, {0x4354c000}, {0x4354e000}, {0x43550000}, {0x43552000}, {0x43554000}, {0x43556000}, {0x43558000}, {0x4355a000}, {0x4355c000}, {0x4355e000}, {0x43560000}, {0x43562000}, {0x43564000}, {0x43566000}, {0x43568000}, {0x4356a000}, {0x4356c000}, {0x4356e000}, {0x43570000}, {0x43572000}, {0x43574000}, {0x43576000}, {0x43578000}, {0x4357a000}, {0x4357c000}, {0x4357e000}, {0x43580000}, {0x43582000}, {0x43584000}, {0x43586000}, {0x43588000}, {0x4358a000}, {0x4358c000}, {0x4358e000}, {0x43590000}, {0x43592000}, {0x43594000}, {0x43596000}, {0x43598000}, {0x4359a000}, {0x4359c000}, {0x4359e000}, {0x435a0000}, {0x435a2000}, {0x435a4000}, {0x435a6000}, {0x435a8000}, {0x435aa000}, {0x435ac000}, {0x435ae000}, {0x435b0000}, {0x435b2000}, {0x435b4000}, {0x435b6000}, {0x435b8000}, {0x435ba000}, {0x435bc000}, {0x435be000}, {0x435c0000}, {0x435c2000}, {0x435c4000}, {0x435c6000}, {0x435c8000}, {0x435ca000}, {0x435cc000}, {0x435ce000}, {0x435d0000}, {0x435d2000}, {0x435d4000}, {0x435d6000}, {0x435d8000}, {0x435da000}, {0x435dc000}, {0x435de000}, {0x435e0000}, {0x435e2000}, {0x435e4000}, {0x435e6000}, {0x435e8000}, {0x435ea000}, {0x435ec000}, {0x435ee000}, {0x435f0000}, {0x435f2000}, {0x435f4000}, {0x435f6000}, {0x435f8000}, {0x435fa000}, {0x435fc000}, {0x435fe000}, {0x43600000}, {0x43602000}, {0x43604000}, {0x43606000}, {0x43608000}, {0x4360a000}, {0x4360c000}, {0x4360e000}, {0x43610000}, {0x43612000}, {0x43614000}, {0x43616000}, {0x43618000}, {0x4361a000}, {0x4361c000}, {0x4361e000}, {0x43620000}, {0x43622000}, {0x43624000}, {0x43626000}, {0x43628000}, {0x4362a000}, {0x4362c000}, {0x4362e000}, {0x43630000}, {0x43632000}, {0x43634000}, {0x43636000}, {0x43638000}, {0x4363a000}, {0x4363c000}, {0x4363e000}, {0x43640000}, {0x43642000}, {0x43644000}, {0x43646000}, {0x43648000}, {0x4364a000}, {0x4364c000}, {0x4364e000}, {0x43650000}, {0x43652000}, {0x43654000}, {0x43656000}, {0x43658000}, {0x4365a000}, {0x4365c000}, {0x4365e000}, {0x43660000}, {0x43662000}, {0x43664000}, {0x43666000}, {0x43668000}, {0x4366a000}, {0x4366c000}, {0x4366e000}, {0x43670000}, {0x43672000}, {0x43674000}, {0x43676000}, {0x43678000}, {0x4367a000}, {0x4367c000}, {0x4367e000}, {0x43680000}, {0x43682000}, {0x43684000}, {0x43686000}, {0x43688000}, {0x4368a000}, {0x4368c000}, {0x4368e000}, {0x43690000}, {0x43692000}, {0x43694000}, {0x43696000}, {0x43698000}, {0x4369a000}, {0x4369c000}, {0x4369e000}, {0x436a0000}, {0x436a2000}, {0x436a4000}, {0x436a6000}, {0x436a8000}, {0x436aa000}, {0x436ac000}, {0x436ae000}, {0x436b0000}, {0x436b2000}, {0x436b4000}, {0x436b6000}, {0x436b8000}, {0x436ba000}, {0x436bc000}, {0x436be000}, {0x436c0000}, {0x436c2000}, {0x436c4000}, {0x436c6000}, {0x436c8000}, {0x436ca000}, {0x436cc000}, {0x436ce000}, {0x436d0000}, {0x436d2000}, {0x436d4000}, {0x436d6000}, {0x436d8000}, {0x436da000}, {0x436dc000}, {0x436de000}, {0x436e0000}, {0x436e2000}, {0x436e4000}, {0x436e6000}, {0x436e8000}, {0x436ea000}, {0x436ec000}, {0x436ee000}, {0x436f0000}, {0x436f2000}, {0x436f4000}, {0x436f6000}, {0x436f8000}, {0x436fa000}, {0x436fc000}, {0x436fe000}, {0x43700000}, {0x43702000}, {0x43704000}, {0x43706000}, {0x43708000}, {0x4370a000}, {0x4370c000}, {0x4370e000}, {0x43710000}, {0x43712000}, {0x43714000}, {0x43716000}, {0x43718000}, {0x4371a000}, {0x4371c000}, {0x4371e000}, {0x43720000}, {0x43722000}, {0x43724000}, {0x43726000}, {0x43728000}, {0x4372a000}, {0x4372c000}, {0x4372e000}, {0x43730000}, {0x43732000}, {0x43734000}, {0x43736000}, {0x43738000}, {0x4373a000}, {0x4373c000}, {0x4373e000}, {0x43740000}, {0x43742000}, {0x43744000}, {0x43746000}, {0x43748000}, {0x4374a000}, {0x4374c000}, {0x4374e000}, {0x43750000}, {0x43752000}, {0x43754000}, {0x43756000}, {0x43758000}, {0x4375a000}, {0x4375c000}, {0x4375e000}, {0x43760000}, {0x43762000}, {0x43764000}, {0x43766000}, {0x43768000}, {0x4376a000}, {0x4376c000}, {0x4376e000}, {0x43770000}, {0x43772000}, {0x43774000}, {0x43776000}, {0x43778000}, {0x4377a000}, {0x4377c000}, {0x4377e000}, {0x43780000}, {0x43782000}, {0x43784000}, {0x43786000}, {0x43788000}, {0x4378a000}, {0x4378c000}, {0x4378e000}, {0x43790000}, {0x43792000}, {0x43794000}, {0x43796000}, {0x43798000}, {0x4379a000}, {0x4379c000}, {0x4379e000}, {0x437a0000}, {0x437a2000}, {0x437a4000}, {0x437a6000}, {0x437a8000}, {0x437aa000}, {0x437ac000}, {0x437ae000}, {0x437b0000}, {0x437b2000}, {0x437b4000}, {0x437b6000}, {0x437b8000}, {0x437ba000}, {0x437bc000}, {0x437be000}, {0x437c0000}, {0x437c2000}, {0x437c4000}, {0x437c6000}, {0x437c8000}, {0x437ca000}, {0x437cc000}, {0x437ce000}, {0x437d0000}, {0x437d2000}, {0x437d4000}, {0x437d6000}, {0x437d8000}, {0x437da000}, {0x437dc000}, {0x437de000}, {0x437e0000}, {0x437e2000}, {0x437e4000}, {0x437e6000}, {0x437e8000}, {0x437ea000}, {0x437ec000}, {0x437ee000}, {0x437f0000}, {0x437f2000}, {0x437f4000}, {0x437f6000}, {0x437f8000}, {0x437fa000}, {0x437fc000}, {0x437fe000}, {0x43800000}, {0x43802000}, {0x43804000}, {0x43806000}, {0x43808000}, {0x4380a000}, {0x4380c000}, {0x4380e000}, {0x43810000}, {0x43812000}, {0x43814000}, {0x43816000}, {0x43818000}, {0x4381a000}, {0x4381c000}, {0x4381e000}, {0x43820000}, {0x43822000}, {0x43824000}, {0x43826000}, {0x43828000}, {0x4382a000}, {0x4382c000}, {0x4382e000}, {0x43830000}, {0x43832000}, {0x43834000}, {0x43836000}, {0x43838000}, {0x4383a000}, {0x4383c000}, {0x4383e000}, {0x43840000}, {0x43842000}, {0x43844000}, {0x43846000}, {0x43848000}, {0x4384a000}, {0x4384c000}, {0x4384e000}, {0x43850000}, {0x43852000}, {0x43854000}, {0x43856000}, {0x43858000}, {0x4385a000}, {0x4385c000}, {0x4385e000}, {0x43860000}, {0x43862000}, {0x43864000}, {0x43866000}, {0x43868000}, {0x4386a000}, {0x4386c000}, {0x4386e000}, {0x43870000}, {0x43872000}, {0x43874000}, {0x43876000}, {0x43878000}, {0x4387a000}, {0x4387c000}, {0x4387e000}, {0x43880000}, {0x43882000}, {0x43884000}, {0x43886000}, {0x43888000}, {0x4388a000}, {0x4388c000}, {0x4388e000}, {0x43890000}, {0x43892000}, {0x43894000}, {0x43896000}, {0x43898000}, {0x4389a000}, {0x4389c000}, {0x4389e000}, {0x438a0000}, {0x438a2000}, {0x438a4000}, {0x438a6000}, {0x438a8000}, {0x438aa000}, {0x438ac000}, {0x438ae000}, {0x438b0000}, {0x438b2000}, {0x438b4000}, {0x438b6000}, {0x438b8000}, {0x438ba000}, {0x438bc000}, {0x438be000}, {0x438c0000}, {0x438c2000}, {0x438c4000}, {0x438c6000}, {0x438c8000}, {0x438ca000}, {0x438cc000}, {0x438ce000}, {0x438d0000}, {0x438d2000}, {0x438d4000}, {0x438d6000}, {0x438d8000}, {0x438da000}, {0x438dc000}, {0x438de000}, {0x438e0000}, {0x438e2000}, {0x438e4000}, {0x438e6000}, {0x438e8000}, {0x438ea000}, {0x438ec000}, {0x438ee000}, {0x438f0000}, {0x438f2000}, {0x438f4000}, {0x438f6000}, {0x438f8000}, {0x438fa000}, {0x438fc000}, {0x438fe000}, {0x43900000}, {0x43902000}, {0x43904000}, {0x43906000}, {0x43908000}, {0x4390a000}, {0x4390c000}, {0x4390e000}, {0x43910000}, {0x43912000}, {0x43914000}, {0x43916000}, {0x43918000}, {0x4391a000}, {0x4391c000}, {0x4391e000}, {0x43920000}, {0x43922000}, {0x43924000}, {0x43926000}, {0x43928000}, {0x4392a000}, {0x4392c000}, {0x4392e000}, {0x43930000}, {0x43932000}, {0x43934000}, {0x43936000}, {0x43938000}, {0x4393a000}, {0x4393c000}, {0x4393e000}, {0x43940000}, {0x43942000}, {0x43944000}, {0x43946000}, {0x43948000}, {0x4394a000}, {0x4394c000}, {0x4394e000}, {0x43950000}, {0x43952000}, {0x43954000}, {0x43956000}, {0x43958000}, {0x4395a000}, {0x4395c000}, {0x4395e000}, {0x43960000}, {0x43962000}, {0x43964000}, {0x43966000}, {0x43968000}, {0x4396a000}, {0x4396c000}, {0x4396e000}, {0x43970000}, {0x43972000}, {0x43974000}, {0x43976000}, {0x43978000}, {0x4397a000}, {0x4397c000}, {0x4397e000}, {0x43980000}, {0x43982000}, {0x43984000}, {0x43986000}, {0x43988000}, {0x4398a000}, {0x4398c000}, {0x4398e000}, {0x43990000}, {0x43992000}, {0x43994000}, {0x43996000}, {0x43998000}, {0x4399a000}, {0x4399c000}, {0x4399e000}, {0x439a0000}, {0x439a2000}, {0x439a4000}, {0x439a6000}, {0x439a8000}, {0x439aa000}, {0x439ac000}, {0x439ae000}, {0x439b0000}, {0x439b2000}, {0x439b4000}, {0x439b6000}, {0x439b8000}, {0x439ba000}, {0x439bc000}, {0x439be000}, {0x439c0000}, {0x439c2000}, {0x439c4000}, {0x439c6000}, {0x439c8000}, {0x439ca000}, {0x439cc000}, {0x439ce000}, {0x439d0000}, {0x439d2000}, {0x439d4000}, {0x439d6000}, {0x439d8000}, {0x439da000}, {0x439dc000}, {0x439de000}, {0x439e0000}, {0x439e2000}, {0x439e4000}, {0x439e6000}, {0x439e8000}, {0x439ea000}, {0x439ec000}, {0x439ee000}, {0x439f0000}, {0x439f2000}, {0x439f4000}, {0x439f6000}, {0x439f8000}, {0x439fa000}, {0x439fc000}, {0x439fe000}, {0x43a00000}, {0x43a02000}, {0x43a04000}, {0x43a06000}, {0x43a08000}, {0x43a0a000}, {0x43a0c000}, {0x43a0e000}, {0x43a10000}, {0x43a12000}, {0x43a14000}, {0x43a16000}, {0x43a18000}, {0x43a1a000}, {0x43a1c000}, {0x43a1e000}, {0x43a20000}, {0x43a22000}, {0x43a24000}, {0x43a26000}, {0x43a28000}, {0x43a2a000}, {0x43a2c000}, {0x43a2e000}, {0x43a30000}, {0x43a32000}, {0x43a34000}, {0x43a36000}, {0x43a38000}, {0x43a3a000}, {0x43a3c000}, {0x43a3e000}, {0x43a40000}, {0x43a42000}, {0x43a44000}, {0x43a46000}, {0x43a48000}, {0x43a4a000}, {0x43a4c000}, {0x43a4e000}, {0x43a50000}, {0x43a52000}, {0x43a54000}, {0x43a56000}, {0x43a58000}, {0x43a5a000}, {0x43a5c000}, {0x43a5e000}, {0x43a60000}, {0x43a62000}, {0x43a64000}, {0x43a66000}, {0x43a68000}, {0x43a6a000}, {0x43a6c000}, {0x43a6e000}, {0x43a70000}, {0x43a72000}, {0x43a74000}, {0x43a76000}, {0x43a78000}, {0x43a7a000}, {0x43a7c000}, {0x43a7e000}, {0x43a80000}, {0x43a82000}, {0x43a84000}, {0x43a86000}, {0x43a88000}, {0x43a8a000}, {0x43a8c000}, {0x43a8e000}, {0x43a90000}, {0x43a92000}, {0x43a94000}, {0x43a96000}, {0x43a98000}, {0x43a9a000}, {0x43a9c000}, {0x43a9e000}, {0x43aa0000}, {0x43aa2000}, {0x43aa4000}, {0x43aa6000}, {0x43aa8000}, {0x43aaa000}, {0x43aac000}, {0x43aae000}, {0x43ab0000}, {0x43ab2000}, {0x43ab4000}, {0x43ab6000}, {0x43ab8000}, {0x43aba000}, {0x43abc000}, {0x43abe000}, {0x43ac0000}, {0x43ac2000}, {0x43ac4000}, {0x43ac6000}, {0x43ac8000}, {0x43aca000}, {0x43acc000}, {0x43ace000}, {0x43ad0000}, {0x43ad2000}, {0x43ad4000}, {0x43ad6000}, {0x43ad8000}, {0x43ada000}, {0x43adc000}, {0x43ade000}, {0x43ae0000}, {0x43ae2000}, {0x43ae4000}, {0x43ae6000}, {0x43ae8000}, {0x43aea000}, {0x43aec000}, {0x43aee000}, {0x43af0000}, {0x43af2000}, {0x43af4000}, {0x43af6000}, {0x43af8000}, {0x43afa000}, {0x43afc000}, {0x43afe000}, {0x43b00000}, {0x43b02000}, {0x43b04000}, {0x43b06000}, {0x43b08000}, {0x43b0a000}, {0x43b0c000}, {0x43b0e000}, {0x43b10000}, {0x43b12000}, {0x43b14000}, {0x43b16000}, {0x43b18000}, {0x43b1a000}, {0x43b1c000}, {0x43b1e000}, {0x43b20000}, {0x43b22000}, {0x43b24000}, {0x43b26000}, {0x43b28000}, {0x43b2a000}, {0x43b2c000}, {0x43b2e000}, {0x43b30000}, {0x43b32000}, {0x43b34000}, {0x43b36000}, {0x43b38000}, {0x43b3a000}, {0x43b3c000}, {0x43b3e000}, {0x43b40000}, {0x43b42000}, {0x43b44000}, {0x43b46000}, {0x43b48000}, {0x43b4a000}, {0x43b4c000}, {0x43b4e000}, {0x43b50000}, {0x43b52000}, {0x43b54000}, {0x43b56000}, {0x43b58000}, {0x43b5a000}, {0x43b5c000}, {0x43b5e000}, {0x43b60000}, {0x43b62000}, {0x43b64000}, {0x43b66000}, {0x43b68000}, {0x43b6a000}, {0x43b6c000}, {0x43b6e000}, {0x43b70000}, {0x43b72000}, {0x43b74000}, {0x43b76000}, {0x43b78000}, {0x43b7a000}, {0x43b7c000}, {0x43b7e000}, {0x43b80000}, {0x43b82000}, {0x43b84000}, {0x43b86000}, {0x43b88000}, {0x43b8a000}, {0x43b8c000}, {0x43b8e000}, {0x43b90000}, {0x43b92000}, {0x43b94000}, {0x43b96000}, {0x43b98000}, {0x43b9a000}, {0x43b9c000}, {0x43b9e000}, {0x43ba0000}, {0x43ba2000}, {0x43ba4000}, {0x43ba6000}, {0x43ba8000}, {0x43baa000}, {0x43bac000}, {0x43bae000}, {0x43bb0000}, {0x43bb2000}, {0x43bb4000}, {0x43bb6000}, {0x43bb8000}, {0x43bba000}, {0x43bbc000}, {0x43bbe000}, {0x43bc0000}, {0x43bc2000}, {0x43bc4000}, {0x43bc6000}, {0x43bc8000}, {0x43bca000}, {0x43bcc000}, {0x43bce000}, {0x43bd0000}, {0x43bd2000}, {0x43bd4000}, {0x43bd6000}, {0x43bd8000}, {0x43bda000}, {0x43bdc000}, {0x43bde000}, {0x43be0000}, {0x43be2000}, {0x43be4000}, {0x43be6000}, {0x43be8000}, {0x43bea000}, {0x43bec000}, {0x43bee000}, {0x43bf0000}, {0x43bf2000}, {0x43bf4000}, {0x43bf6000}, {0x43bf8000}, {0x43bfa000}, {0x43bfc000}, {0x43bfe000}, {0x43c00000}, {0x43c02000}, {0x43c04000}, {0x43c06000}, {0x43c08000}, {0x43c0a000}, {0x43c0c000}, {0x43c0e000}, {0x43c10000}, {0x43c12000}, {0x43c14000}, {0x43c16000}, {0x43c18000}, {0x43c1a000}, {0x43c1c000}, {0x43c1e000}, {0x43c20000}, {0x43c22000}, {0x43c24000}, {0x43c26000}, {0x43c28000}, {0x43c2a000}, {0x43c2c000}, {0x43c2e000}, {0x43c30000}, {0x43c32000}, {0x43c34000}, {0x43c36000}, {0x43c38000}, {0x43c3a000}, {0x43c3c000}, {0x43c3e000}, {0x43c40000}, {0x43c42000}, {0x43c44000}, {0x43c46000}, {0x43c48000}, {0x43c4a000}, {0x43c4c000}, {0x43c4e000}, {0x43c50000}, {0x43c52000}, {0x43c54000}, {0x43c56000}, {0x43c58000}, {0x43c5a000}, {0x43c5c000}, {0x43c5e000}, {0x43c60000}, {0x43c62000}, {0x43c64000}, {0x43c66000}, {0x43c68000}, {0x43c6a000}, {0x43c6c000}, {0x43c6e000}, {0x43c70000}, {0x43c72000}, {0x43c74000}, {0x43c76000}, {0x43c78000}, {0x43c7a000}, {0x43c7c000}, {0x43c7e000}, {0x43c80000}, {0x43c82000}, {0x43c84000}, {0x43c86000}, {0x43c88000}, {0x43c8a000}, {0x43c8c000}, {0x43c8e000}, {0x43c90000}, {0x43c92000}, {0x43c94000}, {0x43c96000}, {0x43c98000}, {0x43c9a000}, {0x43c9c000}, {0x43c9e000}, {0x43ca0000}, {0x43ca2000}, {0x43ca4000}, {0x43ca6000}, {0x43ca8000}, {0x43caa000}, {0x43cac000}, {0x43cae000}, {0x43cb0000}, {0x43cb2000}, {0x43cb4000}, {0x43cb6000}, {0x43cb8000}, {0x43cba000}, {0x43cbc000}, {0x43cbe000}, {0x43cc0000}, {0x43cc2000}, {0x43cc4000}, {0x43cc6000}, {0x43cc8000}, {0x43cca000}, {0x43ccc000}, {0x43cce000}, {0x43cd0000}, {0x43cd2000}, {0x43cd4000}, {0x43cd6000}, {0x43cd8000}, {0x43cda000}, {0x43cdc000}, {0x43cde000}, {0x43ce0000}, {0x43ce2000}, {0x43ce4000}, {0x43ce6000}, {0x43ce8000}, {0x43cea000}, {0x43cec000}, {0x43cee000}, {0x43cf0000}, {0x43cf2000}, {0x43cf4000}, {0x43cf6000}, {0x43cf8000}, {0x43cfa000}, {0x43cfc000}, {0x43cfe000}, {0x43d00000}, {0x43d02000}, {0x43d04000}, {0x43d06000}, {0x43d08000}, {0x43d0a000}, {0x43d0c000}, {0x43d0e000}, {0x43d10000}, {0x43d12000}, {0x43d14000}, {0x43d16000}, {0x43d18000}, {0x43d1a000}, {0x43d1c000}, {0x43d1e000}, {0x43d20000}, {0x43d22000}, {0x43d24000}, {0x43d26000}, {0x43d28000}, {0x43d2a000}, {0x43d2c000}, {0x43d2e000}, {0x43d30000}, {0x43d32000}, {0x43d34000}, {0x43d36000}, {0x43d38000}, {0x43d3a000}, {0x43d3c000}, {0x43d3e000}, {0x43d40000}, {0x43d42000}, {0x43d44000}, {0x43d46000}, {0x43d48000}, {0x43d4a000}, {0x43d4c000}, {0x43d4e000}, {0x43d50000}, {0x43d52000}, {0x43d54000}, {0x43d56000}, {0x43d58000}, {0x43d5a000}, {0x43d5c000}, {0x43d5e000}, {0x43d60000}, {0x43d62000}, {0x43d64000}, {0x43d66000}, {0x43d68000}, {0x43d6a000}, {0x43d6c000}, {0x43d6e000}, {0x43d70000}, {0x43d72000}, {0x43d74000}, {0x43d76000}, {0x43d78000}, {0x43d7a000}, {0x43d7c000}, {0x43d7e000}, {0x43d80000}, {0x43d82000}, {0x43d84000}, {0x43d86000}, {0x43d88000}, {0x43d8a000}, {0x43d8c000}, {0x43d8e000}, {0x43d90000}, {0x43d92000}, {0x43d94000}, {0x43d96000}, {0x43d98000}, {0x43d9a000}, {0x43d9c000}, {0x43d9e000}, {0x43da0000}, {0x43da2000}, {0x43da4000}, {0x43da6000}, {0x43da8000}, {0x43daa000}, {0x43dac000}, {0x43dae000}, {0x43db0000}, {0x43db2000}, {0x43db4000}, {0x43db6000}, {0x43db8000}, {0x43dba000}, {0x43dbc000}, {0x43dbe000}, {0x43dc0000}, {0x43dc2000}, {0x43dc4000}, {0x43dc6000}, {0x43dc8000}, {0x43dca000}, {0x43dcc000}, {0x43dce000}, {0x43dd0000}, {0x43dd2000}, {0x43dd4000}, {0x43dd6000}, {0x43dd8000}, {0x43dda000}, {0x43ddc000}, {0x43dde000}, {0x43de0000}, {0x43de2000}, {0x43de4000}, {0x43de6000}, {0x43de8000}, {0x43dea000}, {0x43dec000}, {0x43dee000}, {0x43df0000}, {0x43df2000}, {0x43df4000}, {0x43df6000}, {0x43df8000}, {0x43dfa000}, {0x43dfc000}, {0x43dfe000}, {0x43e00000}, {0x43e02000}, {0x43e04000}, {0x43e06000}, {0x43e08000}, {0x43e0a000}, {0x43e0c000}, {0x43e0e000}, {0x43e10000}, {0x43e12000}, {0x43e14000}, {0x43e16000}, {0x43e18000}, {0x43e1a000}, {0x43e1c000}, {0x43e1e000}, {0x43e20000}, {0x43e22000}, {0x43e24000}, {0x43e26000}, {0x43e28000}, {0x43e2a000}, {0x43e2c000}, {0x43e2e000}, {0x43e30000}, {0x43e32000}, {0x43e34000}, {0x43e36000}, {0x43e38000}, {0x43e3a000}, {0x43e3c000}, {0x43e3e000}, {0x43e40000}, {0x43e42000}, {0x43e44000}, {0x43e46000}, {0x43e48000}, {0x43e4a000}, {0x43e4c000}, {0x43e4e000}, {0x43e50000}, {0x43e52000}, {0x43e54000}, {0x43e56000}, {0x43e58000}, {0x43e5a000}, {0x43e5c000}, {0x43e5e000}, {0x43e60000}, {0x43e62000}, {0x43e64000}, {0x43e66000}, {0x43e68000}, {0x43e6a000}, {0x43e6c000}, {0x43e6e000}, {0x43e70000}, {0x43e72000}, {0x43e74000}, {0x43e76000}, {0x43e78000}, {0x43e7a000}, {0x43e7c000}, {0x43e7e000}, {0x43e80000}, {0x43e82000}, {0x43e84000}, {0x43e86000}, {0x43e88000}, {0x43e8a000}, {0x43e8c000}, {0x43e8e000}, {0x43e90000}, {0x43e92000}, {0x43e94000}, {0x43e96000}, {0x43e98000}, {0x43e9a000}, {0x43e9c000}, {0x43e9e000}, {0x43ea0000}, {0x43ea2000}, {0x43ea4000}, {0x43ea6000}, {0x43ea8000}, {0x43eaa000}, {0x43eac000}, {0x43eae000}, {0x43eb0000}, {0x43eb2000}, {0x43eb4000}, {0x43eb6000}, {0x43eb8000}, {0x43eba000}, {0x43ebc000}, {0x43ebe000}, {0x43ec0000}, {0x43ec2000}, {0x43ec4000}, {0x43ec6000}, {0x43ec8000}, {0x43eca000}, {0x43ecc000}, {0x43ece000}, {0x43ed0000}, {0x43ed2000}, {0x43ed4000}, {0x43ed6000}, {0x43ed8000}, {0x43eda000}, {0x43edc000}, {0x43ede000}, {0x43ee0000}, {0x43ee2000}, {0x43ee4000}, {0x43ee6000}, {0x43ee8000}, {0x43eea000}, {0x43eec000}, {0x43eee000}, {0x43ef0000}, {0x43ef2000}, {0x43ef4000}, {0x43ef6000}, {0x43ef8000}, {0x43efa000}, {0x43efc000}, {0x43efe000}, {0x43f00000}, {0x43f02000}, {0x43f04000}, {0x43f06000}, {0x43f08000}, {0x43f0a000}, {0x43f0c000}, {0x43f0e000}, {0x43f10000}, {0x43f12000}, {0x43f14000}, {0x43f16000}, {0x43f18000}, {0x43f1a000}, {0x43f1c000}, {0x43f1e000}, {0x43f20000}, {0x43f22000}, {0x43f24000}, {0x43f26000}, {0x43f28000}, {0x43f2a000}, {0x43f2c000}, {0x43f2e000}, {0x43f30000}, {0x43f32000}, {0x43f34000}, {0x43f36000}, {0x43f38000}, {0x43f3a000}, {0x43f3c000}, {0x43f3e000}, {0x43f40000}, {0x43f42000}, {0x43f44000}, {0x43f46000}, {0x43f48000}, {0x43f4a000}, {0x43f4c000}, {0x43f4e000}, {0x43f50000}, {0x43f52000}, {0x43f54000}, {0x43f56000}, {0x43f58000}, {0x43f5a000}, {0x43f5c000}, {0x43f5e000}, {0x43f60000}, {0x43f62000}, {0x43f64000}, {0x43f66000}, {0x43f68000}, {0x43f6a000}, {0x43f6c000}, {0x43f6e000}, {0x43f70000}, {0x43f72000}, {0x43f74000}, {0x43f76000}, {0x43f78000}, {0x43f7a000}, {0x43f7c000}, {0x43f7e000}, {0x43f80000}, {0x43f82000}, {0x43f84000}, {0x43f86000}, {0x43f88000}, {0x43f8a000}, {0x43f8c000}, {0x43f8e000}, {0x43f90000}, {0x43f92000}, {0x43f94000}, {0x43f96000}, {0x43f98000}, {0x43f9a000}, {0x43f9c000}, {0x43f9e000}, {0x43fa0000}, {0x43fa2000}, {0x43fa4000}, {0x43fa6000}, {0x43fa8000}, {0x43faa000}, {0x43fac000}, {0x43fae000}, {0x43fb0000}, {0x43fb2000}, {0x43fb4000}, {0x43fb6000}, {0x43fb8000}, {0x43fba000}, {0x43fbc000}, {0x43fbe000}, {0x43fc0000}, {0x43fc2000}, {0x43fc4000}, {0x43fc6000}, {0x43fc8000}, {0x43fca000}, {0x43fcc000}, {0x43fce000}, {0x43fd0000}, {0x43fd2000}, {0x43fd4000}, {0x43fd6000}, {0x43fd8000}, {0x43fda000}, {0x43fdc000}, {0x43fde000}, {0x43fe0000}, {0x43fe2000}, {0x43fe4000}, {0x43fe6000}, {0x43fe8000}, {0x43fea000}, {0x43fec000}, {0x43fee000}, {0x43ff0000}, {0x43ff2000}, {0x43ff4000}, {0x43ff6000}, {0x43ff8000}, {0x43ffa000}, {0x43ffc000}, {0x43ffe000}, {0x44000000}, {0x44002000}, {0x44004000}, {0x44006000}, {0x44008000}, {0x4400a000}, {0x4400c000}, {0x4400e000}, {0x44010000}, {0x44012000}, {0x44014000}, {0x44016000}, {0x44018000}, {0x4401a000}, {0x4401c000}, {0x4401e000}, {0x44020000}, {0x44022000}, {0x44024000}, {0x44026000}, {0x44028000}, {0x4402a000}, {0x4402c000}, {0x4402e000}, {0x44030000}, {0x44032000}, {0x44034000}, {0x44036000}, {0x44038000}, {0x4403a000}, {0x4403c000}, {0x4403e000}, {0x44040000}, {0x44042000}, {0x44044000}, {0x44046000}, {0x44048000}, {0x4404a000}, {0x4404c000}, {0x4404e000}, {0x44050000}, {0x44052000}, {0x44054000}, {0x44056000}, {0x44058000}, {0x4405a000}, {0x4405c000}, {0x4405e000}, {0x44060000}, {0x44062000}, {0x44064000}, {0x44066000}, {0x44068000}, {0x4406a000}, {0x4406c000}, {0x4406e000}, {0x44070000}, {0x44072000}, {0x44074000}, {0x44076000}, {0x44078000}, {0x4407a000}, {0x4407c000}, {0x4407e000}, {0x44080000}, {0x44082000}, {0x44084000}, {0x44086000}, {0x44088000}, {0x4408a000}, {0x4408c000}, {0x4408e000}, {0x44090000}, {0x44092000}, {0x44094000}, {0x44096000}, {0x44098000}, {0x4409a000}, {0x4409c000}, {0x4409e000}, {0x440a0000}, {0x440a2000}, {0x440a4000}, {0x440a6000}, {0x440a8000}, {0x440aa000}, {0x440ac000}, {0x440ae000}, {0x440b0000}, {0x440b2000}, {0x440b4000}, {0x440b6000}, {0x440b8000}, {0x440ba000}, {0x440bc000}, {0x440be000}, {0x440c0000}, {0x440c2000}, {0x440c4000}, {0x440c6000}, {0x440c8000}, {0x440ca000}, {0x440cc000}, {0x440ce000}, {0x440d0000}, {0x440d2000}, {0x440d4000}, {0x440d6000}, {0x440d8000}, {0x440da000}, {0x440dc000}, {0x440de000}, {0x440e0000}, {0x440e2000}, {0x440e4000}, {0x440e6000}, {0x440e8000}, {0x440ea000}, {0x440ec000}, {0x440ee000}, {0x440f0000}, {0x440f2000}, {0x440f4000}, {0x440f6000}, {0x440f8000}, {0x440fa000}, {0x440fc000}, {0x440fe000}, {0x44100000}, {0x44102000}, {0x44104000}, {0x44106000}, {0x44108000}, {0x4410a000}, {0x4410c000}, {0x4410e000}, {0x44110000}, {0x44112000}, {0x44114000}, {0x44116000}, {0x44118000}, {0x4411a000}, {0x4411c000}, {0x4411e000}, {0x44120000}, {0x44122000}, {0x44124000}, {0x44126000}, {0x44128000}, {0x4412a000}, {0x4412c000}, {0x4412e000}, {0x44130000}, {0x44132000}, {0x44134000}, {0x44136000}, {0x44138000}, {0x4413a000}, {0x4413c000}, {0x4413e000}, {0x44140000}, {0x44142000}, {0x44144000}, {0x44146000}, {0x44148000}, {0x4414a000}, {0x4414c000}, {0x4414e000}, {0x44150000}, {0x44152000}, {0x44154000}, {0x44156000}, {0x44158000}, {0x4415a000}, {0x4415c000}, {0x4415e000}, {0x44160000}, {0x44162000}, {0x44164000}, {0x44166000}, {0x44168000}, {0x4416a000}, {0x4416c000}, {0x4416e000}, {0x44170000}, {0x44172000}, {0x44174000}, {0x44176000}, {0x44178000}, {0x4417a000}, {0x4417c000}, {0x4417e000}, {0x44180000}, {0x44182000}, {0x44184000}, {0x44186000}, {0x44188000}, {0x4418a000}, {0x4418c000}, {0x4418e000}, {0x44190000}, {0x44192000}, {0x44194000}, {0x44196000}, {0x44198000}, {0x4419a000}, {0x4419c000}, {0x4419e000}, {0x441a0000}, {0x441a2000}, {0x441a4000}, {0x441a6000}, {0x441a8000}, {0x441aa000}, {0x441ac000}, {0x441ae000}, {0x441b0000}, {0x441b2000}, {0x441b4000}, {0x441b6000}, {0x441b8000}, {0x441ba000}, {0x441bc000}, {0x441be000}, {0x441c0000}, {0x441c2000}, {0x441c4000}, {0x441c6000}, {0x441c8000}, {0x441ca000}, {0x441cc000}, {0x441ce000}, {0x441d0000}, {0x441d2000}, {0x441d4000}, {0x441d6000}, {0x441d8000}, {0x441da000}, {0x441dc000}, {0x441de000}, {0x441e0000}, {0x441e2000}, {0x441e4000}, {0x441e6000}, {0x441e8000}, {0x441ea000}, {0x441ec000}, {0x441ee000}, {0x441f0000}, {0x441f2000}, {0x441f4000}, {0x441f6000}, {0x441f8000}, {0x441fa000}, {0x441fc000}, {0x441fe000}, {0x44200000}, {0x44202000}, {0x44204000}, {0x44206000}, {0x44208000}, {0x4420a000}, {0x4420c000}, {0x4420e000}, {0x44210000}, {0x44212000}, {0x44214000}, {0x44216000}, {0x44218000}, {0x4421a000}, {0x4421c000}, {0x4421e000}, {0x44220000}, {0x44222000}, {0x44224000}, {0x44226000}, {0x44228000}, {0x4422a000}, {0x4422c000}, {0x4422e000}, {0x44230000}, {0x44232000}, {0x44234000}, {0x44236000}, {0x44238000}, {0x4423a000}, {0x4423c000}, {0x4423e000}, {0x44240000}, {0x44242000}, {0x44244000}, {0x44246000}, {0x44248000}, {0x4424a000}, {0x4424c000}, {0x4424e000}, {0x44250000}, {0x44252000}, {0x44254000}, {0x44256000}, {0x44258000}, {0x4425a000}, {0x4425c000}, {0x4425e000}, {0x44260000}, {0x44262000}, {0x44264000}, {0x44266000}, {0x44268000}, {0x4426a000}, {0x4426c000}, {0x4426e000}, {0x44270000}, {0x44272000}, {0x44274000}, {0x44276000}, {0x44278000}, {0x4427a000}, {0x4427c000}, {0x4427e000}, {0x44280000}, {0x44282000}, {0x44284000}, {0x44286000}, {0x44288000}, {0x4428a000}, {0x4428c000}, {0x4428e000}, {0x44290000}, {0x44292000}, {0x44294000}, {0x44296000}, {0x44298000}, {0x4429a000}, {0x4429c000}, {0x4429e000}, {0x442a0000}, {0x442a2000}, {0x442a4000}, {0x442a6000}, {0x442a8000}, {0x442aa000}, {0x442ac000}, {0x442ae000}, {0x442b0000}, {0x442b2000}, {0x442b4000}, {0x442b6000}, {0x442b8000}, {0x442ba000}, {0x442bc000}, {0x442be000}, {0x442c0000}, {0x442c2000}, {0x442c4000}, {0x442c6000}, {0x442c8000}, {0x442ca000}, {0x442cc000}, {0x442ce000}, {0x442d0000}, {0x442d2000}, {0x442d4000}, {0x442d6000}, {0x442d8000}, {0x442da000}, {0x442dc000}, {0x442de000}, {0x442e0000}, {0x442e2000}, {0x442e4000}, {0x442e6000}, {0x442e8000}, {0x442ea000}, {0x442ec000}, {0x442ee000}, {0x442f0000}, {0x442f2000}, {0x442f4000}, {0x442f6000}, {0x442f8000}, {0x442fa000}, {0x442fc000}, {0x442fe000}, {0x44300000}, {0x44302000}, {0x44304000}, {0x44306000}, {0x44308000}, {0x4430a000}, {0x4430c000}, {0x4430e000}, {0x44310000}, {0x44312000}, {0x44314000}, {0x44316000}, {0x44318000}, {0x4431a000}, {0x4431c000}, {0x4431e000}, {0x44320000}, {0x44322000}, {0x44324000}, {0x44326000}, {0x44328000}, {0x4432a000}, {0x4432c000}, {0x4432e000}, {0x44330000}, {0x44332000}, {0x44334000}, {0x44336000}, {0x44338000}, {0x4433a000}, {0x4433c000}, {0x4433e000}, {0x44340000}, {0x44342000}, {0x44344000}, {0x44346000}, {0x44348000}, {0x4434a000}, {0x4434c000}, {0x4434e000}, {0x44350000}, {0x44352000}, {0x44354000}, {0x44356000}, {0x44358000}, {0x4435a000}, {0x4435c000}, {0x4435e000}, {0x44360000}, {0x44362000}, {0x44364000}, {0x44366000}, {0x44368000}, {0x4436a000}, {0x4436c000}, {0x4436e000}, {0x44370000}, {0x44372000}, {0x44374000}, {0x44376000}, {0x44378000}, {0x4437a000}, {0x4437c000}, {0x4437e000}, {0x44380000}, {0x44382000}, {0x44384000}, {0x44386000}, {0x44388000}, {0x4438a000}, {0x4438c000}, {0x4438e000}, {0x44390000}, {0x44392000}, {0x44394000}, {0x44396000}, {0x44398000}, {0x4439a000}, {0x4439c000}, {0x4439e000}, {0x443a0000}, {0x443a2000}, {0x443a4000}, {0x443a6000}, {0x443a8000}, {0x443aa000}, {0x443ac000}, {0x443ae000}, {0x443b0000}, {0x443b2000}, {0x443b4000}, {0x443b6000}, {0x443b8000}, {0x443ba000}, {0x443bc000}, {0x443be000}, {0x443c0000}, {0x443c2000}, {0x443c4000}, {0x443c6000}, {0x443c8000}, {0x443ca000}, {0x443cc000}, {0x443ce000}, {0x443d0000}, {0x443d2000}, {0x443d4000}, {0x443d6000}, {0x443d8000}, {0x443da000}, {0x443dc000}, {0x443de000}, {0x443e0000}, {0x443e2000}, {0x443e4000}, {0x443e6000}, {0x443e8000}, {0x443ea000}, {0x443ec000}, {0x443ee000}, {0x443f0000}, {0x443f2000}, {0x443f4000}, {0x443f6000}, {0x443f8000}, {0x443fa000}, {0x443fc000}, {0x443fe000}, {0x44400000}, {0x44402000}, {0x44404000}, {0x44406000}, {0x44408000}, {0x4440a000}, {0x4440c000}, {0x4440e000}, {0x44410000}, {0x44412000}, {0x44414000}, {0x44416000}, {0x44418000}, {0x4441a000}, {0x4441c000}, {0x4441e000}, {0x44420000}, {0x44422000}, {0x44424000}, {0x44426000}, {0x44428000}, {0x4442a000}, {0x4442c000}, {0x4442e000}, {0x44430000}, {0x44432000}, {0x44434000}, {0x44436000}, {0x44438000}, {0x4443a000}, {0x4443c000}, {0x4443e000}, {0x44440000}, {0x44442000}, {0x44444000}, {0x44446000}, {0x44448000}, {0x4444a000}, {0x4444c000}, {0x4444e000}, {0x44450000}, {0x44452000}, {0x44454000}, {0x44456000}, {0x44458000}, {0x4445a000}, {0x4445c000}, {0x4445e000}, {0x44460000}, {0x44462000}, {0x44464000}, {0x44466000}, {0x44468000}, {0x4446a000}, {0x4446c000}, {0x4446e000}, {0x44470000}, {0x44472000}, {0x44474000}, {0x44476000}, {0x44478000}, {0x4447a000}, {0x4447c000}, {0x4447e000}, {0x44480000}, {0x44482000}, {0x44484000}, {0x44486000}, {0x44488000}, {0x4448a000}, {0x4448c000}, {0x4448e000}, {0x44490000}, {0x44492000}, {0x44494000}, {0x44496000}, {0x44498000}, {0x4449a000}, {0x4449c000}, {0x4449e000}, {0x444a0000}, {0x444a2000}, {0x444a4000}, {0x444a6000}, {0x444a8000}, {0x444aa000}, {0x444ac000}, {0x444ae000}, {0x444b0000}, {0x444b2000}, {0x444b4000}, {0x444b6000}, {0x444b8000}, {0x444ba000}, {0x444bc000}, {0x444be000}, {0x444c0000}, {0x444c2000}, {0x444c4000}, {0x444c6000}, {0x444c8000}, {0x444ca000}, {0x444cc000}, {0x444ce000}, {0x444d0000}, {0x444d2000}, {0x444d4000}, {0x444d6000}, {0x444d8000}, {0x444da000}, {0x444dc000}, {0x444de000}, {0x444e0000}, {0x444e2000}, {0x444e4000}, {0x444e6000}, {0x444e8000}, {0x444ea000}, {0x444ec000}, {0x444ee000}, {0x444f0000}, {0x444f2000}, {0x444f4000}, {0x444f6000}, {0x444f8000}, {0x444fa000}, {0x444fc000}, {0x444fe000}, {0x44500000}, {0x44502000}, {0x44504000}, {0x44506000}, {0x44508000}, {0x4450a000}, {0x4450c000}, {0x4450e000}, {0x44510000}, {0x44512000}, {0x44514000}, {0x44516000}, {0x44518000}, {0x4451a000}, {0x4451c000}, {0x4451e000}, {0x44520000}, {0x44522000}, {0x44524000}, {0x44526000}, {0x44528000}, {0x4452a000}, {0x4452c000}, {0x4452e000}, {0x44530000}, {0x44532000}, {0x44534000}, {0x44536000}, {0x44538000}, {0x4453a000}, {0x4453c000}, {0x4453e000}, {0x44540000}, {0x44542000}, {0x44544000}, {0x44546000}, {0x44548000}, {0x4454a000}, {0x4454c000}, {0x4454e000}, {0x44550000}, {0x44552000}, {0x44554000}, {0x44556000}, {0x44558000}, {0x4455a000}, {0x4455c000}, {0x4455e000}, {0x44560000}, {0x44562000}, {0x44564000}, {0x44566000}, {0x44568000}, {0x4456a000}, {0x4456c000}, {0x4456e000}, {0x44570000}, {0x44572000}, {0x44574000}, {0x44576000}, {0x44578000}, {0x4457a000}, {0x4457c000}, {0x4457e000}, {0x44580000}, {0x44582000}, {0x44584000}, {0x44586000}, {0x44588000}, {0x4458a000}, {0x4458c000}, {0x4458e000}, {0x44590000}, {0x44592000}, {0x44594000}, {0x44596000}, {0x44598000}, {0x4459a000}, {0x4459c000}, {0x4459e000}, {0x445a0000}, {0x445a2000}, {0x445a4000}, {0x445a6000}, {0x445a8000}, {0x445aa000}, {0x445ac000}, {0x445ae000}, {0x445b0000}, {0x445b2000}, {0x445b4000}, {0x445b6000}, {0x445b8000}, {0x445ba000}, {0x445bc000}, {0x445be000}, {0x445c0000}, {0x445c2000}, {0x445c4000}, {0x445c6000}, {0x445c8000}, {0x445ca000}, {0x445cc000}, {0x445ce000}, {0x445d0000}, {0x445d2000}, {0x445d4000}, {0x445d6000}, {0x445d8000}, {0x445da000}, {0x445dc000}, {0x445de000}, {0x445e0000}, {0x445e2000}, {0x445e4000}, {0x445e6000}, {0x445e8000}, {0x445ea000}, {0x445ec000}, {0x445ee000}, {0x445f0000}, {0x445f2000}, {0x445f4000}, {0x445f6000}, {0x445f8000}, {0x445fa000}, {0x445fc000}, {0x445fe000}, {0x44600000}, {0x44602000}, {0x44604000}, {0x44606000}, {0x44608000}, {0x4460a000}, {0x4460c000}, {0x4460e000}, {0x44610000}, {0x44612000}, {0x44614000}, {0x44616000}, {0x44618000}, {0x4461a000}, {0x4461c000}, {0x4461e000}, {0x44620000}, {0x44622000}, {0x44624000}, {0x44626000}, {0x44628000}, {0x4462a000}, {0x4462c000}, {0x4462e000}, {0x44630000}, {0x44632000}, {0x44634000}, {0x44636000}, {0x44638000}, {0x4463a000}, {0x4463c000}, {0x4463e000}, {0x44640000}, {0x44642000}, {0x44644000}, {0x44646000}, {0x44648000}, {0x4464a000}, {0x4464c000}, {0x4464e000}, {0x44650000}, {0x44652000}, {0x44654000}, {0x44656000}, {0x44658000}, {0x4465a000}, {0x4465c000}, {0x4465e000}, {0x44660000}, {0x44662000}, {0x44664000}, {0x44666000}, {0x44668000}, {0x4466a000}, {0x4466c000}, {0x4466e000}, {0x44670000}, {0x44672000}, {0x44674000}, {0x44676000}, {0x44678000}, {0x4467a000}, {0x4467c000}, {0x4467e000}, {0x44680000}, {0x44682000}, {0x44684000}, {0x44686000}, {0x44688000}, {0x4468a000}, {0x4468c000}, {0x4468e000}, {0x44690000}, {0x44692000}, {0x44694000}, {0x44696000}, {0x44698000}, {0x4469a000}, {0x4469c000}, {0x4469e000}, {0x446a0000}, {0x446a2000}, {0x446a4000}, {0x446a6000}, {0x446a8000}, {0x446aa000}, {0x446ac000}, {0x446ae000}, {0x446b0000}, {0x446b2000}, {0x446b4000}, {0x446b6000}, {0x446b8000}, {0x446ba000}, {0x446bc000}, {0x446be000}, {0x446c0000}, {0x446c2000}, {0x446c4000}, {0x446c6000}, {0x446c8000}, {0x446ca000}, {0x446cc000}, {0x446ce000}, {0x446d0000}, {0x446d2000}, {0x446d4000}, {0x446d6000}, {0x446d8000}, {0x446da000}, {0x446dc000}, {0x446de000}, {0x446e0000}, {0x446e2000}, {0x446e4000}, {0x446e6000}, {0x446e8000}, {0x446ea000}, {0x446ec000}, {0x446ee000}, {0x446f0000}, {0x446f2000}, {0x446f4000}, {0x446f6000}, {0x446f8000}, {0x446fa000}, {0x446fc000}, {0x446fe000}, {0x44700000}, {0x44702000}, {0x44704000}, {0x44706000}, {0x44708000}, {0x4470a000}, {0x4470c000}, {0x4470e000}, {0x44710000}, {0x44712000}, {0x44714000}, {0x44716000}, {0x44718000}, {0x4471a000}, {0x4471c000}, {0x4471e000}, {0x44720000}, {0x44722000}, {0x44724000}, {0x44726000}, {0x44728000}, {0x4472a000}, {0x4472c000}, {0x4472e000}, {0x44730000}, {0x44732000}, {0x44734000}, {0x44736000}, {0x44738000}, {0x4473a000}, {0x4473c000}, {0x4473e000}, {0x44740000}, {0x44742000}, {0x44744000}, {0x44746000}, {0x44748000}, {0x4474a000}, {0x4474c000}, {0x4474e000}, {0x44750000}, {0x44752000}, {0x44754000}, {0x44756000}, {0x44758000}, {0x4475a000}, {0x4475c000}, {0x4475e000}, {0x44760000}, {0x44762000}, {0x44764000}, {0x44766000}, {0x44768000}, {0x4476a000}, {0x4476c000}, {0x4476e000}, {0x44770000}, {0x44772000}, {0x44774000}, {0x44776000}, {0x44778000}, {0x4477a000}, {0x4477c000}, {0x4477e000}, {0x44780000}, {0x44782000}, {0x44784000}, {0x44786000}, {0x44788000}, {0x4478a000}, {0x4478c000}, {0x4478e000}, {0x44790000}, {0x44792000}, {0x44794000}, {0x44796000}, {0x44798000}, {0x4479a000}, {0x4479c000}, {0x4479e000}, {0x447a0000}, {0x447a2000}, {0x447a4000}, {0x447a6000}, {0x447a8000}, {0x447aa000}, {0x447ac000}, {0x447ae000}, {0x447b0000}, {0x447b2000}, {0x447b4000}, {0x447b6000}, {0x447b8000}, {0x447ba000}, {0x447bc000}, {0x447be000}, {0x447c0000}, {0x447c2000}, {0x447c4000}, {0x447c6000}, {0x447c8000}, {0x447ca000}, {0x447cc000}, {0x447ce000}, {0x447d0000}, {0x447d2000}, {0x447d4000}, {0x447d6000}, {0x447d8000}, {0x447da000}, {0x447dc000}, {0x447de000}, {0x447e0000}, {0x447e2000}, {0x447e4000}, {0x447e6000}, {0x447e8000}, {0x447ea000}, {0x447ec000}, {0x447ee000}, {0x447f0000}, {0x447f2000}, {0x447f4000}, {0x447f6000}, {0x447f8000}, {0x447fa000}, {0x447fc000}, {0x447fe000}, {0x44800000}, {0x44802000}, {0x44804000}, {0x44806000}, {0x44808000}, {0x4480a000}, {0x4480c000}, {0x4480e000}, {0x44810000}, {0x44812000}, {0x44814000}, {0x44816000}, {0x44818000}, {0x4481a000}, {0x4481c000}, {0x4481e000}, {0x44820000}, {0x44822000}, {0x44824000}, {0x44826000}, {0x44828000}, {0x4482a000}, {0x4482c000}, {0x4482e000}, {0x44830000}, {0x44832000}, {0x44834000}, {0x44836000}, {0x44838000}, {0x4483a000}, {0x4483c000}, {0x4483e000}, {0x44840000}, {0x44842000}, {0x44844000}, {0x44846000}, {0x44848000}, {0x4484a000}, {0x4484c000}, {0x4484e000}, {0x44850000}, {0x44852000}, {0x44854000}, {0x44856000}, {0x44858000}, {0x4485a000}, {0x4485c000}, {0x4485e000}, {0x44860000}, {0x44862000}, {0x44864000}, {0x44866000}, {0x44868000}, {0x4486a000}, {0x4486c000}, {0x4486e000}, {0x44870000}, {0x44872000}, {0x44874000}, {0x44876000}, {0x44878000}, {0x4487a000}, {0x4487c000}, {0x4487e000}, {0x44880000}, {0x44882000}, {0x44884000}, {0x44886000}, {0x44888000}, {0x4488a000}, {0x4488c000}, {0x4488e000}, {0x44890000}, {0x44892000}, {0x44894000}, {0x44896000}, {0x44898000}, {0x4489a000}, {0x4489c000}, {0x4489e000}, {0x448a0000}, {0x448a2000}, {0x448a4000}, {0x448a6000}, {0x448a8000}, {0x448aa000}, {0x448ac000}, {0x448ae000}, {0x448b0000}, {0x448b2000}, {0x448b4000}, {0x448b6000}, {0x448b8000}, {0x448ba000}, {0x448bc000}, {0x448be000}, {0x448c0000}, {0x448c2000}, {0x448c4000}, {0x448c6000}, {0x448c8000}, {0x448ca000}, {0x448cc000}, {0x448ce000}, {0x448d0000}, {0x448d2000}, {0x448d4000}, {0x448d6000}, {0x448d8000}, {0x448da000}, {0x448dc000}, {0x448de000}, {0x448e0000}, {0x448e2000}, {0x448e4000}, {0x448e6000}, {0x448e8000}, {0x448ea000}, {0x448ec000}, {0x448ee000}, {0x448f0000}, {0x448f2000}, {0x448f4000}, {0x448f6000}, {0x448f8000}, {0x448fa000}, {0x448fc000}, {0x448fe000}, {0x44900000}, {0x44902000}, {0x44904000}, {0x44906000}, {0x44908000}, {0x4490a000}, {0x4490c000}, {0x4490e000}, {0x44910000}, {0x44912000}, {0x44914000}, {0x44916000}, {0x44918000}, {0x4491a000}, {0x4491c000}, {0x4491e000}, {0x44920000}, {0x44922000}, {0x44924000}, {0x44926000}, {0x44928000}, {0x4492a000}, {0x4492c000}, {0x4492e000}, {0x44930000}, {0x44932000}, {0x44934000}, {0x44936000}, {0x44938000}, {0x4493a000}, {0x4493c000}, {0x4493e000}, {0x44940000}, {0x44942000}, {0x44944000}, {0x44946000}, {0x44948000}, {0x4494a000}, {0x4494c000}, {0x4494e000}, {0x44950000}, {0x44952000}, {0x44954000}, {0x44956000}, {0x44958000}, {0x4495a000}, {0x4495c000}, {0x4495e000}, {0x44960000}, {0x44962000}, {0x44964000}, {0x44966000}, {0x44968000}, {0x4496a000}, {0x4496c000}, {0x4496e000}, {0x44970000}, {0x44972000}, {0x44974000}, {0x44976000}, {0x44978000}, {0x4497a000}, {0x4497c000}, {0x4497e000}, {0x44980000}, {0x44982000}, {0x44984000}, {0x44986000}, {0x44988000}, {0x4498a000}, {0x4498c000}, {0x4498e000}, {0x44990000}, {0x44992000}, {0x44994000}, {0x44996000}, {0x44998000}, {0x4499a000}, {0x4499c000}, {0x4499e000}, {0x449a0000}, {0x449a2000}, {0x449a4000}, {0x449a6000}, {0x449a8000}, {0x449aa000}, {0x449ac000}, {0x449ae000}, {0x449b0000}, {0x449b2000}, {0x449b4000}, {0x449b6000}, {0x449b8000}, {0x449ba000}, {0x449bc000}, {0x449be000}, {0x449c0000}, {0x449c2000}, {0x449c4000}, {0x449c6000}, {0x449c8000}, {0x449ca000}, {0x449cc000}, {0x449ce000}, {0x449d0000}, {0x449d2000}, {0x449d4000}, {0x449d6000}, {0x449d8000}, {0x449da000}, {0x449dc000}, {0x449de000}, {0x449e0000}, {0x449e2000}, {0x449e4000}, {0x449e6000}, {0x449e8000}, {0x449ea000}, {0x449ec000}, {0x449ee000}, {0x449f0000}, {0x449f2000}, {0x449f4000}, {0x449f6000}, {0x449f8000}, {0x449fa000}, {0x449fc000}, {0x449fe000}, {0x44a00000}, {0x44a02000}, {0x44a04000}, {0x44a06000}, {0x44a08000}, {0x44a0a000}, {0x44a0c000}, {0x44a0e000}, {0x44a10000}, {0x44a12000}, {0x44a14000}, {0x44a16000}, {0x44a18000}, {0x44a1a000}, {0x44a1c000}, {0x44a1e000}, {0x44a20000}, {0x44a22000}, {0x44a24000}, {0x44a26000}, {0x44a28000}, {0x44a2a000}, {0x44a2c000}, {0x44a2e000}, {0x44a30000}, {0x44a32000}, {0x44a34000}, {0x44a36000}, {0x44a38000}, {0x44a3a000}, {0x44a3c000}, {0x44a3e000}, {0x44a40000}, {0x44a42000}, {0x44a44000}, {0x44a46000}, {0x44a48000}, {0x44a4a000}, {0x44a4c000}, {0x44a4e000}, {0x44a50000}, {0x44a52000}, {0x44a54000}, {0x44a56000}, {0x44a58000}, {0x44a5a000}, {0x44a5c000}, {0x44a5e000}, {0x44a60000}, {0x44a62000}, {0x44a64000}, {0x44a66000}, {0x44a68000}, {0x44a6a000}, {0x44a6c000}, {0x44a6e000}, {0x44a70000}, {0x44a72000}, {0x44a74000}, {0x44a76000}, {0x44a78000}, {0x44a7a000}, {0x44a7c000}, {0x44a7e000}, {0x44a80000}, {0x44a82000}, {0x44a84000}, {0x44a86000}, {0x44a88000}, {0x44a8a000}, {0x44a8c000}, {0x44a8e000}, {0x44a90000}, {0x44a92000}, {0x44a94000}, {0x44a96000}, {0x44a98000}, {0x44a9a000}, {0x44a9c000}, {0x44a9e000}, {0x44aa0000}, {0x44aa2000}, {0x44aa4000}, {0x44aa6000}, {0x44aa8000}, {0x44aaa000}, {0x44aac000}, {0x44aae000}, {0x44ab0000}, {0x44ab2000}, {0x44ab4000}, {0x44ab6000}, {0x44ab8000}, {0x44aba000}, {0x44abc000}, {0x44abe000}, {0x44ac0000}, {0x44ac2000}, {0x44ac4000}, {0x44ac6000}, {0x44ac8000}, {0x44aca000}, {0x44acc000}, {0x44ace000}, {0x44ad0000}, {0x44ad2000}, {0x44ad4000}, {0x44ad6000}, {0x44ad8000}, {0x44ada000}, {0x44adc000}, {0x44ade000}, {0x44ae0000}, {0x44ae2000}, {0x44ae4000}, {0x44ae6000}, {0x44ae8000}, {0x44aea000}, {0x44aec000}, {0x44aee000}, {0x44af0000}, {0x44af2000}, {0x44af4000}, {0x44af6000}, {0x44af8000}, {0x44afa000}, {0x44afc000}, {0x44afe000}, {0x44b00000}, {0x44b02000}, {0x44b04000}, {0x44b06000}, {0x44b08000}, {0x44b0a000}, {0x44b0c000}, {0x44b0e000}, {0x44b10000}, {0x44b12000}, {0x44b14000}, {0x44b16000}, {0x44b18000}, {0x44b1a000}, {0x44b1c000}, {0x44b1e000}, {0x44b20000}, {0x44b22000}, {0x44b24000}, {0x44b26000}, {0x44b28000}, {0x44b2a000}, {0x44b2c000}, {0x44b2e000}, {0x44b30000}, {0x44b32000}, {0x44b34000}, {0x44b36000}, {0x44b38000}, {0x44b3a000}, {0x44b3c000}, {0x44b3e000}, {0x44b40000}, {0x44b42000}, {0x44b44000}, {0x44b46000}, {0x44b48000}, {0x44b4a000}, {0x44b4c000}, {0x44b4e000}, {0x44b50000}, {0x44b52000}, {0x44b54000}, {0x44b56000}, {0x44b58000}, {0x44b5a000}, {0x44b5c000}, {0x44b5e000}, {0x44b60000}, {0x44b62000}, {0x44b64000}, {0x44b66000}, {0x44b68000}, {0x44b6a000}, {0x44b6c000}, {0x44b6e000}, {0x44b70000}, {0x44b72000}, {0x44b74000}, {0x44b76000}, {0x44b78000}, {0x44b7a000}, {0x44b7c000}, {0x44b7e000}, {0x44b80000}, {0x44b82000}, {0x44b84000}, {0x44b86000}, {0x44b88000}, {0x44b8a000}, {0x44b8c000}, {0x44b8e000}, {0x44b90000}, {0x44b92000}, {0x44b94000}, {0x44b96000}, {0x44b98000}, {0x44b9a000}, {0x44b9c000}, {0x44b9e000}, {0x44ba0000}, {0x44ba2000}, {0x44ba4000}, {0x44ba6000}, {0x44ba8000}, {0x44baa000}, {0x44bac000}, {0x44bae000}, {0x44bb0000}, {0x44bb2000}, {0x44bb4000}, {0x44bb6000}, {0x44bb8000}, {0x44bba000}, {0x44bbc000}, {0x44bbe000}, {0x44bc0000}, {0x44bc2000}, {0x44bc4000}, {0x44bc6000}, {0x44bc8000}, {0x44bca000}, {0x44bcc000}, {0x44bce000}, {0x44bd0000}, {0x44bd2000}, {0x44bd4000}, {0x44bd6000}, {0x44bd8000}, {0x44bda000}, {0x44bdc000}, {0x44bde000}, {0x44be0000}, {0x44be2000}, {0x44be4000}, {0x44be6000}, {0x44be8000}, {0x44bea000}, {0x44bec000}, {0x44bee000}, {0x44bf0000}, {0x44bf2000}, {0x44bf4000}, {0x44bf6000}, {0x44bf8000}, {0x44bfa000}, {0x44bfc000}, {0x44bfe000}, {0x44c00000}, {0x44c02000}, {0x44c04000}, {0x44c06000}, {0x44c08000}, {0x44c0a000}, {0x44c0c000}, {0x44c0e000}, {0x44c10000}, {0x44c12000}, {0x44c14000}, {0x44c16000}, {0x44c18000}, {0x44c1a000}, {0x44c1c000}, {0x44c1e000}, {0x44c20000}, {0x44c22000}, {0x44c24000}, {0x44c26000}, {0x44c28000}, {0x44c2a000}, {0x44c2c000}, {0x44c2e000}, {0x44c30000}, {0x44c32000}, {0x44c34000}, {0x44c36000}, {0x44c38000}, {0x44c3a000}, {0x44c3c000}, {0x44c3e000}, {0x44c40000}, {0x44c42000}, {0x44c44000}, {0x44c46000}, {0x44c48000}, {0x44c4a000}, {0x44c4c000}, {0x44c4e000}, {0x44c50000}, {0x44c52000}, {0x44c54000}, {0x44c56000}, {0x44c58000}, {0x44c5a000}, {0x44c5c000}, {0x44c5e000}, {0x44c60000}, {0x44c62000}, {0x44c64000}, {0x44c66000}, {0x44c68000}, {0x44c6a000}, {0x44c6c000}, {0x44c6e000}, {0x44c70000}, {0x44c72000}, {0x44c74000}, {0x44c76000}, {0x44c78000}, {0x44c7a000}, {0x44c7c000}, {0x44c7e000}, {0x44c80000}, {0x44c82000}, {0x44c84000}, {0x44c86000}, {0x44c88000}, {0x44c8a000}, {0x44c8c000}, {0x44c8e000}, {0x44c90000}, {0x44c92000}, {0x44c94000}, {0x44c96000}, {0x44c98000}, {0x44c9a000}, {0x44c9c000}, {0x44c9e000}, {0x44ca0000}, {0x44ca2000}, {0x44ca4000}, {0x44ca6000}, {0x44ca8000}, {0x44caa000}, {0x44cac000}, {0x44cae000}, {0x44cb0000}, {0x44cb2000}, {0x44cb4000}, {0x44cb6000}, {0x44cb8000}, {0x44cba000}, {0x44cbc000}, {0x44cbe000}, {0x44cc0000}, {0x44cc2000}, {0x44cc4000}, {0x44cc6000}, {0x44cc8000}, {0x44cca000}, {0x44ccc000}, {0x44cce000}, {0x44cd0000}, {0x44cd2000}, {0x44cd4000}, {0x44cd6000}, {0x44cd8000}, {0x44cda000}, {0x44cdc000}, {0x44cde000}, {0x44ce0000}, {0x44ce2000}, {0x44ce4000}, {0x44ce6000}, {0x44ce8000}, {0x44cea000}, {0x44cec000}, {0x44cee000}, {0x44cf0000}, {0x44cf2000}, {0x44cf4000}, {0x44cf6000}, {0x44cf8000}, {0x44cfa000}, {0x44cfc000}, {0x44cfe000}, {0x44d00000}, {0x44d02000}, {0x44d04000}, {0x44d06000}, {0x44d08000}, {0x44d0a000}, {0x44d0c000}, {0x44d0e000}, {0x44d10000}, {0x44d12000}, {0x44d14000}, {0x44d16000}, {0x44d18000}, {0x44d1a000}, {0x44d1c000}, {0x44d1e000}, {0x44d20000}, {0x44d22000}, {0x44d24000}, {0x44d26000}, {0x44d28000}, {0x44d2a000}, {0x44d2c000}, {0x44d2e000}, {0x44d30000}, {0x44d32000}, {0x44d34000}, {0x44d36000}, {0x44d38000}, {0x44d3a000}, {0x44d3c000}, {0x44d3e000}, {0x44d40000}, {0x44d42000}, {0x44d44000}, {0x44d46000}, {0x44d48000}, {0x44d4a000}, {0x44d4c000}, {0x44d4e000}, {0x44d50000}, {0x44d52000}, {0x44d54000}, {0x44d56000}, {0x44d58000}, {0x44d5a000}, {0x44d5c000}, {0x44d5e000}, {0x44d60000}, {0x44d62000}, {0x44d64000}, {0x44d66000}, {0x44d68000}, {0x44d6a000}, {0x44d6c000}, {0x44d6e000}, {0x44d70000}, {0x44d72000}, {0x44d74000}, {0x44d76000}, {0x44d78000}, {0x44d7a000}, {0x44d7c000}, {0x44d7e000}, {0x44d80000}, {0x44d82000}, {0x44d84000}, {0x44d86000}, {0x44d88000}, {0x44d8a000}, {0x44d8c000}, {0x44d8e000}, {0x44d90000}, {0x44d92000}, {0x44d94000}, {0x44d96000}, {0x44d98000}, {0x44d9a000}, {0x44d9c000}, {0x44d9e000}, {0x44da0000}, {0x44da2000}, {0x44da4000}, {0x44da6000}, {0x44da8000}, {0x44daa000}, {0x44dac000}, {0x44dae000}, {0x44db0000}, {0x44db2000}, {0x44db4000}, {0x44db6000}, {0x44db8000}, {0x44dba000}, {0x44dbc000}, {0x44dbe000}, {0x44dc0000}, {0x44dc2000}, {0x44dc4000}, {0x44dc6000}, {0x44dc8000}, {0x44dca000}, {0x44dcc000}, {0x44dce000}, {0x44dd0000}, {0x44dd2000}, {0x44dd4000}, {0x44dd6000}, {0x44dd8000}, {0x44dda000}, {0x44ddc000}, {0x44dde000}, {0x44de0000}, {0x44de2000}, {0x44de4000}, {0x44de6000}, {0x44de8000}, {0x44dea000}, {0x44dec000}, {0x44dee000}, {0x44df0000}, {0x44df2000}, {0x44df4000}, {0x44df6000}, {0x44df8000}, {0x44dfa000}, {0x44dfc000}, {0x44dfe000}, {0x44e00000}, {0x44e02000}, {0x44e04000}, {0x44e06000}, {0x44e08000}, {0x44e0a000}, {0x44e0c000}, {0x44e0e000}, {0x44e10000}, {0x44e12000}, {0x44e14000}, {0x44e16000}, {0x44e18000}, {0x44e1a000}, {0x44e1c000}, {0x44e1e000}, {0x44e20000}, {0x44e22000}, {0x44e24000}, {0x44e26000}, {0x44e28000}, {0x44e2a000}, {0x44e2c000}, {0x44e2e000}, {0x44e30000}, {0x44e32000}, {0x44e34000}, {0x44e36000}, {0x44e38000}, {0x44e3a000}, {0x44e3c000}, {0x44e3e000}, {0x44e40000}, {0x44e42000}, {0x44e44000}, {0x44e46000}, {0x44e48000}, {0x44e4a000}, {0x44e4c000}, {0x44e4e000}, {0x44e50000}, {0x44e52000}, {0x44e54000}, {0x44e56000}, {0x44e58000}, {0x44e5a000}, {0x44e5c000}, {0x44e5e000}, {0x44e60000}, {0x44e62000}, {0x44e64000}, {0x44e66000}, {0x44e68000}, {0x44e6a000}, {0x44e6c000}, {0x44e6e000}, {0x44e70000}, {0x44e72000}, {0x44e74000}, {0x44e76000}, {0x44e78000}, {0x44e7a000}, {0x44e7c000}, {0x44e7e000}, {0x44e80000}, {0x44e82000}, {0x44e84000}, {0x44e86000}, {0x44e88000}, {0x44e8a000}, {0x44e8c000}, {0x44e8e000}, {0x44e90000}, {0x44e92000}, {0x44e94000}, {0x44e96000}, {0x44e98000}, {0x44e9a000}, {0x44e9c000}, {0x44e9e000}, {0x44ea0000}, {0x44ea2000}, {0x44ea4000}, {0x44ea6000}, {0x44ea8000}, {0x44eaa000}, {0x44eac000}, {0x44eae000}, {0x44eb0000}, {0x44eb2000}, {0x44eb4000}, {0x44eb6000}, {0x44eb8000}, {0x44eba000}, {0x44ebc000}, {0x44ebe000}, {0x44ec0000}, {0x44ec2000}, {0x44ec4000}, {0x44ec6000}, {0x44ec8000}, {0x44eca000}, {0x44ecc000}, {0x44ece000}, {0x44ed0000}, {0x44ed2000}, {0x44ed4000}, {0x44ed6000}, {0x44ed8000}, {0x44eda000}, {0x44edc000}, {0x44ede000}, {0x44ee0000}, {0x44ee2000}, {0x44ee4000}, {0x44ee6000}, {0x44ee8000}, {0x44eea000}, {0x44eec000}, {0x44eee000}, {0x44ef0000}, {0x44ef2000}, {0x44ef4000}, {0x44ef6000}, {0x44ef8000}, {0x44efa000}, {0x44efc000}, {0x44efe000}, {0x44f00000}, {0x44f02000}, {0x44f04000}, {0x44f06000}, {0x44f08000}, {0x44f0a000}, {0x44f0c000}, {0x44f0e000}, {0x44f10000}, {0x44f12000}, {0x44f14000}, {0x44f16000}, {0x44f18000}, {0x44f1a000}, {0x44f1c000}, {0x44f1e000}, {0x44f20000}, {0x44f22000}, {0x44f24000}, {0x44f26000}, {0x44f28000}, {0x44f2a000}, {0x44f2c000}, {0x44f2e000}, {0x44f30000}, {0x44f32000}, {0x44f34000}, {0x44f36000}, {0x44f38000}, {0x44f3a000}, {0x44f3c000}, {0x44f3e000}, {0x44f40000}, {0x44f42000}, {0x44f44000}, {0x44f46000}, {0x44f48000}, {0x44f4a000}, {0x44f4c000}, {0x44f4e000}, {0x44f50000}, {0x44f52000}, {0x44f54000}, {0x44f56000}, {0x44f58000}, {0x44f5a000}, {0x44f5c000}, {0x44f5e000}, {0x44f60000}, {0x44f62000}, {0x44f64000}, {0x44f66000}, {0x44f68000}, {0x44f6a000}, {0x44f6c000}, {0x44f6e000}, {0x44f70000}, {0x44f72000}, {0x44f74000}, {0x44f76000}, {0x44f78000}, {0x44f7a000}, {0x44f7c000}, {0x44f7e000}, {0x44f80000}, {0x44f82000}, {0x44f84000}, {0x44f86000}, {0x44f88000}, {0x44f8a000}, {0x44f8c000}, {0x44f8e000}, {0x44f90000}, {0x44f92000}, {0x44f94000}, {0x44f96000}, {0x44f98000}, {0x44f9a000}, {0x44f9c000}, {0x44f9e000}, {0x44fa0000}, {0x44fa2000}, {0x44fa4000}, {0x44fa6000}, {0x44fa8000}, {0x44faa000}, {0x44fac000}, {0x44fae000}, {0x44fb0000}, {0x44fb2000}, {0x44fb4000}, {0x44fb6000}, {0x44fb8000}, {0x44fba000}, {0x44fbc000}, {0x44fbe000}, {0x44fc0000}, {0x44fc2000}, {0x44fc4000}, {0x44fc6000}, {0x44fc8000}, {0x44fca000}, {0x44fcc000}, {0x44fce000}, {0x44fd0000}, {0x44fd2000}, {0x44fd4000}, {0x44fd6000}, {0x44fd8000}, {0x44fda000}, {0x44fdc000}, {0x44fde000}, {0x44fe0000}, {0x44fe2000}, {0x44fe4000}, {0x44fe6000}, {0x44fe8000}, {0x44fea000}, {0x44fec000}, {0x44fee000}, {0x44ff0000}, {0x44ff2000}, {0x44ff4000}, {0x44ff6000}, {0x44ff8000}, {0x44ffa000}, {0x44ffc000}, {0x44ffe000}, {0x45000000}, {0x45002000}, {0x45004000}, {0x45006000}, {0x45008000}, {0x4500a000}, {0x4500c000}, {0x4500e000}, {0x45010000}, {0x45012000}, {0x45014000}, {0x45016000}, {0x45018000}, {0x4501a000}, {0x4501c000}, {0x4501e000}, {0x45020000}, {0x45022000}, {0x45024000}, {0x45026000}, {0x45028000}, {0x4502a000}, {0x4502c000}, {0x4502e000}, {0x45030000}, {0x45032000}, {0x45034000}, {0x45036000}, {0x45038000}, {0x4503a000}, {0x4503c000}, {0x4503e000}, {0x45040000}, {0x45042000}, {0x45044000}, {0x45046000}, {0x45048000}, {0x4504a000}, {0x4504c000}, {0x4504e000}, {0x45050000}, {0x45052000}, {0x45054000}, {0x45056000}, {0x45058000}, {0x4505a000}, {0x4505c000}, {0x4505e000}, {0x45060000}, {0x45062000}, {0x45064000}, {0x45066000}, {0x45068000}, {0x4506a000}, {0x4506c000}, {0x4506e000}, {0x45070000}, {0x45072000}, {0x45074000}, {0x45076000}, {0x45078000}, {0x4507a000}, {0x4507c000}, {0x4507e000}, {0x45080000}, {0x45082000}, {0x45084000}, {0x45086000}, {0x45088000}, {0x4508a000}, {0x4508c000}, {0x4508e000}, {0x45090000}, {0x45092000}, {0x45094000}, {0x45096000}, {0x45098000}, {0x4509a000}, {0x4509c000}, {0x4509e000}, {0x450a0000}, {0x450a2000}, {0x450a4000}, {0x450a6000}, {0x450a8000}, {0x450aa000}, {0x450ac000}, {0x450ae000}, {0x450b0000}, {0x450b2000}, {0x450b4000}, {0x450b6000}, {0x450b8000}, {0x450ba000}, {0x450bc000}, {0x450be000}, {0x450c0000}, {0x450c2000}, {0x450c4000}, {0x450c6000}, {0x450c8000}, {0x450ca000}, {0x450cc000}, {0x450ce000}, {0x450d0000}, {0x450d2000}, {0x450d4000}, {0x450d6000}, {0x450d8000}, {0x450da000}, {0x450dc000}, {0x450de000}, {0x450e0000}, {0x450e2000}, {0x450e4000}, {0x450e6000}, {0x450e8000}, {0x450ea000}, {0x450ec000}, {0x450ee000}, {0x450f0000}, {0x450f2000}, {0x450f4000}, {0x450f6000}, {0x450f8000}, {0x450fa000}, {0x450fc000}, {0x450fe000}, {0x45100000}, {0x45102000}, {0x45104000}, {0x45106000}, {0x45108000}, {0x4510a000}, {0x4510c000}, {0x4510e000}, {0x45110000}, {0x45112000}, {0x45114000}, {0x45116000}, {0x45118000}, {0x4511a000}, {0x4511c000}, {0x4511e000}, {0x45120000}, {0x45122000}, {0x45124000}, {0x45126000}, {0x45128000}, {0x4512a000}, {0x4512c000}, {0x4512e000}, {0x45130000}, {0x45132000}, {0x45134000}, {0x45136000}, {0x45138000}, {0x4513a000}, {0x4513c000}, {0x4513e000}, {0x45140000}, {0x45142000}, {0x45144000}, {0x45146000}, {0x45148000}, {0x4514a000}, {0x4514c000}, {0x4514e000}, {0x45150000}, {0x45152000}, {0x45154000}, {0x45156000}, {0x45158000}, {0x4515a000}, {0x4515c000}, {0x4515e000}, {0x45160000}, {0x45162000}, {0x45164000}, {0x45166000}, {0x45168000}, {0x4516a000}, {0x4516c000}, {0x4516e000}, {0x45170000}, {0x45172000}, {0x45174000}, {0x45176000}, {0x45178000}, {0x4517a000}, {0x4517c000}, {0x4517e000}, {0x45180000}, {0x45182000}, {0x45184000}, {0x45186000}, {0x45188000}, {0x4518a000}, {0x4518c000}, {0x4518e000}, {0x45190000}, {0x45192000}, {0x45194000}, {0x45196000}, {0x45198000}, {0x4519a000}, {0x4519c000}, {0x4519e000}, {0x451a0000}, {0x451a2000}, {0x451a4000}, {0x451a6000}, {0x451a8000}, {0x451aa000}, {0x451ac000}, {0x451ae000}, {0x451b0000}, {0x451b2000}, {0x451b4000}, {0x451b6000}, {0x451b8000}, {0x451ba000}, {0x451bc000}, {0x451be000}, {0x451c0000}, {0x451c2000}, {0x451c4000}, {0x451c6000}, {0x451c8000}, {0x451ca000}, {0x451cc000}, {0x451ce000}, {0x451d0000}, {0x451d2000}, {0x451d4000}, {0x451d6000}, {0x451d8000}, {0x451da000}, {0x451dc000}, {0x451de000}, {0x451e0000}, {0x451e2000}, {0x451e4000}, {0x451e6000}, {0x451e8000}, {0x451ea000}, {0x451ec000}, {0x451ee000}, {0x451f0000}, {0x451f2000}, {0x451f4000}, {0x451f6000}, {0x451f8000}, {0x451fa000}, {0x451fc000}, {0x451fe000}, {0x45200000}, {0x45202000}, {0x45204000}, {0x45206000}, {0x45208000}, {0x4520a000}, {0x4520c000}, {0x4520e000}, {0x45210000}, {0x45212000}, {0x45214000}, {0x45216000}, {0x45218000}, {0x4521a000}, {0x4521c000}, {0x4521e000}, {0x45220000}, {0x45222000}, {0x45224000}, {0x45226000}, {0x45228000}, {0x4522a000}, {0x4522c000}, {0x4522e000}, {0x45230000}, {0x45232000}, {0x45234000}, {0x45236000}, {0x45238000}, {0x4523a000}, {0x4523c000}, {0x4523e000}, {0x45240000}, {0x45242000}, {0x45244000}, {0x45246000}, {0x45248000}, {0x4524a000}, {0x4524c000}, {0x4524e000}, {0x45250000}, {0x45252000}, {0x45254000}, {0x45256000}, {0x45258000}, {0x4525a000}, {0x4525c000}, {0x4525e000}, {0x45260000}, {0x45262000}, {0x45264000}, {0x45266000}, {0x45268000}, {0x4526a000}, {0x4526c000}, {0x4526e000}, {0x45270000}, {0x45272000}, {0x45274000}, {0x45276000}, {0x45278000}, {0x4527a000}, {0x4527c000}, {0x4527e000}, {0x45280000}, {0x45282000}, {0x45284000}, {0x45286000}, {0x45288000}, {0x4528a000}, {0x4528c000}, {0x4528e000}, {0x45290000}, {0x45292000}, {0x45294000}, {0x45296000}, {0x45298000}, {0x4529a000}, {0x4529c000}, {0x4529e000}, {0x452a0000}, {0x452a2000}, {0x452a4000}, {0x452a6000}, {0x452a8000}, {0x452aa000}, {0x452ac000}, {0x452ae000}, {0x452b0000}, {0x452b2000}, {0x452b4000}, {0x452b6000}, {0x452b8000}, {0x452ba000}, {0x452bc000}, {0x452be000}, {0x452c0000}, {0x452c2000}, {0x452c4000}, {0x452c6000}, {0x452c8000}, {0x452ca000}, {0x452cc000}, {0x452ce000}, {0x452d0000}, {0x452d2000}, {0x452d4000}, {0x452d6000}, {0x452d8000}, {0x452da000}, {0x452dc000}, {0x452de000}, {0x452e0000}, {0x452e2000}, {0x452e4000}, {0x452e6000}, {0x452e8000}, {0x452ea000}, {0x452ec000}, {0x452ee000}, {0x452f0000}, {0x452f2000}, {0x452f4000}, {0x452f6000}, {0x452f8000}, {0x452fa000}, {0x452fc000}, {0x452fe000}, {0x45300000}, {0x45302000}, {0x45304000}, {0x45306000}, {0x45308000}, {0x4530a000}, {0x4530c000}, {0x4530e000}, {0x45310000}, {0x45312000}, {0x45314000}, {0x45316000}, {0x45318000}, {0x4531a000}, {0x4531c000}, {0x4531e000}, {0x45320000}, {0x45322000}, {0x45324000}, {0x45326000}, {0x45328000}, {0x4532a000}, {0x4532c000}, {0x4532e000}, {0x45330000}, {0x45332000}, {0x45334000}, {0x45336000}, {0x45338000}, {0x4533a000}, {0x4533c000}, {0x4533e000}, {0x45340000}, {0x45342000}, {0x45344000}, {0x45346000}, {0x45348000}, {0x4534a000}, {0x4534c000}, {0x4534e000}, {0x45350000}, {0x45352000}, {0x45354000}, {0x45356000}, {0x45358000}, {0x4535a000}, {0x4535c000}, {0x4535e000}, {0x45360000}, {0x45362000}, {0x45364000}, {0x45366000}, {0x45368000}, {0x4536a000}, {0x4536c000}, {0x4536e000}, {0x45370000}, {0x45372000}, {0x45374000}, {0x45376000}, {0x45378000}, {0x4537a000}, {0x4537c000}, {0x4537e000}, {0x45380000}, {0x45382000}, {0x45384000}, {0x45386000}, {0x45388000}, {0x4538a000}, {0x4538c000}, {0x4538e000}, {0x45390000}, {0x45392000}, {0x45394000}, {0x45396000}, {0x45398000}, {0x4539a000}, {0x4539c000}, {0x4539e000}, {0x453a0000}, {0x453a2000}, {0x453a4000}, {0x453a6000}, {0x453a8000}, {0x453aa000}, {0x453ac000}, {0x453ae000}, {0x453b0000}, {0x453b2000}, {0x453b4000}, {0x453b6000}, {0x453b8000}, {0x453ba000}, {0x453bc000}, {0x453be000}, {0x453c0000}, {0x453c2000}, {0x453c4000}, {0x453c6000}, {0x453c8000}, {0x453ca000}, {0x453cc000}, {0x453ce000}, {0x453d0000}, {0x453d2000}, {0x453d4000}, {0x453d6000}, {0x453d8000}, {0x453da000}, {0x453dc000}, {0x453de000}, {0x453e0000}, {0x453e2000}, {0x453e4000}, {0x453e6000}, {0x453e8000}, {0x453ea000}, {0x453ec000}, {0x453ee000}, {0x453f0000}, {0x453f2000}, {0x453f4000}, {0x453f6000}, {0x453f8000}, {0x453fa000}, {0x453fc000}, {0x453fe000}, {0x45400000}, {0x45402000}, {0x45404000}, {0x45406000}, {0x45408000}, {0x4540a000}, {0x4540c000}, {0x4540e000}, {0x45410000}, {0x45412000}, {0x45414000}, {0x45416000}, {0x45418000}, {0x4541a000}, {0x4541c000}, {0x4541e000}, {0x45420000}, {0x45422000}, {0x45424000}, {0x45426000}, {0x45428000}, {0x4542a000}, {0x4542c000}, {0x4542e000}, {0x45430000}, {0x45432000}, {0x45434000}, {0x45436000}, {0x45438000}, {0x4543a000}, {0x4543c000}, {0x4543e000}, {0x45440000}, {0x45442000}, {0x45444000}, {0x45446000}, {0x45448000}, {0x4544a000}, {0x4544c000}, {0x4544e000}, {0x45450000}, {0x45452000}, {0x45454000}, {0x45456000}, {0x45458000}, {0x4545a000}, {0x4545c000}, {0x4545e000}, {0x45460000}, {0x45462000}, {0x45464000}, {0x45466000}, {0x45468000}, {0x4546a000}, {0x4546c000}, {0x4546e000}, {0x45470000}, {0x45472000}, {0x45474000}, {0x45476000}, {0x45478000}, {0x4547a000}, {0x4547c000}, {0x4547e000}, {0x45480000}, {0x45482000}, {0x45484000}, {0x45486000}, {0x45488000}, {0x4548a000}, {0x4548c000}, {0x4548e000}, {0x45490000}, {0x45492000}, {0x45494000}, {0x45496000}, {0x45498000}, {0x4549a000}, {0x4549c000}, {0x4549e000}, {0x454a0000}, {0x454a2000}, {0x454a4000}, {0x454a6000}, {0x454a8000}, {0x454aa000}, {0x454ac000}, {0x454ae000}, {0x454b0000}, {0x454b2000}, {0x454b4000}, {0x454b6000}, {0x454b8000}, {0x454ba000}, {0x454bc000}, {0x454be000}, {0x454c0000}, {0x454c2000}, {0x454c4000}, {0x454c6000}, {0x454c8000}, {0x454ca000}, {0x454cc000}, {0x454ce000}, {0x454d0000}, {0x454d2000}, {0x454d4000}, {0x454d6000}, {0x454d8000}, {0x454da000}, {0x454dc000}, {0x454de000}, {0x454e0000}, {0x454e2000}, {0x454e4000}, {0x454e6000}, {0x454e8000}, {0x454ea000}, {0x454ec000}, {0x454ee000}, {0x454f0000}, {0x454f2000}, {0x454f4000}, {0x454f6000}, {0x454f8000}, {0x454fa000}, {0x454fc000}, {0x454fe000}, {0x45500000}, {0x45502000}, {0x45504000}, {0x45506000}, {0x45508000}, {0x4550a000}, {0x4550c000}, {0x4550e000}, {0x45510000}, {0x45512000}, {0x45514000}, {0x45516000}, {0x45518000}, {0x4551a000}, {0x4551c000}, {0x4551e000}, {0x45520000}, {0x45522000}, {0x45524000}, {0x45526000}, {0x45528000}, {0x4552a000}, {0x4552c000}, {0x4552e000}, {0x45530000}, {0x45532000}, {0x45534000}, {0x45536000}, {0x45538000}, {0x4553a000}, {0x4553c000}, {0x4553e000}, {0x45540000}, {0x45542000}, {0x45544000}, {0x45546000}, {0x45548000}, {0x4554a000}, {0x4554c000}, {0x4554e000}, {0x45550000}, {0x45552000}, {0x45554000}, {0x45556000}, {0x45558000}, {0x4555a000}, {0x4555c000}, {0x4555e000}, {0x45560000}, {0x45562000}, {0x45564000}, {0x45566000}, {0x45568000}, {0x4556a000}, {0x4556c000}, {0x4556e000}, {0x45570000}, {0x45572000}, {0x45574000}, {0x45576000}, {0x45578000}, {0x4557a000}, {0x4557c000}, {0x4557e000}, {0x45580000}, {0x45582000}, {0x45584000}, {0x45586000}, {0x45588000}, {0x4558a000}, {0x4558c000}, {0x4558e000}, {0x45590000}, {0x45592000}, {0x45594000}, {0x45596000}, {0x45598000}, {0x4559a000}, {0x4559c000}, {0x4559e000}, {0x455a0000}, {0x455a2000}, {0x455a4000}, {0x455a6000}, {0x455a8000}, {0x455aa000}, {0x455ac000}, {0x455ae000}, {0x455b0000}, {0x455b2000}, {0x455b4000}, {0x455b6000}, {0x455b8000}, {0x455ba000}, {0x455bc000}, {0x455be000}, {0x455c0000}, {0x455c2000}, {0x455c4000}, {0x455c6000}, {0x455c8000}, {0x455ca000}, {0x455cc000}, {0x455ce000}, {0x455d0000}, {0x455d2000}, {0x455d4000}, {0x455d6000}, {0x455d8000}, {0x455da000}, {0x455dc000}, {0x455de000}, {0x455e0000}, {0x455e2000}, {0x455e4000}, {0x455e6000}, {0x455e8000}, {0x455ea000}, {0x455ec000}, {0x455ee000}, {0x455f0000}, {0x455f2000}, {0x455f4000}, {0x455f6000}, {0x455f8000}, {0x455fa000}, {0x455fc000}, {0x455fe000}, {0x45600000}, {0x45602000}, {0x45604000}, {0x45606000}, {0x45608000}, {0x4560a000}, {0x4560c000}, {0x4560e000}, {0x45610000}, {0x45612000}, {0x45614000}, {0x45616000}, {0x45618000}, {0x4561a000}, {0x4561c000}, {0x4561e000}, {0x45620000}, {0x45622000}, {0x45624000}, {0x45626000}, {0x45628000}, {0x4562a000}, {0x4562c000}, {0x4562e000}, {0x45630000}, {0x45632000}, {0x45634000}, {0x45636000}, {0x45638000}, {0x4563a000}, {0x4563c000}, {0x4563e000}, {0x45640000}, {0x45642000}, {0x45644000}, {0x45646000}, {0x45648000}, {0x4564a000}, {0x4564c000}, {0x4564e000}, {0x45650000}, {0x45652000}, {0x45654000}, {0x45656000}, {0x45658000}, {0x4565a000}, {0x4565c000}, {0x4565e000}, {0x45660000}, {0x45662000}, {0x45664000}, {0x45666000}, {0x45668000}, {0x4566a000}, {0x4566c000}, {0x4566e000}, {0x45670000}, {0x45672000}, {0x45674000}, {0x45676000}, {0x45678000}, {0x4567a000}, {0x4567c000}, {0x4567e000}, {0x45680000}, {0x45682000}, {0x45684000}, {0x45686000}, {0x45688000}, {0x4568a000}, {0x4568c000}, {0x4568e000}, {0x45690000}, {0x45692000}, {0x45694000}, {0x45696000}, {0x45698000}, {0x4569a000}, {0x4569c000}, {0x4569e000}, {0x456a0000}, {0x456a2000}, {0x456a4000}, {0x456a6000}, {0x456a8000}, {0x456aa000}, {0x456ac000}, {0x456ae000}, {0x456b0000}, {0x456b2000}, {0x456b4000}, {0x456b6000}, {0x456b8000}, {0x456ba000}, {0x456bc000}, {0x456be000}, {0x456c0000}, {0x456c2000}, {0x456c4000}, {0x456c6000}, {0x456c8000}, {0x456ca000}, {0x456cc000}, {0x456ce000}, {0x456d0000}, {0x456d2000}, {0x456d4000}, {0x456d6000}, {0x456d8000}, {0x456da000}, {0x456dc000}, {0x456de000}, {0x456e0000}, {0x456e2000}, {0x456e4000}, {0x456e6000}, {0x456e8000}, {0x456ea000}, {0x456ec000}, {0x456ee000}, {0x456f0000}, {0x456f2000}, {0x456f4000}, {0x456f6000}, {0x456f8000}, {0x456fa000}, {0x456fc000}, {0x456fe000}, {0x45700000}, {0x45702000}, {0x45704000}, {0x45706000}, {0x45708000}, {0x4570a000}, {0x4570c000}, {0x4570e000}, {0x45710000}, {0x45712000}, {0x45714000}, {0x45716000}, {0x45718000}, {0x4571a000}, {0x4571c000}, {0x4571e000}, {0x45720000}, {0x45722000}, {0x45724000}, {0x45726000}, {0x45728000}, {0x4572a000}, {0x4572c000}, {0x4572e000}, {0x45730000}, {0x45732000}, {0x45734000}, {0x45736000}, {0x45738000}, {0x4573a000}, {0x4573c000}, {0x4573e000}, {0x45740000}, {0x45742000}, {0x45744000}, {0x45746000}, {0x45748000}, {0x4574a000}, {0x4574c000}, {0x4574e000}, {0x45750000}, {0x45752000}, {0x45754000}, {0x45756000}, {0x45758000}, {0x4575a000}, {0x4575c000}, {0x4575e000}, {0x45760000}, {0x45762000}, {0x45764000}, {0x45766000}, {0x45768000}, {0x4576a000}, {0x4576c000}, {0x4576e000}, {0x45770000}, {0x45772000}, {0x45774000}, {0x45776000}, {0x45778000}, {0x4577a000}, {0x4577c000}, {0x4577e000}, {0x45780000}, {0x45782000}, {0x45784000}, {0x45786000}, {0x45788000}, {0x4578a000}, {0x4578c000}, {0x4578e000}, {0x45790000}, {0x45792000}, {0x45794000}, {0x45796000}, {0x45798000}, {0x4579a000}, {0x4579c000}, {0x4579e000}, {0x457a0000}, {0x457a2000}, {0x457a4000}, {0x457a6000}, {0x457a8000}, {0x457aa000}, {0x457ac000}, {0x457ae000}, {0x457b0000}, {0x457b2000}, {0x457b4000}, {0x457b6000}, {0x457b8000}, {0x457ba000}, {0x457bc000}, {0x457be000}, {0x457c0000}, {0x457c2000}, {0x457c4000}, {0x457c6000}, {0x457c8000}, {0x457ca000}, {0x457cc000}, {0x457ce000}, {0x457d0000}, {0x457d2000}, {0x457d4000}, {0x457d6000}, {0x457d8000}, {0x457da000}, {0x457dc000}, {0x457de000}, {0x457e0000}, {0x457e2000}, {0x457e4000}, {0x457e6000}, {0x457e8000}, {0x457ea000}, {0x457ec000}, {0x457ee000}, {0x457f0000}, {0x457f2000}, {0x457f4000}, {0x457f6000}, {0x457f8000}, {0x457fa000}, {0x457fc000}, {0x457fe000}, {0x45800000}, {0x45802000}, {0x45804000}, {0x45806000}, {0x45808000}, {0x4580a000}, {0x4580c000}, {0x4580e000}, {0x45810000}, {0x45812000}, {0x45814000}, {0x45816000}, {0x45818000}, {0x4581a000}, {0x4581c000}, {0x4581e000}, {0x45820000}, {0x45822000}, {0x45824000}, {0x45826000}, {0x45828000}, {0x4582a000}, {0x4582c000}, {0x4582e000}, {0x45830000}, {0x45832000}, {0x45834000}, {0x45836000}, {0x45838000}, {0x4583a000}, {0x4583c000}, {0x4583e000}, {0x45840000}, {0x45842000}, {0x45844000}, {0x45846000}, {0x45848000}, {0x4584a000}, {0x4584c000}, {0x4584e000}, {0x45850000}, {0x45852000}, {0x45854000}, {0x45856000}, {0x45858000}, {0x4585a000}, {0x4585c000}, {0x4585e000}, {0x45860000}, {0x45862000}, {0x45864000}, {0x45866000}, {0x45868000}, {0x4586a000}, {0x4586c000}, {0x4586e000}, {0x45870000}, {0x45872000}, {0x45874000}, {0x45876000}, {0x45878000}, {0x4587a000}, {0x4587c000}, {0x4587e000}, {0x45880000}, {0x45882000}, {0x45884000}, {0x45886000}, {0x45888000}, {0x4588a000}, {0x4588c000}, {0x4588e000}, {0x45890000}, {0x45892000}, {0x45894000}, {0x45896000}, {0x45898000}, {0x4589a000}, {0x4589c000}, {0x4589e000}, {0x458a0000}, {0x458a2000}, {0x458a4000}, {0x458a6000}, {0x458a8000}, {0x458aa000}, {0x458ac000}, {0x458ae000}, {0x458b0000}, {0x458b2000}, {0x458b4000}, {0x458b6000}, {0x458b8000}, {0x458ba000}, {0x458bc000}, {0x458be000}, {0x458c0000}, {0x458c2000}, {0x458c4000}, {0x458c6000}, {0x458c8000}, {0x458ca000}, {0x458cc000}, {0x458ce000}, {0x458d0000}, {0x458d2000}, {0x458d4000}, {0x458d6000}, {0x458d8000}, {0x458da000}, {0x458dc000}, {0x458de000}, {0x458e0000}, {0x458e2000}, {0x458e4000}, {0x458e6000}, {0x458e8000}, {0x458ea000}, {0x458ec000}, {0x458ee000}, {0x458f0000}, {0x458f2000}, {0x458f4000}, {0x458f6000}, {0x458f8000}, {0x458fa000}, {0x458fc000}, {0x458fe000}, {0x45900000}, {0x45902000}, {0x45904000}, {0x45906000}, {0x45908000}, {0x4590a000}, {0x4590c000}, {0x4590e000}, {0x45910000}, {0x45912000}, {0x45914000}, {0x45916000}, {0x45918000}, {0x4591a000}, {0x4591c000}, {0x4591e000}, {0x45920000}, {0x45922000}, {0x45924000}, {0x45926000}, {0x45928000}, {0x4592a000}, {0x4592c000}, {0x4592e000}, {0x45930000}, {0x45932000}, {0x45934000}, {0x45936000}, {0x45938000}, {0x4593a000}, {0x4593c000}, {0x4593e000}, {0x45940000}, {0x45942000}, {0x45944000}, {0x45946000}, {0x45948000}, {0x4594a000}, {0x4594c000}, {0x4594e000}, {0x45950000}, {0x45952000}, {0x45954000}, {0x45956000}, {0x45958000}, {0x4595a000}, {0x4595c000}, {0x4595e000}, {0x45960000}, {0x45962000}, {0x45964000}, {0x45966000}, {0x45968000}, {0x4596a000}, {0x4596c000}, {0x4596e000}, {0x45970000}, {0x45972000}, {0x45974000}, {0x45976000}, {0x45978000}, {0x4597a000}, {0x4597c000}, {0x4597e000}, {0x45980000}, {0x45982000}, {0x45984000}, {0x45986000}, {0x45988000}, {0x4598a000}, {0x4598c000}, {0x4598e000}, {0x45990000}, {0x45992000}, {0x45994000}, {0x45996000}, {0x45998000}, {0x4599a000}, {0x4599c000}, {0x4599e000}, {0x459a0000}, {0x459a2000}, {0x459a4000}, {0x459a6000}, {0x459a8000}, {0x459aa000}, {0x459ac000}, {0x459ae000}, {0x459b0000}, {0x459b2000}, {0x459b4000}, {0x459b6000}, {0x459b8000}, {0x459ba000}, {0x459bc000}, {0x459be000}, {0x459c0000}, {0x459c2000}, {0x459c4000}, {0x459c6000}, {0x459c8000}, {0x459ca000}, {0x459cc000}, {0x459ce000}, {0x459d0000}, {0x459d2000}, {0x459d4000}, {0x459d6000}, {0x459d8000}, {0x459da000}, {0x459dc000}, {0x459de000}, {0x459e0000}, {0x459e2000}, {0x459e4000}, {0x459e6000}, {0x459e8000}, {0x459ea000}, {0x459ec000}, {0x459ee000}, {0x459f0000}, {0x459f2000}, {0x459f4000}, {0x459f6000}, {0x459f8000}, {0x459fa000}, {0x459fc000}, {0x459fe000}, {0x45a00000}, {0x45a02000}, {0x45a04000}, {0x45a06000}, {0x45a08000}, {0x45a0a000}, {0x45a0c000}, {0x45a0e000}, {0x45a10000}, {0x45a12000}, {0x45a14000}, {0x45a16000}, {0x45a18000}, {0x45a1a000}, {0x45a1c000}, {0x45a1e000}, {0x45a20000}, {0x45a22000}, {0x45a24000}, {0x45a26000}, {0x45a28000}, {0x45a2a000}, {0x45a2c000}, {0x45a2e000}, {0x45a30000}, {0x45a32000}, {0x45a34000}, {0x45a36000}, {0x45a38000}, {0x45a3a000}, {0x45a3c000}, {0x45a3e000}, {0x45a40000}, {0x45a42000}, {0x45a44000}, {0x45a46000}, {0x45a48000}, {0x45a4a000}, {0x45a4c000}, {0x45a4e000}, {0x45a50000}, {0x45a52000}, {0x45a54000}, {0x45a56000}, {0x45a58000}, {0x45a5a000}, {0x45a5c000}, {0x45a5e000}, {0x45a60000}, {0x45a62000}, {0x45a64000}, {0x45a66000}, {0x45a68000}, {0x45a6a000}, {0x45a6c000}, {0x45a6e000}, {0x45a70000}, {0x45a72000}, {0x45a74000}, {0x45a76000}, {0x45a78000}, {0x45a7a000}, {0x45a7c000}, {0x45a7e000}, {0x45a80000}, {0x45a82000}, {0x45a84000}, {0x45a86000}, {0x45a88000}, {0x45a8a000}, {0x45a8c000}, {0x45a8e000}, {0x45a90000}, {0x45a92000}, {0x45a94000}, {0x45a96000}, {0x45a98000}, {0x45a9a000}, {0x45a9c000}, {0x45a9e000}, {0x45aa0000}, {0x45aa2000}, {0x45aa4000}, {0x45aa6000}, {0x45aa8000}, {0x45aaa000}, {0x45aac000}, {0x45aae000}, {0x45ab0000}, {0x45ab2000}, {0x45ab4000}, {0x45ab6000}, {0x45ab8000}, {0x45aba000}, {0x45abc000}, {0x45abe000}, {0x45ac0000}, {0x45ac2000}, {0x45ac4000}, {0x45ac6000}, {0x45ac8000}, {0x45aca000}, {0x45acc000}, {0x45ace000}, {0x45ad0000}, {0x45ad2000}, {0x45ad4000}, {0x45ad6000}, {0x45ad8000}, {0x45ada000}, {0x45adc000}, {0x45ade000}, {0x45ae0000}, {0x45ae2000}, {0x45ae4000}, {0x45ae6000}, {0x45ae8000}, {0x45aea000}, {0x45aec000}, {0x45aee000}, {0x45af0000}, {0x45af2000}, {0x45af4000}, {0x45af6000}, {0x45af8000}, {0x45afa000}, {0x45afc000}, {0x45afe000}, {0x45b00000}, {0x45b02000}, {0x45b04000}, {0x45b06000}, {0x45b08000}, {0x45b0a000}, {0x45b0c000}, {0x45b0e000}, {0x45b10000}, {0x45b12000}, {0x45b14000}, {0x45b16000}, {0x45b18000}, {0x45b1a000}, {0x45b1c000}, {0x45b1e000}, {0x45b20000}, {0x45b22000}, {0x45b24000}, {0x45b26000}, {0x45b28000}, {0x45b2a000}, {0x45b2c000}, {0x45b2e000}, {0x45b30000}, {0x45b32000}, {0x45b34000}, {0x45b36000}, {0x45b38000}, {0x45b3a000}, {0x45b3c000}, {0x45b3e000}, {0x45b40000}, {0x45b42000}, {0x45b44000}, {0x45b46000}, {0x45b48000}, {0x45b4a000}, {0x45b4c000}, {0x45b4e000}, {0x45b50000}, {0x45b52000}, {0x45b54000}, {0x45b56000}, {0x45b58000}, {0x45b5a000}, {0x45b5c000}, {0x45b5e000}, {0x45b60000}, {0x45b62000}, {0x45b64000}, {0x45b66000}, {0x45b68000}, {0x45b6a000}, {0x45b6c000}, {0x45b6e000}, {0x45b70000}, {0x45b72000}, {0x45b74000}, {0x45b76000}, {0x45b78000}, {0x45b7a000}, {0x45b7c000}, {0x45b7e000}, {0x45b80000}, {0x45b82000}, {0x45b84000}, {0x45b86000}, {0x45b88000}, {0x45b8a000}, {0x45b8c000}, {0x45b8e000}, {0x45b90000}, {0x45b92000}, {0x45b94000}, {0x45b96000}, {0x45b98000}, {0x45b9a000}, {0x45b9c000}, {0x45b9e000}, {0x45ba0000}, {0x45ba2000}, {0x45ba4000}, {0x45ba6000}, {0x45ba8000}, {0x45baa000}, {0x45bac000}, {0x45bae000}, {0x45bb0000}, {0x45bb2000}, {0x45bb4000}, {0x45bb6000}, {0x45bb8000}, {0x45bba000}, {0x45bbc000}, {0x45bbe000}, {0x45bc0000}, {0x45bc2000}, {0x45bc4000}, {0x45bc6000}, {0x45bc8000}, {0x45bca000}, {0x45bcc000}, {0x45bce000}, {0x45bd0000}, {0x45bd2000}, {0x45bd4000}, {0x45bd6000}, {0x45bd8000}, {0x45bda000}, {0x45bdc000}, {0x45bde000}, {0x45be0000}, {0x45be2000}, {0x45be4000}, {0x45be6000}, {0x45be8000}, {0x45bea000}, {0x45bec000}, {0x45bee000}, {0x45bf0000}, {0x45bf2000}, {0x45bf4000}, {0x45bf6000}, {0x45bf8000}, {0x45bfa000}, {0x45bfc000}, {0x45bfe000}, {0x45c00000}, {0x45c02000}, {0x45c04000}, {0x45c06000}, {0x45c08000}, {0x45c0a000}, {0x45c0c000}, {0x45c0e000}, {0x45c10000}, {0x45c12000}, {0x45c14000}, {0x45c16000}, {0x45c18000}, {0x45c1a000}, {0x45c1c000}, {0x45c1e000}, {0x45c20000}, {0x45c22000}, {0x45c24000}, {0x45c26000}, {0x45c28000}, {0x45c2a000}, {0x45c2c000}, {0x45c2e000}, {0x45c30000}, {0x45c32000}, {0x45c34000}, {0x45c36000}, {0x45c38000}, {0x45c3a000}, {0x45c3c000}, {0x45c3e000}, {0x45c40000}, {0x45c42000}, {0x45c44000}, {0x45c46000}, {0x45c48000}, {0x45c4a000}, {0x45c4c000}, {0x45c4e000}, {0x45c50000}, {0x45c52000}, {0x45c54000}, {0x45c56000}, {0x45c58000}, {0x45c5a000}, {0x45c5c000}, {0x45c5e000}, {0x45c60000}, {0x45c62000}, {0x45c64000}, {0x45c66000}, {0x45c68000}, {0x45c6a000}, {0x45c6c000}, {0x45c6e000}, {0x45c70000}, {0x45c72000}, {0x45c74000}, {0x45c76000}, {0x45c78000}, {0x45c7a000}, {0x45c7c000}, {0x45c7e000}, {0x45c80000}, {0x45c82000}, {0x45c84000}, {0x45c86000}, {0x45c88000}, {0x45c8a000}, {0x45c8c000}, {0x45c8e000}, {0x45c90000}, {0x45c92000}, {0x45c94000}, {0x45c96000}, {0x45c98000}, {0x45c9a000}, {0x45c9c000}, {0x45c9e000}, {0x45ca0000}, {0x45ca2000}, {0x45ca4000}, {0x45ca6000}, {0x45ca8000}, {0x45caa000}, {0x45cac000}, {0x45cae000}, {0x45cb0000}, {0x45cb2000}, {0x45cb4000}, {0x45cb6000}, {0x45cb8000}, {0x45cba000}, {0x45cbc000}, {0x45cbe000}, {0x45cc0000}, {0x45cc2000}, {0x45cc4000}, {0x45cc6000}, {0x45cc8000}, {0x45cca000}, {0x45ccc000}, {0x45cce000}, {0x45cd0000}, {0x45cd2000}, {0x45cd4000}, {0x45cd6000}, {0x45cd8000}, {0x45cda000}, {0x45cdc000}, {0x45cde000}, {0x45ce0000}, {0x45ce2000}, {0x45ce4000}, {0x45ce6000}, {0x45ce8000}, {0x45cea000}, {0x45cec000}, {0x45cee000}, {0x45cf0000}, {0x45cf2000}, {0x45cf4000}, {0x45cf6000}, {0x45cf8000}, {0x45cfa000}, {0x45cfc000}, {0x45cfe000}, {0x45d00000}, {0x45d02000}, {0x45d04000}, {0x45d06000}, {0x45d08000}, {0x45d0a000}, {0x45d0c000}, {0x45d0e000}, {0x45d10000}, {0x45d12000}, {0x45d14000}, {0x45d16000}, {0x45d18000}, {0x45d1a000}, {0x45d1c000}, {0x45d1e000}, {0x45d20000}, {0x45d22000}, {0x45d24000}, {0x45d26000}, {0x45d28000}, {0x45d2a000}, {0x45d2c000}, {0x45d2e000}, {0x45d30000}, {0x45d32000}, {0x45d34000}, {0x45d36000}, {0x45d38000}, {0x45d3a000}, {0x45d3c000}, {0x45d3e000}, {0x45d40000}, {0x45d42000}, {0x45d44000}, {0x45d46000}, {0x45d48000}, {0x45d4a000}, {0x45d4c000}, {0x45d4e000}, {0x45d50000}, {0x45d52000}, {0x45d54000}, {0x45d56000}, {0x45d58000}, {0x45d5a000}, {0x45d5c000}, {0x45d5e000}, {0x45d60000}, {0x45d62000}, {0x45d64000}, {0x45d66000}, {0x45d68000}, {0x45d6a000}, {0x45d6c000}, {0x45d6e000}, {0x45d70000}, {0x45d72000}, {0x45d74000}, {0x45d76000}, {0x45d78000}, {0x45d7a000}, {0x45d7c000}, {0x45d7e000}, {0x45d80000}, {0x45d82000}, {0x45d84000}, {0x45d86000}, {0x45d88000}, {0x45d8a000}, {0x45d8c000}, {0x45d8e000}, {0x45d90000}, {0x45d92000}, {0x45d94000}, {0x45d96000}, {0x45d98000}, {0x45d9a000}, {0x45d9c000}, {0x45d9e000}, {0x45da0000}, {0x45da2000}, {0x45da4000}, {0x45da6000}, {0x45da8000}, {0x45daa000}, {0x45dac000}, {0x45dae000}, {0x45db0000}, {0x45db2000}, {0x45db4000}, {0x45db6000}, {0x45db8000}, {0x45dba000}, {0x45dbc000}, {0x45dbe000}, {0x45dc0000}, {0x45dc2000}, {0x45dc4000}, {0x45dc6000}, {0x45dc8000}, {0x45dca000}, {0x45dcc000}, {0x45dce000}, {0x45dd0000}, {0x45dd2000}, {0x45dd4000}, {0x45dd6000}, {0x45dd8000}, {0x45dda000}, {0x45ddc000}, {0x45dde000}, {0x45de0000}, {0x45de2000}, {0x45de4000}, {0x45de6000}, {0x45de8000}, {0x45dea000}, {0x45dec000}, {0x45dee000}, {0x45df0000}, {0x45df2000}, {0x45df4000}, {0x45df6000}, {0x45df8000}, {0x45dfa000}, {0x45dfc000}, {0x45dfe000}, {0x45e00000}, {0x45e02000}, {0x45e04000}, {0x45e06000}, {0x45e08000}, {0x45e0a000}, {0x45e0c000}, {0x45e0e000}, {0x45e10000}, {0x45e12000}, {0x45e14000}, {0x45e16000}, {0x45e18000}, {0x45e1a000}, {0x45e1c000}, {0x45e1e000}, {0x45e20000}, {0x45e22000}, {0x45e24000}, {0x45e26000}, {0x45e28000}, {0x45e2a000}, {0x45e2c000}, {0x45e2e000}, {0x45e30000}, {0x45e32000}, {0x45e34000}, {0x45e36000}, {0x45e38000}, {0x45e3a000}, {0x45e3c000}, {0x45e3e000}, {0x45e40000}, {0x45e42000}, {0x45e44000}, {0x45e46000}, {0x45e48000}, {0x45e4a000}, {0x45e4c000}, {0x45e4e000}, {0x45e50000}, {0x45e52000}, {0x45e54000}, {0x45e56000}, {0x45e58000}, {0x45e5a000}, {0x45e5c000}, {0x45e5e000}, {0x45e60000}, {0x45e62000}, {0x45e64000}, {0x45e66000}, {0x45e68000}, {0x45e6a000}, {0x45e6c000}, {0x45e6e000}, {0x45e70000}, {0x45e72000}, {0x45e74000}, {0x45e76000}, {0x45e78000}, {0x45e7a000}, {0x45e7c000}, {0x45e7e000}, {0x45e80000}, {0x45e82000}, {0x45e84000}, {0x45e86000}, {0x45e88000}, {0x45e8a000}, {0x45e8c000}, {0x45e8e000}, {0x45e90000}, {0x45e92000}, {0x45e94000}, {0x45e96000}, {0x45e98000}, {0x45e9a000}, {0x45e9c000}, {0x45e9e000}, {0x45ea0000}, {0x45ea2000}, {0x45ea4000}, {0x45ea6000}, {0x45ea8000}, {0x45eaa000}, {0x45eac000}, {0x45eae000}, {0x45eb0000}, {0x45eb2000}, {0x45eb4000}, {0x45eb6000}, {0x45eb8000}, {0x45eba000}, {0x45ebc000}, {0x45ebe000}, {0x45ec0000}, {0x45ec2000}, {0x45ec4000}, {0x45ec6000}, {0x45ec8000}, {0x45eca000}, {0x45ecc000}, {0x45ece000}, {0x45ed0000}, {0x45ed2000}, {0x45ed4000}, {0x45ed6000}, {0x45ed8000}, {0x45eda000}, {0x45edc000}, {0x45ede000}, {0x45ee0000}, {0x45ee2000}, {0x45ee4000}, {0x45ee6000}, {0x45ee8000}, {0x45eea000}, {0x45eec000}, {0x45eee000}, {0x45ef0000}, {0x45ef2000}, {0x45ef4000}, {0x45ef6000}, {0x45ef8000}, {0x45efa000}, {0x45efc000}, {0x45efe000}, {0x45f00000}, {0x45f02000}, {0x45f04000}, {0x45f06000}, {0x45f08000}, {0x45f0a000}, {0x45f0c000}, {0x45f0e000}, {0x45f10000}, {0x45f12000}, {0x45f14000}, {0x45f16000}, {0x45f18000}, {0x45f1a000}, {0x45f1c000}, {0x45f1e000}, {0x45f20000}, {0x45f22000}, {0x45f24000}, {0x45f26000}, {0x45f28000}, {0x45f2a000}, {0x45f2c000}, {0x45f2e000}, {0x45f30000}, {0x45f32000}, {0x45f34000}, {0x45f36000}, {0x45f38000}, {0x45f3a000}, {0x45f3c000}, {0x45f3e000}, {0x45f40000}, {0x45f42000}, {0x45f44000}, {0x45f46000}, {0x45f48000}, {0x45f4a000}, {0x45f4c000}, {0x45f4e000}, {0x45f50000}, {0x45f52000}, {0x45f54000}, {0x45f56000}, {0x45f58000}, {0x45f5a000}, {0x45f5c000}, {0x45f5e000}, {0x45f60000}, {0x45f62000}, {0x45f64000}, {0x45f66000}, {0x45f68000}, {0x45f6a000}, {0x45f6c000}, {0x45f6e000}, {0x45f70000}, {0x45f72000}, {0x45f74000}, {0x45f76000}, {0x45f78000}, {0x45f7a000}, {0x45f7c000}, {0x45f7e000}, {0x45f80000}, {0x45f82000}, {0x45f84000}, {0x45f86000}, {0x45f88000}, {0x45f8a000}, {0x45f8c000}, {0x45f8e000}, {0x45f90000}, {0x45f92000}, {0x45f94000}, {0x45f96000}, {0x45f98000}, {0x45f9a000}, {0x45f9c000}, {0x45f9e000}, {0x45fa0000}, {0x45fa2000}, {0x45fa4000}, {0x45fa6000}, {0x45fa8000}, {0x45faa000}, {0x45fac000}, {0x45fae000}, {0x45fb0000}, {0x45fb2000}, {0x45fb4000}, {0x45fb6000}, {0x45fb8000}, {0x45fba000}, {0x45fbc000}, {0x45fbe000}, {0x45fc0000}, {0x45fc2000}, {0x45fc4000}, {0x45fc6000}, {0x45fc8000}, {0x45fca000}, {0x45fcc000}, {0x45fce000}, {0x45fd0000}, {0x45fd2000}, {0x45fd4000}, {0x45fd6000}, {0x45fd8000}, {0x45fda000}, {0x45fdc000}, {0x45fde000}, {0x45fe0000}, {0x45fe2000}, {0x45fe4000}, {0x45fe6000}, {0x45fe8000}, {0x45fea000}, {0x45fec000}, {0x45fee000}, {0x45ff0000}, {0x45ff2000}, {0x45ff4000}, {0x45ff6000}, {0x45ff8000}, {0x45ffa000}, {0x45ffc000}, {0x45ffe000}, {0x46000000}, {0x46002000}, {0x46004000}, {0x46006000}, {0x46008000}, {0x4600a000}, {0x4600c000}, {0x4600e000}, {0x46010000}, {0x46012000}, {0x46014000}, {0x46016000}, {0x46018000}, {0x4601a000}, {0x4601c000}, {0x4601e000}, {0x46020000}, {0x46022000}, {0x46024000}, {0x46026000}, {0x46028000}, {0x4602a000}, {0x4602c000}, {0x4602e000}, {0x46030000}, {0x46032000}, {0x46034000}, {0x46036000}, {0x46038000}, {0x4603a000}, {0x4603c000}, {0x4603e000}, {0x46040000}, {0x46042000}, {0x46044000}, {0x46046000}, {0x46048000}, {0x4604a000}, {0x4604c000}, {0x4604e000}, {0x46050000}, {0x46052000}, {0x46054000}, {0x46056000}, {0x46058000}, {0x4605a000}, {0x4605c000}, {0x4605e000}, {0x46060000}, {0x46062000}, {0x46064000}, {0x46066000}, {0x46068000}, {0x4606a000}, {0x4606c000}, {0x4606e000}, {0x46070000}, {0x46072000}, {0x46074000}, {0x46076000}, {0x46078000}, {0x4607a000}, {0x4607c000}, {0x4607e000}, {0x46080000}, {0x46082000}, {0x46084000}, {0x46086000}, {0x46088000}, {0x4608a000}, {0x4608c000}, {0x4608e000}, {0x46090000}, {0x46092000}, {0x46094000}, {0x46096000}, {0x46098000}, {0x4609a000}, {0x4609c000}, {0x4609e000}, {0x460a0000}, {0x460a2000}, {0x460a4000}, {0x460a6000}, {0x460a8000}, {0x460aa000}, {0x460ac000}, {0x460ae000}, {0x460b0000}, {0x460b2000}, {0x460b4000}, {0x460b6000}, {0x460b8000}, {0x460ba000}, {0x460bc000}, {0x460be000}, {0x460c0000}, {0x460c2000}, {0x460c4000}, {0x460c6000}, {0x460c8000}, {0x460ca000}, {0x460cc000}, {0x460ce000}, {0x460d0000}, {0x460d2000}, {0x460d4000}, {0x460d6000}, {0x460d8000}, {0x460da000}, {0x460dc000}, {0x460de000}, {0x460e0000}, {0x460e2000}, {0x460e4000}, {0x460e6000}, {0x460e8000}, {0x460ea000}, {0x460ec000}, {0x460ee000}, {0x460f0000}, {0x460f2000}, {0x460f4000}, {0x460f6000}, {0x460f8000}, {0x460fa000}, {0x460fc000}, {0x460fe000}, {0x46100000}, {0x46102000}, {0x46104000}, {0x46106000}, {0x46108000}, {0x4610a000}, {0x4610c000}, {0x4610e000}, {0x46110000}, {0x46112000}, {0x46114000}, {0x46116000}, {0x46118000}, {0x4611a000}, {0x4611c000}, {0x4611e000}, {0x46120000}, {0x46122000}, {0x46124000}, {0x46126000}, {0x46128000}, {0x4612a000}, {0x4612c000}, {0x4612e000}, {0x46130000}, {0x46132000}, {0x46134000}, {0x46136000}, {0x46138000}, {0x4613a000}, {0x4613c000}, {0x4613e000}, {0x46140000}, {0x46142000}, {0x46144000}, {0x46146000}, {0x46148000}, {0x4614a000}, {0x4614c000}, {0x4614e000}, {0x46150000}, {0x46152000}, {0x46154000}, {0x46156000}, {0x46158000}, {0x4615a000}, {0x4615c000}, {0x4615e000}, {0x46160000}, {0x46162000}, {0x46164000}, {0x46166000}, {0x46168000}, {0x4616a000}, {0x4616c000}, {0x4616e000}, {0x46170000}, {0x46172000}, {0x46174000}, {0x46176000}, {0x46178000}, {0x4617a000}, {0x4617c000}, {0x4617e000}, {0x46180000}, {0x46182000}, {0x46184000}, {0x46186000}, {0x46188000}, {0x4618a000}, {0x4618c000}, {0x4618e000}, {0x46190000}, {0x46192000}, {0x46194000}, {0x46196000}, {0x46198000}, {0x4619a000}, {0x4619c000}, {0x4619e000}, {0x461a0000}, {0x461a2000}, {0x461a4000}, {0x461a6000}, {0x461a8000}, {0x461aa000}, {0x461ac000}, {0x461ae000}, {0x461b0000}, {0x461b2000}, {0x461b4000}, {0x461b6000}, {0x461b8000}, {0x461ba000}, {0x461bc000}, {0x461be000}, {0x461c0000}, {0x461c2000}, {0x461c4000}, {0x461c6000}, {0x461c8000}, {0x461ca000}, {0x461cc000}, {0x461ce000}, {0x461d0000}, {0x461d2000}, {0x461d4000}, {0x461d6000}, {0x461d8000}, {0x461da000}, {0x461dc000}, {0x461de000}, {0x461e0000}, {0x461e2000}, {0x461e4000}, {0x461e6000}, {0x461e8000}, {0x461ea000}, {0x461ec000}, {0x461ee000}, {0x461f0000}, {0x461f2000}, {0x461f4000}, {0x461f6000}, {0x461f8000}, {0x461fa000}, {0x461fc000}, {0x461fe000}, {0x46200000}, {0x46202000}, {0x46204000}, {0x46206000}, {0x46208000}, {0x4620a000}, {0x4620c000}, {0x4620e000}, {0x46210000}, {0x46212000}, {0x46214000}, {0x46216000}, {0x46218000}, {0x4621a000}, {0x4621c000}, {0x4621e000}, {0x46220000}, {0x46222000}, {0x46224000}, {0x46226000}, {0x46228000}, {0x4622a000}, {0x4622c000}, {0x4622e000}, {0x46230000}, {0x46232000}, {0x46234000}, {0x46236000}, {0x46238000}, {0x4623a000}, {0x4623c000}, {0x4623e000}, {0x46240000}, {0x46242000}, {0x46244000}, {0x46246000}, {0x46248000}, {0x4624a000}, {0x4624c000}, {0x4624e000}, {0x46250000}, {0x46252000}, {0x46254000}, {0x46256000}, {0x46258000}, {0x4625a000}, {0x4625c000}, {0x4625e000}, {0x46260000}, {0x46262000}, {0x46264000}, {0x46266000}, {0x46268000}, {0x4626a000}, {0x4626c000}, {0x4626e000}, {0x46270000}, {0x46272000}, {0x46274000}, {0x46276000}, {0x46278000}, {0x4627a000}, {0x4627c000}, {0x4627e000}, {0x46280000}, {0x46282000}, {0x46284000}, {0x46286000}, {0x46288000}, {0x4628a000}, {0x4628c000}, {0x4628e000}, {0x46290000}, {0x46292000}, {0x46294000}, {0x46296000}, {0x46298000}, {0x4629a000}, {0x4629c000}, {0x4629e000}, {0x462a0000}, {0x462a2000}, {0x462a4000}, {0x462a6000}, {0x462a8000}, {0x462aa000}, {0x462ac000}, {0x462ae000}, {0x462b0000}, {0x462b2000}, {0x462b4000}, {0x462b6000}, {0x462b8000}, {0x462ba000}, {0x462bc000}, {0x462be000}, {0x462c0000}, {0x462c2000}, {0x462c4000}, {0x462c6000}, {0x462c8000}, {0x462ca000}, {0x462cc000}, {0x462ce000}, {0x462d0000}, {0x462d2000}, {0x462d4000}, {0x462d6000}, {0x462d8000}, {0x462da000}, {0x462dc000}, {0x462de000}, {0x462e0000}, {0x462e2000}, {0x462e4000}, {0x462e6000}, {0x462e8000}, {0x462ea000}, {0x462ec000}, {0x462ee000}, {0x462f0000}, {0x462f2000}, {0x462f4000}, {0x462f6000}, {0x462f8000}, {0x462fa000}, {0x462fc000}, {0x462fe000}, {0x46300000}, {0x46302000}, {0x46304000}, {0x46306000}, {0x46308000}, {0x4630a000}, {0x4630c000}, {0x4630e000}, {0x46310000}, {0x46312000}, {0x46314000}, {0x46316000}, {0x46318000}, {0x4631a000}, {0x4631c000}, {0x4631e000}, {0x46320000}, {0x46322000}, {0x46324000}, {0x46326000}, {0x46328000}, {0x4632a000}, {0x4632c000}, {0x4632e000}, {0x46330000}, {0x46332000}, {0x46334000}, {0x46336000}, {0x46338000}, {0x4633a000}, {0x4633c000}, {0x4633e000}, {0x46340000}, {0x46342000}, {0x46344000}, {0x46346000}, {0x46348000}, {0x4634a000}, {0x4634c000}, {0x4634e000}, {0x46350000}, {0x46352000}, {0x46354000}, {0x46356000}, {0x46358000}, {0x4635a000}, {0x4635c000}, {0x4635e000}, {0x46360000}, {0x46362000}, {0x46364000}, {0x46366000}, {0x46368000}, {0x4636a000}, {0x4636c000}, {0x4636e000}, {0x46370000}, {0x46372000}, {0x46374000}, {0x46376000}, {0x46378000}, {0x4637a000}, {0x4637c000}, {0x4637e000}, {0x46380000}, {0x46382000}, {0x46384000}, {0x46386000}, {0x46388000}, {0x4638a000}, {0x4638c000}, {0x4638e000}, {0x46390000}, {0x46392000}, {0x46394000}, {0x46396000}, {0x46398000}, {0x4639a000}, {0x4639c000}, {0x4639e000}, {0x463a0000}, {0x463a2000}, {0x463a4000}, {0x463a6000}, {0x463a8000}, {0x463aa000}, {0x463ac000}, {0x463ae000}, {0x463b0000}, {0x463b2000}, {0x463b4000}, {0x463b6000}, {0x463b8000}, {0x463ba000}, {0x463bc000}, {0x463be000}, {0x463c0000}, {0x463c2000}, {0x463c4000}, {0x463c6000}, {0x463c8000}, {0x463ca000}, {0x463cc000}, {0x463ce000}, {0x463d0000}, {0x463d2000}, {0x463d4000}, {0x463d6000}, {0x463d8000}, {0x463da000}, {0x463dc000}, {0x463de000}, {0x463e0000}, {0x463e2000}, {0x463e4000}, {0x463e6000}, {0x463e8000}, {0x463ea000}, {0x463ec000}, {0x463ee000}, {0x463f0000}, {0x463f2000}, {0x463f4000}, {0x463f6000}, {0x463f8000}, {0x463fa000}, {0x463fc000}, {0x463fe000}, {0x46400000}, {0x46402000}, {0x46404000}, {0x46406000}, {0x46408000}, {0x4640a000}, {0x4640c000}, {0x4640e000}, {0x46410000}, {0x46412000}, {0x46414000}, {0x46416000}, {0x46418000}, {0x4641a000}, {0x4641c000}, {0x4641e000}, {0x46420000}, {0x46422000}, {0x46424000}, {0x46426000}, {0x46428000}, {0x4642a000}, {0x4642c000}, {0x4642e000}, {0x46430000}, {0x46432000}, {0x46434000}, {0x46436000}, {0x46438000}, {0x4643a000}, {0x4643c000}, {0x4643e000}, {0x46440000}, {0x46442000}, {0x46444000}, {0x46446000}, {0x46448000}, {0x4644a000}, {0x4644c000}, {0x4644e000}, {0x46450000}, {0x46452000}, {0x46454000}, {0x46456000}, {0x46458000}, {0x4645a000}, {0x4645c000}, {0x4645e000}, {0x46460000}, {0x46462000}, {0x46464000}, {0x46466000}, {0x46468000}, {0x4646a000}, {0x4646c000}, {0x4646e000}, {0x46470000}, {0x46472000}, {0x46474000}, {0x46476000}, {0x46478000}, {0x4647a000}, {0x4647c000}, {0x4647e000}, {0x46480000}, {0x46482000}, {0x46484000}, {0x46486000}, {0x46488000}, {0x4648a000}, {0x4648c000}, {0x4648e000}, {0x46490000}, {0x46492000}, {0x46494000}, {0x46496000}, {0x46498000}, {0x4649a000}, {0x4649c000}, {0x4649e000}, {0x464a0000}, {0x464a2000}, {0x464a4000}, {0x464a6000}, {0x464a8000}, {0x464aa000}, {0x464ac000}, {0x464ae000}, {0x464b0000}, {0x464b2000}, {0x464b4000}, {0x464b6000}, {0x464b8000}, {0x464ba000}, {0x464bc000}, {0x464be000}, {0x464c0000}, {0x464c2000}, {0x464c4000}, {0x464c6000}, {0x464c8000}, {0x464ca000}, {0x464cc000}, {0x464ce000}, {0x464d0000}, {0x464d2000}, {0x464d4000}, {0x464d6000}, {0x464d8000}, {0x464da000}, {0x464dc000}, {0x464de000}, {0x464e0000}, {0x464e2000}, {0x464e4000}, {0x464e6000}, {0x464e8000}, {0x464ea000}, {0x464ec000}, {0x464ee000}, {0x464f0000}, {0x464f2000}, {0x464f4000}, {0x464f6000}, {0x464f8000}, {0x464fa000}, {0x464fc000}, {0x464fe000}, {0x46500000}, {0x46502000}, {0x46504000}, {0x46506000}, {0x46508000}, {0x4650a000}, {0x4650c000}, {0x4650e000}, {0x46510000}, {0x46512000}, {0x46514000}, {0x46516000}, {0x46518000}, {0x4651a000}, {0x4651c000}, {0x4651e000}, {0x46520000}, {0x46522000}, {0x46524000}, {0x46526000}, {0x46528000}, {0x4652a000}, {0x4652c000}, {0x4652e000}, {0x46530000}, {0x46532000}, {0x46534000}, {0x46536000}, {0x46538000}, {0x4653a000}, {0x4653c000}, {0x4653e000}, {0x46540000}, {0x46542000}, {0x46544000}, {0x46546000}, {0x46548000}, {0x4654a000}, {0x4654c000}, {0x4654e000}, {0x46550000}, {0x46552000}, {0x46554000}, {0x46556000}, {0x46558000}, {0x4655a000}, {0x4655c000}, {0x4655e000}, {0x46560000}, {0x46562000}, {0x46564000}, {0x46566000}, {0x46568000}, {0x4656a000}, {0x4656c000}, {0x4656e000}, {0x46570000}, {0x46572000}, {0x46574000}, {0x46576000}, {0x46578000}, {0x4657a000}, {0x4657c000}, {0x4657e000}, {0x46580000}, {0x46582000}, {0x46584000}, {0x46586000}, {0x46588000}, {0x4658a000}, {0x4658c000}, {0x4658e000}, {0x46590000}, {0x46592000}, {0x46594000}, {0x46596000}, {0x46598000}, {0x4659a000}, {0x4659c000}, {0x4659e000}, {0x465a0000}, {0x465a2000}, {0x465a4000}, {0x465a6000}, {0x465a8000}, {0x465aa000}, {0x465ac000}, {0x465ae000}, {0x465b0000}, {0x465b2000}, {0x465b4000}, {0x465b6000}, {0x465b8000}, {0x465ba000}, {0x465bc000}, {0x465be000}, {0x465c0000}, {0x465c2000}, {0x465c4000}, {0x465c6000}, {0x465c8000}, {0x465ca000}, {0x465cc000}, {0x465ce000}, {0x465d0000}, {0x465d2000}, {0x465d4000}, {0x465d6000}, {0x465d8000}, {0x465da000}, {0x465dc000}, {0x465de000}, {0x465e0000}, {0x465e2000}, {0x465e4000}, {0x465e6000}, {0x465e8000}, {0x465ea000}, {0x465ec000}, {0x465ee000}, {0x465f0000}, {0x465f2000}, {0x465f4000}, {0x465f6000}, {0x465f8000}, {0x465fa000}, {0x465fc000}, {0x465fe000}, {0x46600000}, {0x46602000}, {0x46604000}, {0x46606000}, {0x46608000}, {0x4660a000}, {0x4660c000}, {0x4660e000}, {0x46610000}, {0x46612000}, {0x46614000}, {0x46616000}, {0x46618000}, {0x4661a000}, {0x4661c000}, {0x4661e000}, {0x46620000}, {0x46622000}, {0x46624000}, {0x46626000}, {0x46628000}, {0x4662a000}, {0x4662c000}, {0x4662e000}, {0x46630000}, {0x46632000}, {0x46634000}, {0x46636000}, {0x46638000}, {0x4663a000}, {0x4663c000}, {0x4663e000}, {0x46640000}, {0x46642000}, {0x46644000}, {0x46646000}, {0x46648000}, {0x4664a000}, {0x4664c000}, {0x4664e000}, {0x46650000}, {0x46652000}, {0x46654000}, {0x46656000}, {0x46658000}, {0x4665a000}, {0x4665c000}, {0x4665e000}, {0x46660000}, {0x46662000}, {0x46664000}, {0x46666000}, {0x46668000}, {0x4666a000}, {0x4666c000}, {0x4666e000}, {0x46670000}, {0x46672000}, {0x46674000}, {0x46676000}, {0x46678000}, {0x4667a000}, {0x4667c000}, {0x4667e000}, {0x46680000}, {0x46682000}, {0x46684000}, {0x46686000}, {0x46688000}, {0x4668a000}, {0x4668c000}, {0x4668e000}, {0x46690000}, {0x46692000}, {0x46694000}, {0x46696000}, {0x46698000}, {0x4669a000}, {0x4669c000}, {0x4669e000}, {0x466a0000}, {0x466a2000}, {0x466a4000}, {0x466a6000}, {0x466a8000}, {0x466aa000}, {0x466ac000}, {0x466ae000}, {0x466b0000}, {0x466b2000}, {0x466b4000}, {0x466b6000}, {0x466b8000}, {0x466ba000}, {0x466bc000}, {0x466be000}, {0x466c0000}, {0x466c2000}, {0x466c4000}, {0x466c6000}, {0x466c8000}, {0x466ca000}, {0x466cc000}, {0x466ce000}, {0x466d0000}, {0x466d2000}, {0x466d4000}, {0x466d6000}, {0x466d8000}, {0x466da000}, {0x466dc000}, {0x466de000}, {0x466e0000}, {0x466e2000}, {0x466e4000}, {0x466e6000}, {0x466e8000}, {0x466ea000}, {0x466ec000}, {0x466ee000}, {0x466f0000}, {0x466f2000}, {0x466f4000}, {0x466f6000}, {0x466f8000}, {0x466fa000}, {0x466fc000}, {0x466fe000}, {0x46700000}, {0x46702000}, {0x46704000}, {0x46706000}, {0x46708000}, {0x4670a000}, {0x4670c000}, {0x4670e000}, {0x46710000}, {0x46712000}, {0x46714000}, {0x46716000}, {0x46718000}, {0x4671a000}, {0x4671c000}, {0x4671e000}, {0x46720000}, {0x46722000}, {0x46724000}, {0x46726000}, {0x46728000}, {0x4672a000}, {0x4672c000}, {0x4672e000}, {0x46730000}, {0x46732000}, {0x46734000}, {0x46736000}, {0x46738000}, {0x4673a000}, {0x4673c000}, {0x4673e000}, {0x46740000}, {0x46742000}, {0x46744000}, {0x46746000}, {0x46748000}, {0x4674a000}, {0x4674c000}, {0x4674e000}, {0x46750000}, {0x46752000}, {0x46754000}, {0x46756000}, {0x46758000}, {0x4675a000}, {0x4675c000}, {0x4675e000}, {0x46760000}, {0x46762000}, {0x46764000}, {0x46766000}, {0x46768000}, {0x4676a000}, {0x4676c000}, {0x4676e000}, {0x46770000}, {0x46772000}, {0x46774000}, {0x46776000}, {0x46778000}, {0x4677a000}, {0x4677c000}, {0x4677e000}, {0x46780000}, {0x46782000}, {0x46784000}, {0x46786000}, {0x46788000}, {0x4678a000}, {0x4678c000}, {0x4678e000}, {0x46790000}, {0x46792000}, {0x46794000}, {0x46796000}, {0x46798000}, {0x4679a000}, {0x4679c000}, {0x4679e000}, {0x467a0000}, {0x467a2000}, {0x467a4000}, {0x467a6000}, {0x467a8000}, {0x467aa000}, {0x467ac000}, {0x467ae000}, {0x467b0000}, {0x467b2000}, {0x467b4000}, {0x467b6000}, {0x467b8000}, {0x467ba000}, {0x467bc000}, {0x467be000}, {0x467c0000}, {0x467c2000}, {0x467c4000}, {0x467c6000}, {0x467c8000}, {0x467ca000}, {0x467cc000}, {0x467ce000}, {0x467d0000}, {0x467d2000}, {0x467d4000}, {0x467d6000}, {0x467d8000}, {0x467da000}, {0x467dc000}, {0x467de000}, {0x467e0000}, {0x467e2000}, {0x467e4000}, {0x467e6000}, {0x467e8000}, {0x467ea000}, {0x467ec000}, {0x467ee000}, {0x467f0000}, {0x467f2000}, {0x467f4000}, {0x467f6000}, {0x467f8000}, {0x467fa000}, {0x467fc000}, {0x467fe000}, {0x46800000}, {0x46802000}, {0x46804000}, {0x46806000}, {0x46808000}, {0x4680a000}, {0x4680c000}, {0x4680e000}, {0x46810000}, {0x46812000}, {0x46814000}, {0x46816000}, {0x46818000}, {0x4681a000}, {0x4681c000}, {0x4681e000}, {0x46820000}, {0x46822000}, {0x46824000}, {0x46826000}, {0x46828000}, {0x4682a000}, {0x4682c000}, {0x4682e000}, {0x46830000}, {0x46832000}, {0x46834000}, {0x46836000}, {0x46838000}, {0x4683a000}, {0x4683c000}, {0x4683e000}, {0x46840000}, {0x46842000}, {0x46844000}, {0x46846000}, {0x46848000}, {0x4684a000}, {0x4684c000}, {0x4684e000}, {0x46850000}, {0x46852000}, {0x46854000}, {0x46856000}, {0x46858000}, {0x4685a000}, {0x4685c000}, {0x4685e000}, {0x46860000}, {0x46862000}, {0x46864000}, {0x46866000}, {0x46868000}, {0x4686a000}, {0x4686c000}, {0x4686e000}, {0x46870000}, {0x46872000}, {0x46874000}, {0x46876000}, {0x46878000}, {0x4687a000}, {0x4687c000}, {0x4687e000}, {0x46880000}, {0x46882000}, {0x46884000}, {0x46886000}, {0x46888000}, {0x4688a000}, {0x4688c000}, {0x4688e000}, {0x46890000}, {0x46892000}, {0x46894000}, {0x46896000}, {0x46898000}, {0x4689a000}, {0x4689c000}, {0x4689e000}, {0x468a0000}, {0x468a2000}, {0x468a4000}, {0x468a6000}, {0x468a8000}, {0x468aa000}, {0x468ac000}, {0x468ae000}, {0x468b0000}, {0x468b2000}, {0x468b4000}, {0x468b6000}, {0x468b8000}, {0x468ba000}, {0x468bc000}, {0x468be000}, {0x468c0000}, {0x468c2000}, {0x468c4000}, {0x468c6000}, {0x468c8000}, {0x468ca000}, {0x468cc000}, {0x468ce000}, {0x468d0000}, {0x468d2000}, {0x468d4000}, {0x468d6000}, {0x468d8000}, {0x468da000}, {0x468dc000}, {0x468de000}, {0x468e0000}, {0x468e2000}, {0x468e4000}, {0x468e6000}, {0x468e8000}, {0x468ea000}, {0x468ec000}, {0x468ee000}, {0x468f0000}, {0x468f2000}, {0x468f4000}, {0x468f6000}, {0x468f8000}, {0x468fa000}, {0x468fc000}, {0x468fe000}, {0x46900000}, {0x46902000}, {0x46904000}, {0x46906000}, {0x46908000}, {0x4690a000}, {0x4690c000}, {0x4690e000}, {0x46910000}, {0x46912000}, {0x46914000}, {0x46916000}, {0x46918000}, {0x4691a000}, {0x4691c000}, {0x4691e000}, {0x46920000}, {0x46922000}, {0x46924000}, {0x46926000}, {0x46928000}, {0x4692a000}, {0x4692c000}, {0x4692e000}, {0x46930000}, {0x46932000}, {0x46934000}, {0x46936000}, {0x46938000}, {0x4693a000}, {0x4693c000}, {0x4693e000}, {0x46940000}, {0x46942000}, {0x46944000}, {0x46946000}, {0x46948000}, {0x4694a000}, {0x4694c000}, {0x4694e000}, {0x46950000}, {0x46952000}, {0x46954000}, {0x46956000}, {0x46958000}, {0x4695a000}, {0x4695c000}, {0x4695e000}, {0x46960000}, {0x46962000}, {0x46964000}, {0x46966000}, {0x46968000}, {0x4696a000}, {0x4696c000}, {0x4696e000}, {0x46970000}, {0x46972000}, {0x46974000}, {0x46976000}, {0x46978000}, {0x4697a000}, {0x4697c000}, {0x4697e000}, {0x46980000}, {0x46982000}, {0x46984000}, {0x46986000}, {0x46988000}, {0x4698a000}, {0x4698c000}, {0x4698e000}, {0x46990000}, {0x46992000}, {0x46994000}, {0x46996000}, {0x46998000}, {0x4699a000}, {0x4699c000}, {0x4699e000}, {0x469a0000}, {0x469a2000}, {0x469a4000}, {0x469a6000}, {0x469a8000}, {0x469aa000}, {0x469ac000}, {0x469ae000}, {0x469b0000}, {0x469b2000}, {0x469b4000}, {0x469b6000}, {0x469b8000}, {0x469ba000}, {0x469bc000}, {0x469be000}, {0x469c0000}, {0x469c2000}, {0x469c4000}, {0x469c6000}, {0x469c8000}, {0x469ca000}, {0x469cc000}, {0x469ce000}, {0x469d0000}, {0x469d2000}, {0x469d4000}, {0x469d6000}, {0x469d8000}, {0x469da000}, {0x469dc000}, {0x469de000}, {0x469e0000}, {0x469e2000}, {0x469e4000}, {0x469e6000}, {0x469e8000}, {0x469ea000}, {0x469ec000}, {0x469ee000}, {0x469f0000}, {0x469f2000}, {0x469f4000}, {0x469f6000}, {0x469f8000}, {0x469fa000}, {0x469fc000}, {0x469fe000}, {0x46a00000}, {0x46a02000}, {0x46a04000}, {0x46a06000}, {0x46a08000}, {0x46a0a000}, {0x46a0c000}, {0x46a0e000}, {0x46a10000}, {0x46a12000}, {0x46a14000}, {0x46a16000}, {0x46a18000}, {0x46a1a000}, {0x46a1c000}, {0x46a1e000}, {0x46a20000}, {0x46a22000}, {0x46a24000}, {0x46a26000}, {0x46a28000}, {0x46a2a000}, {0x46a2c000}, {0x46a2e000}, {0x46a30000}, {0x46a32000}, {0x46a34000}, {0x46a36000}, {0x46a38000}, {0x46a3a000}, {0x46a3c000}, {0x46a3e000}, {0x46a40000}, {0x46a42000}, {0x46a44000}, {0x46a46000}, {0x46a48000}, {0x46a4a000}, {0x46a4c000}, {0x46a4e000}, {0x46a50000}, {0x46a52000}, {0x46a54000}, {0x46a56000}, {0x46a58000}, {0x46a5a000}, {0x46a5c000}, {0x46a5e000}, {0x46a60000}, {0x46a62000}, {0x46a64000}, {0x46a66000}, {0x46a68000}, {0x46a6a000}, {0x46a6c000}, {0x46a6e000}, {0x46a70000}, {0x46a72000}, {0x46a74000}, {0x46a76000}, {0x46a78000}, {0x46a7a000}, {0x46a7c000}, {0x46a7e000}, {0x46a80000}, {0x46a82000}, {0x46a84000}, {0x46a86000}, {0x46a88000}, {0x46a8a000}, {0x46a8c000}, {0x46a8e000}, {0x46a90000}, {0x46a92000}, {0x46a94000}, {0x46a96000}, {0x46a98000}, {0x46a9a000}, {0x46a9c000}, {0x46a9e000}, {0x46aa0000}, {0x46aa2000}, {0x46aa4000}, {0x46aa6000}, {0x46aa8000}, {0x46aaa000}, {0x46aac000}, {0x46aae000}, {0x46ab0000}, {0x46ab2000}, {0x46ab4000}, {0x46ab6000}, {0x46ab8000}, {0x46aba000}, {0x46abc000}, {0x46abe000}, {0x46ac0000}, {0x46ac2000}, {0x46ac4000}, {0x46ac6000}, {0x46ac8000}, {0x46aca000}, {0x46acc000}, {0x46ace000}, {0x46ad0000}, {0x46ad2000}, {0x46ad4000}, {0x46ad6000}, {0x46ad8000}, {0x46ada000}, {0x46adc000}, {0x46ade000}, {0x46ae0000}, {0x46ae2000}, {0x46ae4000}, {0x46ae6000}, {0x46ae8000}, {0x46aea000}, {0x46aec000}, {0x46aee000}, {0x46af0000}, {0x46af2000}, {0x46af4000}, {0x46af6000}, {0x46af8000}, {0x46afa000}, {0x46afc000}, {0x46afe000}, {0x46b00000}, {0x46b02000}, {0x46b04000}, {0x46b06000}, {0x46b08000}, {0x46b0a000}, {0x46b0c000}, {0x46b0e000}, {0x46b10000}, {0x46b12000}, {0x46b14000}, {0x46b16000}, {0x46b18000}, {0x46b1a000}, {0x46b1c000}, {0x46b1e000}, {0x46b20000}, {0x46b22000}, {0x46b24000}, {0x46b26000}, {0x46b28000}, {0x46b2a000}, {0x46b2c000}, {0x46b2e000}, {0x46b30000}, {0x46b32000}, {0x46b34000}, {0x46b36000}, {0x46b38000}, {0x46b3a000}, {0x46b3c000}, {0x46b3e000}, {0x46b40000}, {0x46b42000}, {0x46b44000}, {0x46b46000}, {0x46b48000}, {0x46b4a000}, {0x46b4c000}, {0x46b4e000}, {0x46b50000}, {0x46b52000}, {0x46b54000}, {0x46b56000}, {0x46b58000}, {0x46b5a000}, {0x46b5c000}, {0x46b5e000}, {0x46b60000}, {0x46b62000}, {0x46b64000}, {0x46b66000}, {0x46b68000}, {0x46b6a000}, {0x46b6c000}, {0x46b6e000}, {0x46b70000}, {0x46b72000}, {0x46b74000}, {0x46b76000}, {0x46b78000}, {0x46b7a000}, {0x46b7c000}, {0x46b7e000}, {0x46b80000}, {0x46b82000}, {0x46b84000}, {0x46b86000}, {0x46b88000}, {0x46b8a000}, {0x46b8c000}, {0x46b8e000}, {0x46b90000}, {0x46b92000}, {0x46b94000}, {0x46b96000}, {0x46b98000}, {0x46b9a000}, {0x46b9c000}, {0x46b9e000}, {0x46ba0000}, {0x46ba2000}, {0x46ba4000}, {0x46ba6000}, {0x46ba8000}, {0x46baa000}, {0x46bac000}, {0x46bae000}, {0x46bb0000}, {0x46bb2000}, {0x46bb4000}, {0x46bb6000}, {0x46bb8000}, {0x46bba000}, {0x46bbc000}, {0x46bbe000}, {0x46bc0000}, {0x46bc2000}, {0x46bc4000}, {0x46bc6000}, {0x46bc8000}, {0x46bca000}, {0x46bcc000}, {0x46bce000}, {0x46bd0000}, {0x46bd2000}, {0x46bd4000}, {0x46bd6000}, {0x46bd8000}, {0x46bda000}, {0x46bdc000}, {0x46bde000}, {0x46be0000}, {0x46be2000}, {0x46be4000}, {0x46be6000}, {0x46be8000}, {0x46bea000}, {0x46bec000}, {0x46bee000}, {0x46bf0000}, {0x46bf2000}, {0x46bf4000}, {0x46bf6000}, {0x46bf8000}, {0x46bfa000}, {0x46bfc000}, {0x46bfe000}, {0x46c00000}, {0x46c02000}, {0x46c04000}, {0x46c06000}, {0x46c08000}, {0x46c0a000}, {0x46c0c000}, {0x46c0e000}, {0x46c10000}, {0x46c12000}, {0x46c14000}, {0x46c16000}, {0x46c18000}, {0x46c1a000}, {0x46c1c000}, {0x46c1e000}, {0x46c20000}, {0x46c22000}, {0x46c24000}, {0x46c26000}, {0x46c28000}, {0x46c2a000}, {0x46c2c000}, {0x46c2e000}, {0x46c30000}, {0x46c32000}, {0x46c34000}, {0x46c36000}, {0x46c38000}, {0x46c3a000}, {0x46c3c000}, {0x46c3e000}, {0x46c40000}, {0x46c42000}, {0x46c44000}, {0x46c46000}, {0x46c48000}, {0x46c4a000}, {0x46c4c000}, {0x46c4e000}, {0x46c50000}, {0x46c52000}, {0x46c54000}, {0x46c56000}, {0x46c58000}, {0x46c5a000}, {0x46c5c000}, {0x46c5e000}, {0x46c60000}, {0x46c62000}, {0x46c64000}, {0x46c66000}, {0x46c68000}, {0x46c6a000}, {0x46c6c000}, {0x46c6e000}, {0x46c70000}, {0x46c72000}, {0x46c74000}, {0x46c76000}, {0x46c78000}, {0x46c7a000}, {0x46c7c000}, {0x46c7e000}, {0x46c80000}, {0x46c82000}, {0x46c84000}, {0x46c86000}, {0x46c88000}, {0x46c8a000}, {0x46c8c000}, {0x46c8e000}, {0x46c90000}, {0x46c92000}, {0x46c94000}, {0x46c96000}, {0x46c98000}, {0x46c9a000}, {0x46c9c000}, {0x46c9e000}, {0x46ca0000}, {0x46ca2000}, {0x46ca4000}, {0x46ca6000}, {0x46ca8000}, {0x46caa000}, {0x46cac000}, {0x46cae000}, {0x46cb0000}, {0x46cb2000}, {0x46cb4000}, {0x46cb6000}, {0x46cb8000}, {0x46cba000}, {0x46cbc000}, {0x46cbe000}, {0x46cc0000}, {0x46cc2000}, {0x46cc4000}, {0x46cc6000}, {0x46cc8000}, {0x46cca000}, {0x46ccc000}, {0x46cce000}, {0x46cd0000}, {0x46cd2000}, {0x46cd4000}, {0x46cd6000}, {0x46cd8000}, {0x46cda000}, {0x46cdc000}, {0x46cde000}, {0x46ce0000}, {0x46ce2000}, {0x46ce4000}, {0x46ce6000}, {0x46ce8000}, {0x46cea000}, {0x46cec000}, {0x46cee000}, {0x46cf0000}, {0x46cf2000}, {0x46cf4000}, {0x46cf6000}, {0x46cf8000}, {0x46cfa000}, {0x46cfc000}, {0x46cfe000}, {0x46d00000}, {0x46d02000}, {0x46d04000}, {0x46d06000}, {0x46d08000}, {0x46d0a000}, {0x46d0c000}, {0x46d0e000}, {0x46d10000}, {0x46d12000}, {0x46d14000}, {0x46d16000}, {0x46d18000}, {0x46d1a000}, {0x46d1c000}, {0x46d1e000}, {0x46d20000}, {0x46d22000}, {0x46d24000}, {0x46d26000}, {0x46d28000}, {0x46d2a000}, {0x46d2c000}, {0x46d2e000}, {0x46d30000}, {0x46d32000}, {0x46d34000}, {0x46d36000}, {0x46d38000}, {0x46d3a000}, {0x46d3c000}, {0x46d3e000}, {0x46d40000}, {0x46d42000}, {0x46d44000}, {0x46d46000}, {0x46d48000}, {0x46d4a000}, {0x46d4c000}, {0x46d4e000}, {0x46d50000}, {0x46d52000}, {0x46d54000}, {0x46d56000}, {0x46d58000}, {0x46d5a000}, {0x46d5c000}, {0x46d5e000}, {0x46d60000}, {0x46d62000}, {0x46d64000}, {0x46d66000}, {0x46d68000}, {0x46d6a000}, {0x46d6c000}, {0x46d6e000}, {0x46d70000}, {0x46d72000}, {0x46d74000}, {0x46d76000}, {0x46d78000}, {0x46d7a000}, {0x46d7c000}, {0x46d7e000}, {0x46d80000}, {0x46d82000}, {0x46d84000}, {0x46d86000}, {0x46d88000}, {0x46d8a000}, {0x46d8c000}, {0x46d8e000}, {0x46d90000}, {0x46d92000}, {0x46d94000}, {0x46d96000}, {0x46d98000}, {0x46d9a000}, {0x46d9c000}, {0x46d9e000}, {0x46da0000}, {0x46da2000}, {0x46da4000}, {0x46da6000}, {0x46da8000}, {0x46daa000}, {0x46dac000}, {0x46dae000}, {0x46db0000}, {0x46db2000}, {0x46db4000}, {0x46db6000}, {0x46db8000}, {0x46dba000}, {0x46dbc000}, {0x46dbe000}, {0x46dc0000}, {0x46dc2000}, {0x46dc4000}, {0x46dc6000}, {0x46dc8000}, {0x46dca000}, {0x46dcc000}, {0x46dce000}, {0x46dd0000}, {0x46dd2000}, {0x46dd4000}, {0x46dd6000}, {0x46dd8000}, {0x46dda000}, {0x46ddc000}, {0x46dde000}, {0x46de0000}, {0x46de2000}, {0x46de4000}, {0x46de6000}, {0x46de8000}, {0x46dea000}, {0x46dec000}, {0x46dee000}, {0x46df0000}, {0x46df2000}, {0x46df4000}, {0x46df6000}, {0x46df8000}, {0x46dfa000}, {0x46dfc000}, {0x46dfe000}, {0x46e00000}, {0x46e02000}, {0x46e04000}, {0x46e06000}, {0x46e08000}, {0x46e0a000}, {0x46e0c000}, {0x46e0e000}, {0x46e10000}, {0x46e12000}, {0x46e14000}, {0x46e16000}, {0x46e18000}, {0x46e1a000}, {0x46e1c000}, {0x46e1e000}, {0x46e20000}, {0x46e22000}, {0x46e24000}, {0x46e26000}, {0x46e28000}, {0x46e2a000}, {0x46e2c000}, {0x46e2e000}, {0x46e30000}, {0x46e32000}, {0x46e34000}, {0x46e36000}, {0x46e38000}, {0x46e3a000}, {0x46e3c000}, {0x46e3e000}, {0x46e40000}, {0x46e42000}, {0x46e44000}, {0x46e46000}, {0x46e48000}, {0x46e4a000}, {0x46e4c000}, {0x46e4e000}, {0x46e50000}, {0x46e52000}, {0x46e54000}, {0x46e56000}, {0x46e58000}, {0x46e5a000}, {0x46e5c000}, {0x46e5e000}, {0x46e60000}, {0x46e62000}, {0x46e64000}, {0x46e66000}, {0x46e68000}, {0x46e6a000}, {0x46e6c000}, {0x46e6e000}, {0x46e70000}, {0x46e72000}, {0x46e74000}, {0x46e76000}, {0x46e78000}, {0x46e7a000}, {0x46e7c000}, {0x46e7e000}, {0x46e80000}, {0x46e82000}, {0x46e84000}, {0x46e86000}, {0x46e88000}, {0x46e8a000}, {0x46e8c000}, {0x46e8e000}, {0x46e90000}, {0x46e92000}, {0x46e94000}, {0x46e96000}, {0x46e98000}, {0x46e9a000}, {0x46e9c000}, {0x46e9e000}, {0x46ea0000}, {0x46ea2000}, {0x46ea4000}, {0x46ea6000}, {0x46ea8000}, {0x46eaa000}, {0x46eac000}, {0x46eae000}, {0x46eb0000}, {0x46eb2000}, {0x46eb4000}, {0x46eb6000}, {0x46eb8000}, {0x46eba000}, {0x46ebc000}, {0x46ebe000}, {0x46ec0000}, {0x46ec2000}, {0x46ec4000}, {0x46ec6000}, {0x46ec8000}, {0x46eca000}, {0x46ecc000}, {0x46ece000}, {0x46ed0000}, {0x46ed2000}, {0x46ed4000}, {0x46ed6000}, {0x46ed8000}, {0x46eda000}, {0x46edc000}, {0x46ede000}, {0x46ee0000}, {0x46ee2000}, {0x46ee4000}, {0x46ee6000}, {0x46ee8000}, {0x46eea000}, {0x46eec000}, {0x46eee000}, {0x46ef0000}, {0x46ef2000}, {0x46ef4000}, {0x46ef6000}, {0x46ef8000}, {0x46efa000}, {0x46efc000}, {0x46efe000}, {0x46f00000}, {0x46f02000}, {0x46f04000}, {0x46f06000}, {0x46f08000}, {0x46f0a000}, {0x46f0c000}, {0x46f0e000}, {0x46f10000}, {0x46f12000}, {0x46f14000}, {0x46f16000}, {0x46f18000}, {0x46f1a000}, {0x46f1c000}, {0x46f1e000}, {0x46f20000}, {0x46f22000}, {0x46f24000}, {0x46f26000}, {0x46f28000}, {0x46f2a000}, {0x46f2c000}, {0x46f2e000}, {0x46f30000}, {0x46f32000}, {0x46f34000}, {0x46f36000}, {0x46f38000}, {0x46f3a000}, {0x46f3c000}, {0x46f3e000}, {0x46f40000}, {0x46f42000}, {0x46f44000}, {0x46f46000}, {0x46f48000}, {0x46f4a000}, {0x46f4c000}, {0x46f4e000}, {0x46f50000}, {0x46f52000}, {0x46f54000}, {0x46f56000}, {0x46f58000}, {0x46f5a000}, {0x46f5c000}, {0x46f5e000}, {0x46f60000}, {0x46f62000}, {0x46f64000}, {0x46f66000}, {0x46f68000}, {0x46f6a000}, {0x46f6c000}, {0x46f6e000}, {0x46f70000}, {0x46f72000}, {0x46f74000}, {0x46f76000}, {0x46f78000}, {0x46f7a000}, {0x46f7c000}, {0x46f7e000}, {0x46f80000}, {0x46f82000}, {0x46f84000}, {0x46f86000}, {0x46f88000}, {0x46f8a000}, {0x46f8c000}, {0x46f8e000}, {0x46f90000}, {0x46f92000}, {0x46f94000}, {0x46f96000}, {0x46f98000}, {0x46f9a000}, {0x46f9c000}, {0x46f9e000}, {0x46fa0000}, {0x46fa2000}, {0x46fa4000}, {0x46fa6000}, {0x46fa8000}, {0x46faa000}, {0x46fac000}, {0x46fae000}, {0x46fb0000}, {0x46fb2000}, {0x46fb4000}, {0x46fb6000}, {0x46fb8000}, {0x46fba000}, {0x46fbc000}, {0x46fbe000}, {0x46fc0000}, {0x46fc2000}, {0x46fc4000}, {0x46fc6000}, {0x46fc8000}, {0x46fca000}, {0x46fcc000}, {0x46fce000}, {0x46fd0000}, {0x46fd2000}, {0x46fd4000}, {0x46fd6000}, {0x46fd8000}, {0x46fda000}, {0x46fdc000}, {0x46fde000}, {0x46fe0000}, {0x46fe2000}, {0x46fe4000}, {0x46fe6000}, {0x46fe8000}, {0x46fea000}, {0x46fec000}, {0x46fee000}, {0x46ff0000}, {0x46ff2000}, {0x46ff4000}, {0x46ff6000}, {0x46ff8000}, {0x46ffa000}, {0x46ffc000}, {0x46ffe000}, {0x47000000}, {0x47002000}, {0x47004000}, {0x47006000}, {0x47008000}, {0x4700a000}, {0x4700c000}, {0x4700e000}, {0x47010000}, {0x47012000}, {0x47014000}, {0x47016000}, {0x47018000}, {0x4701a000}, {0x4701c000}, {0x4701e000}, {0x47020000}, {0x47022000}, {0x47024000}, {0x47026000}, {0x47028000}, {0x4702a000}, {0x4702c000}, {0x4702e000}, {0x47030000}, {0x47032000}, {0x47034000}, {0x47036000}, {0x47038000}, {0x4703a000}, {0x4703c000}, {0x4703e000}, {0x47040000}, {0x47042000}, {0x47044000}, {0x47046000}, {0x47048000}, {0x4704a000}, {0x4704c000}, {0x4704e000}, {0x47050000}, {0x47052000}, {0x47054000}, {0x47056000}, {0x47058000}, {0x4705a000}, {0x4705c000}, {0x4705e000}, {0x47060000}, {0x47062000}, {0x47064000}, {0x47066000}, {0x47068000}, {0x4706a000}, {0x4706c000}, {0x4706e000}, {0x47070000}, {0x47072000}, {0x47074000}, {0x47076000}, {0x47078000}, {0x4707a000}, {0x4707c000}, {0x4707e000}, {0x47080000}, {0x47082000}, {0x47084000}, {0x47086000}, {0x47088000}, {0x4708a000}, {0x4708c000}, {0x4708e000}, {0x47090000}, {0x47092000}, {0x47094000}, {0x47096000}, {0x47098000}, {0x4709a000}, {0x4709c000}, {0x4709e000}, {0x470a0000}, {0x470a2000}, {0x470a4000}, {0x470a6000}, {0x470a8000}, {0x470aa000}, {0x470ac000}, {0x470ae000}, {0x470b0000}, {0x470b2000}, {0x470b4000}, {0x470b6000}, {0x470b8000}, {0x470ba000}, {0x470bc000}, {0x470be000}, {0x470c0000}, {0x470c2000}, {0x470c4000}, {0x470c6000}, {0x470c8000}, {0x470ca000}, {0x470cc000}, {0x470ce000}, {0x470d0000}, {0x470d2000}, {0x470d4000}, {0x470d6000}, {0x470d8000}, {0x470da000}, {0x470dc000}, {0x470de000}, {0x470e0000}, {0x470e2000}, {0x470e4000}, {0x470e6000}, {0x470e8000}, {0x470ea000}, {0x470ec000}, {0x470ee000}, {0x470f0000}, {0x470f2000}, {0x470f4000}, {0x470f6000}, {0x470f8000}, {0x470fa000}, {0x470fc000}, {0x470fe000}, {0x47100000}, {0x47102000}, {0x47104000}, {0x47106000}, {0x47108000}, {0x4710a000}, {0x4710c000}, {0x4710e000}, {0x47110000}, {0x47112000}, {0x47114000}, {0x47116000}, {0x47118000}, {0x4711a000}, {0x4711c000}, {0x4711e000}, {0x47120000}, {0x47122000}, {0x47124000}, {0x47126000}, {0x47128000}, {0x4712a000}, {0x4712c000}, {0x4712e000}, {0x47130000}, {0x47132000}, {0x47134000}, {0x47136000}, {0x47138000}, {0x4713a000}, {0x4713c000}, {0x4713e000}, {0x47140000}, {0x47142000}, {0x47144000}, {0x47146000}, {0x47148000}, {0x4714a000}, {0x4714c000}, {0x4714e000}, {0x47150000}, {0x47152000}, {0x47154000}, {0x47156000}, {0x47158000}, {0x4715a000}, {0x4715c000}, {0x4715e000}, {0x47160000}, {0x47162000}, {0x47164000}, {0x47166000}, {0x47168000}, {0x4716a000}, {0x4716c000}, {0x4716e000}, {0x47170000}, {0x47172000}, {0x47174000}, {0x47176000}, {0x47178000}, {0x4717a000}, {0x4717c000}, {0x4717e000}, {0x47180000}, {0x47182000}, {0x47184000}, {0x47186000}, {0x47188000}, {0x4718a000}, {0x4718c000}, {0x4718e000}, {0x47190000}, {0x47192000}, {0x47194000}, {0x47196000}, {0x47198000}, {0x4719a000}, {0x4719c000}, {0x4719e000}, {0x471a0000}, {0x471a2000}, {0x471a4000}, {0x471a6000}, {0x471a8000}, {0x471aa000}, {0x471ac000}, {0x471ae000}, {0x471b0000}, {0x471b2000}, {0x471b4000}, {0x471b6000}, {0x471b8000}, {0x471ba000}, {0x471bc000}, {0x471be000}, {0x471c0000}, {0x471c2000}, {0x471c4000}, {0x471c6000}, {0x471c8000}, {0x471ca000}, {0x471cc000}, {0x471ce000}, {0x471d0000}, {0x471d2000}, {0x471d4000}, {0x471d6000}, {0x471d8000}, {0x471da000}, {0x471dc000}, {0x471de000}, {0x471e0000}, {0x471e2000}, {0x471e4000}, {0x471e6000}, {0x471e8000}, {0x471ea000}, {0x471ec000}, {0x471ee000}, {0x471f0000}, {0x471f2000}, {0x471f4000}, {0x471f6000}, {0x471f8000}, {0x471fa000}, {0x471fc000}, {0x471fe000}, {0x47200000}, {0x47202000}, {0x47204000}, {0x47206000}, {0x47208000}, {0x4720a000}, {0x4720c000}, {0x4720e000}, {0x47210000}, {0x47212000}, {0x47214000}, {0x47216000}, {0x47218000}, {0x4721a000}, {0x4721c000}, {0x4721e000}, {0x47220000}, {0x47222000}, {0x47224000}, {0x47226000}, {0x47228000}, {0x4722a000}, {0x4722c000}, {0x4722e000}, {0x47230000}, {0x47232000}, {0x47234000}, {0x47236000}, {0x47238000}, {0x4723a000}, {0x4723c000}, {0x4723e000}, {0x47240000}, {0x47242000}, {0x47244000}, {0x47246000}, {0x47248000}, {0x4724a000}, {0x4724c000}, {0x4724e000}, {0x47250000}, {0x47252000}, {0x47254000}, {0x47256000}, {0x47258000}, {0x4725a000}, {0x4725c000}, {0x4725e000}, {0x47260000}, {0x47262000}, {0x47264000}, {0x47266000}, {0x47268000}, {0x4726a000}, {0x4726c000}, {0x4726e000}, {0x47270000}, {0x47272000}, {0x47274000}, {0x47276000}, {0x47278000}, {0x4727a000}, {0x4727c000}, {0x4727e000}, {0x47280000}, {0x47282000}, {0x47284000}, {0x47286000}, {0x47288000}, {0x4728a000}, {0x4728c000}, {0x4728e000}, {0x47290000}, {0x47292000}, {0x47294000}, {0x47296000}, {0x47298000}, {0x4729a000}, {0x4729c000}, {0x4729e000}, {0x472a0000}, {0x472a2000}, {0x472a4000}, {0x472a6000}, {0x472a8000}, {0x472aa000}, {0x472ac000}, {0x472ae000}, {0x472b0000}, {0x472b2000}, {0x472b4000}, {0x472b6000}, {0x472b8000}, {0x472ba000}, {0x472bc000}, {0x472be000}, {0x472c0000}, {0x472c2000}, {0x472c4000}, {0x472c6000}, {0x472c8000}, {0x472ca000}, {0x472cc000}, {0x472ce000}, {0x472d0000}, {0x472d2000}, {0x472d4000}, {0x472d6000}, {0x472d8000}, {0x472da000}, {0x472dc000}, {0x472de000}, {0x472e0000}, {0x472e2000}, {0x472e4000}, {0x472e6000}, {0x472e8000}, {0x472ea000}, {0x472ec000}, {0x472ee000}, {0x472f0000}, {0x472f2000}, {0x472f4000}, {0x472f6000}, {0x472f8000}, {0x472fa000}, {0x472fc000}, {0x472fe000}, {0x47300000}, {0x47302000}, {0x47304000}, {0x47306000}, {0x47308000}, {0x4730a000}, {0x4730c000}, {0x4730e000}, {0x47310000}, {0x47312000}, {0x47314000}, {0x47316000}, {0x47318000}, {0x4731a000}, {0x4731c000}, {0x4731e000}, {0x47320000}, {0x47322000}, {0x47324000}, {0x47326000}, {0x47328000}, {0x4732a000}, {0x4732c000}, {0x4732e000}, {0x47330000}, {0x47332000}, {0x47334000}, {0x47336000}, {0x47338000}, {0x4733a000}, {0x4733c000}, {0x4733e000}, {0x47340000}, {0x47342000}, {0x47344000}, {0x47346000}, {0x47348000}, {0x4734a000}, {0x4734c000}, {0x4734e000}, {0x47350000}, {0x47352000}, {0x47354000}, {0x47356000}, {0x47358000}, {0x4735a000}, {0x4735c000}, {0x4735e000}, {0x47360000}, {0x47362000}, {0x47364000}, {0x47366000}, {0x47368000}, {0x4736a000}, {0x4736c000}, {0x4736e000}, {0x47370000}, {0x47372000}, {0x47374000}, {0x47376000}, {0x47378000}, {0x4737a000}, {0x4737c000}, {0x4737e000}, {0x47380000}, {0x47382000}, {0x47384000}, {0x47386000}, {0x47388000}, {0x4738a000}, {0x4738c000}, {0x4738e000}, {0x47390000}, {0x47392000}, {0x47394000}, {0x47396000}, {0x47398000}, {0x4739a000}, {0x4739c000}, {0x4739e000}, {0x473a0000}, {0x473a2000}, {0x473a4000}, {0x473a6000}, {0x473a8000}, {0x473aa000}, {0x473ac000}, {0x473ae000}, {0x473b0000}, {0x473b2000}, {0x473b4000}, {0x473b6000}, {0x473b8000}, {0x473ba000}, {0x473bc000}, {0x473be000}, {0x473c0000}, {0x473c2000}, {0x473c4000}, {0x473c6000}, {0x473c8000}, {0x473ca000}, {0x473cc000}, {0x473ce000}, {0x473d0000}, {0x473d2000}, {0x473d4000}, {0x473d6000}, {0x473d8000}, {0x473da000}, {0x473dc000}, {0x473de000}, {0x473e0000}, {0x473e2000}, {0x473e4000}, {0x473e6000}, {0x473e8000}, {0x473ea000}, {0x473ec000}, {0x473ee000}, {0x473f0000}, {0x473f2000}, {0x473f4000}, {0x473f6000}, {0x473f8000}, {0x473fa000}, {0x473fc000}, {0x473fe000}, {0x47400000}, {0x47402000}, {0x47404000}, {0x47406000}, {0x47408000}, {0x4740a000}, {0x4740c000}, {0x4740e000}, {0x47410000}, {0x47412000}, {0x47414000}, {0x47416000}, {0x47418000}, {0x4741a000}, {0x4741c000}, {0x4741e000}, {0x47420000}, {0x47422000}, {0x47424000}, {0x47426000}, {0x47428000}, {0x4742a000}, {0x4742c000}, {0x4742e000}, {0x47430000}, {0x47432000}, {0x47434000}, {0x47436000}, {0x47438000}, {0x4743a000}, {0x4743c000}, {0x4743e000}, {0x47440000}, {0x47442000}, {0x47444000}, {0x47446000}, {0x47448000}, {0x4744a000}, {0x4744c000}, {0x4744e000}, {0x47450000}, {0x47452000}, {0x47454000}, {0x47456000}, {0x47458000}, {0x4745a000}, {0x4745c000}, {0x4745e000}, {0x47460000}, {0x47462000}, {0x47464000}, {0x47466000}, {0x47468000}, {0x4746a000}, {0x4746c000}, {0x4746e000}, {0x47470000}, {0x47472000}, {0x47474000}, {0x47476000}, {0x47478000}, {0x4747a000}, {0x4747c000}, {0x4747e000}, {0x47480000}, {0x47482000}, {0x47484000}, {0x47486000}, {0x47488000}, {0x4748a000}, {0x4748c000}, {0x4748e000}, {0x47490000}, {0x47492000}, {0x47494000}, {0x47496000}, {0x47498000}, {0x4749a000}, {0x4749c000}, {0x4749e000}, {0x474a0000}, {0x474a2000}, {0x474a4000}, {0x474a6000}, {0x474a8000}, {0x474aa000}, {0x474ac000}, {0x474ae000}, {0x474b0000}, {0x474b2000}, {0x474b4000}, {0x474b6000}, {0x474b8000}, {0x474ba000}, {0x474bc000}, {0x474be000}, {0x474c0000}, {0x474c2000}, {0x474c4000}, {0x474c6000}, {0x474c8000}, {0x474ca000}, {0x474cc000}, {0x474ce000}, {0x474d0000}, {0x474d2000}, {0x474d4000}, {0x474d6000}, {0x474d8000}, {0x474da000}, {0x474dc000}, {0x474de000}, {0x474e0000}, {0x474e2000}, {0x474e4000}, {0x474e6000}, {0x474e8000}, {0x474ea000}, {0x474ec000}, {0x474ee000}, {0x474f0000}, {0x474f2000}, {0x474f4000}, {0x474f6000}, {0x474f8000}, {0x474fa000}, {0x474fc000}, {0x474fe000}, {0x47500000}, {0x47502000}, {0x47504000}, {0x47506000}, {0x47508000}, {0x4750a000}, {0x4750c000}, {0x4750e000}, {0x47510000}, {0x47512000}, {0x47514000}, {0x47516000}, {0x47518000}, {0x4751a000}, {0x4751c000}, {0x4751e000}, {0x47520000}, {0x47522000}, {0x47524000}, {0x47526000}, {0x47528000}, {0x4752a000}, {0x4752c000}, {0x4752e000}, {0x47530000}, {0x47532000}, {0x47534000}, {0x47536000}, {0x47538000}, {0x4753a000}, {0x4753c000}, {0x4753e000}, {0x47540000}, {0x47542000}, {0x47544000}, {0x47546000}, {0x47548000}, {0x4754a000}, {0x4754c000}, {0x4754e000}, {0x47550000}, {0x47552000}, {0x47554000}, {0x47556000}, {0x47558000}, {0x4755a000}, {0x4755c000}, {0x4755e000}, {0x47560000}, {0x47562000}, {0x47564000}, {0x47566000}, {0x47568000}, {0x4756a000}, {0x4756c000}, {0x4756e000}, {0x47570000}, {0x47572000}, {0x47574000}, {0x47576000}, {0x47578000}, {0x4757a000}, {0x4757c000}, {0x4757e000}, {0x47580000}, {0x47582000}, {0x47584000}, {0x47586000}, {0x47588000}, {0x4758a000}, {0x4758c000}, {0x4758e000}, {0x47590000}, {0x47592000}, {0x47594000}, {0x47596000}, {0x47598000}, {0x4759a000}, {0x4759c000}, {0x4759e000}, {0x475a0000}, {0x475a2000}, {0x475a4000}, {0x475a6000}, {0x475a8000}, {0x475aa000}, {0x475ac000}, {0x475ae000}, {0x475b0000}, {0x475b2000}, {0x475b4000}, {0x475b6000}, {0x475b8000}, {0x475ba000}, {0x475bc000}, {0x475be000}, {0x475c0000}, {0x475c2000}, {0x475c4000}, {0x475c6000}, {0x475c8000}, {0x475ca000}, {0x475cc000}, {0x475ce000}, {0x475d0000}, {0x475d2000}, {0x475d4000}, {0x475d6000}, {0x475d8000}, {0x475da000}, {0x475dc000}, {0x475de000}, {0x475e0000}, {0x475e2000}, {0x475e4000}, {0x475e6000}, {0x475e8000}, {0x475ea000}, {0x475ec000}, {0x475ee000}, {0x475f0000}, {0x475f2000}, {0x475f4000}, {0x475f6000}, {0x475f8000}, {0x475fa000}, {0x475fc000}, {0x475fe000}, {0x47600000}, {0x47602000}, {0x47604000}, {0x47606000}, {0x47608000}, {0x4760a000}, {0x4760c000}, {0x4760e000}, {0x47610000}, {0x47612000}, {0x47614000}, {0x47616000}, {0x47618000}, {0x4761a000}, {0x4761c000}, {0x4761e000}, {0x47620000}, {0x47622000}, {0x47624000}, {0x47626000}, {0x47628000}, {0x4762a000}, {0x4762c000}, {0x4762e000}, {0x47630000}, {0x47632000}, {0x47634000}, {0x47636000}, {0x47638000}, {0x4763a000}, {0x4763c000}, {0x4763e000}, {0x47640000}, {0x47642000}, {0x47644000}, {0x47646000}, {0x47648000}, {0x4764a000}, {0x4764c000}, {0x4764e000}, {0x47650000}, {0x47652000}, {0x47654000}, {0x47656000}, {0x47658000}, {0x4765a000}, {0x4765c000}, {0x4765e000}, {0x47660000}, {0x47662000}, {0x47664000}, {0x47666000}, {0x47668000}, {0x4766a000}, {0x4766c000}, {0x4766e000}, {0x47670000}, {0x47672000}, {0x47674000}, {0x47676000}, {0x47678000}, {0x4767a000}, {0x4767c000}, {0x4767e000}, {0x47680000}, {0x47682000}, {0x47684000}, {0x47686000}, {0x47688000}, {0x4768a000}, {0x4768c000}, {0x4768e000}, {0x47690000}, {0x47692000}, {0x47694000}, {0x47696000}, {0x47698000}, {0x4769a000}, {0x4769c000}, {0x4769e000}, {0x476a0000}, {0x476a2000}, {0x476a4000}, {0x476a6000}, {0x476a8000}, {0x476aa000}, {0x476ac000}, {0x476ae000}, {0x476b0000}, {0x476b2000}, {0x476b4000}, {0x476b6000}, {0x476b8000}, {0x476ba000}, {0x476bc000}, {0x476be000}, {0x476c0000}, {0x476c2000}, {0x476c4000}, {0x476c6000}, {0x476c8000}, {0x476ca000}, {0x476cc000}, {0x476ce000}, {0x476d0000}, {0x476d2000}, {0x476d4000}, {0x476d6000}, {0x476d8000}, {0x476da000}, {0x476dc000}, {0x476de000}, {0x476e0000}, {0x476e2000}, {0x476e4000}, {0x476e6000}, {0x476e8000}, {0x476ea000}, {0x476ec000}, {0x476ee000}, {0x476f0000}, {0x476f2000}, {0x476f4000}, {0x476f6000}, {0x476f8000}, {0x476fa000}, {0x476fc000}, {0x476fe000}, {0x47700000}, {0x47702000}, {0x47704000}, {0x47706000}, {0x47708000}, {0x4770a000}, {0x4770c000}, {0x4770e000}, {0x47710000}, {0x47712000}, {0x47714000}, {0x47716000}, {0x47718000}, {0x4771a000}, {0x4771c000}, {0x4771e000}, {0x47720000}, {0x47722000}, {0x47724000}, {0x47726000}, {0x47728000}, {0x4772a000}, {0x4772c000}, {0x4772e000}, {0x47730000}, {0x47732000}, {0x47734000}, {0x47736000}, {0x47738000}, {0x4773a000}, {0x4773c000}, {0x4773e000}, {0x47740000}, {0x47742000}, {0x47744000}, {0x47746000}, {0x47748000}, {0x4774a000}, {0x4774c000}, {0x4774e000}, {0x47750000}, {0x47752000}, {0x47754000}, {0x47756000}, {0x47758000}, {0x4775a000}, {0x4775c000}, {0x4775e000}, {0x47760000}, {0x47762000}, {0x47764000}, {0x47766000}, {0x47768000}, {0x4776a000}, {0x4776c000}, {0x4776e000}, {0x47770000}, {0x47772000}, {0x47774000}, {0x47776000}, {0x47778000}, {0x4777a000}, {0x4777c000}, {0x4777e000}, {0x47780000}, {0x47782000}, {0x47784000}, {0x47786000}, {0x47788000}, {0x4778a000}, {0x4778c000}, {0x4778e000}, {0x47790000}, {0x47792000}, {0x47794000}, {0x47796000}, {0x47798000}, {0x4779a000}, {0x4779c000}, {0x4779e000}, {0x477a0000}, {0x477a2000}, {0x477a4000}, {0x477a6000}, {0x477a8000}, {0x477aa000}, {0x477ac000}, {0x477ae000}, {0x477b0000}, {0x477b2000}, {0x477b4000}, {0x477b6000}, {0x477b8000}, {0x477ba000}, {0x477bc000}, {0x477be000}, {0x477c0000}, {0x477c2000}, {0x477c4000}, {0x477c6000}, {0x477c8000}, {0x477ca000}, {0x477cc000}, {0x477ce000}, {0x477d0000}, {0x477d2000}, {0x477d4000}, {0x477d6000}, {0x477d8000}, {0x477da000}, {0x477dc000}, {0x477de000}, {0x477e0000}, {0x477e2000}, {0x477e4000}, {0x477e6000}, {0x477e8000}, {0x477ea000}, {0x477ec000}, {0x477ee000}, {0x477f0000}, {0x477f2000}, {0x477f4000}, {0x477f6000}, {0x477f8000}, {0x477fa000}, {0x477fc000}, {0x477fe000}, {0x7f800000}, {0x7f802000}, {0x7f804000}, {0x7f806000}, {0x7f808000}, {0x7f80a000}, {0x7f80c000}, {0x7f80e000}, {0x7f810000}, {0x7f812000}, {0x7f814000}, {0x7f816000}, {0x7f818000}, {0x7f81a000}, {0x7f81c000}, {0x7f81e000}, {0x7f820000}, {0x7f822000}, {0x7f824000}, {0x7f826000}, {0x7f828000}, {0x7f82a000}, {0x7f82c000}, {0x7f82e000}, {0x7f830000}, {0x7f832000}, {0x7f834000}, {0x7f836000}, {0x7f838000}, {0x7f83a000}, {0x7f83c000}, {0x7f83e000}, {0x7f840000}, {0x7f842000}, {0x7f844000}, {0x7f846000}, {0x7f848000}, {0x7f84a000}, {0x7f84c000}, {0x7f84e000}, {0x7f850000}, {0x7f852000}, {0x7f854000}, {0x7f856000}, {0x7f858000}, {0x7f85a000}, {0x7f85c000}, {0x7f85e000}, {0x7f860000}, {0x7f862000}, {0x7f864000}, {0x7f866000}, {0x7f868000}, {0x7f86a000}, {0x7f86c000}, {0x7f86e000}, {0x7f870000}, {0x7f872000}, {0x7f874000}, {0x7f876000}, {0x7f878000}, {0x7f87a000}, {0x7f87c000}, {0x7f87e000}, {0x7f880000}, {0x7f882000}, {0x7f884000}, {0x7f886000}, {0x7f888000}, {0x7f88a000}, {0x7f88c000}, {0x7f88e000}, {0x7f890000}, {0x7f892000}, {0x7f894000}, {0x7f896000}, {0x7f898000}, {0x7f89a000}, {0x7f89c000}, {0x7f89e000}, {0x7f8a0000}, {0x7f8a2000}, {0x7f8a4000}, {0x7f8a6000}, {0x7f8a8000}, {0x7f8aa000}, {0x7f8ac000}, {0x7f8ae000}, {0x7f8b0000}, {0x7f8b2000}, {0x7f8b4000}, {0x7f8b6000}, {0x7f8b8000}, {0x7f8ba000}, {0x7f8bc000}, {0x7f8be000}, {0x7f8c0000}, {0x7f8c2000}, {0x7f8c4000}, {0x7f8c6000}, {0x7f8c8000}, {0x7f8ca000}, {0x7f8cc000}, {0x7f8ce000}, {0x7f8d0000}, {0x7f8d2000}, {0x7f8d4000}, {0x7f8d6000}, {0x7f8d8000}, {0x7f8da000}, {0x7f8dc000}, {0x7f8de000}, {0x7f8e0000}, {0x7f8e2000}, {0x7f8e4000}, {0x7f8e6000}, {0x7f8e8000}, {0x7f8ea000}, {0x7f8ec000}, {0x7f8ee000}, {0x7f8f0000}, {0x7f8f2000}, {0x7f8f4000}, {0x7f8f6000}, {0x7f8f8000}, {0x7f8fa000}, {0x7f8fc000}, {0x7f8fe000}, {0x7f900000}, {0x7f902000}, {0x7f904000}, {0x7f906000}, {0x7f908000}, {0x7f90a000}, {0x7f90c000}, {0x7f90e000}, {0x7f910000}, {0x7f912000}, {0x7f914000}, {0x7f916000}, {0x7f918000}, {0x7f91a000}, {0x7f91c000}, {0x7f91e000}, {0x7f920000}, {0x7f922000}, {0x7f924000}, {0x7f926000}, {0x7f928000}, {0x7f92a000}, {0x7f92c000}, {0x7f92e000}, {0x7f930000}, {0x7f932000}, {0x7f934000}, {0x7f936000}, {0x7f938000}, {0x7f93a000}, {0x7f93c000}, {0x7f93e000}, {0x7f940000}, {0x7f942000}, {0x7f944000}, {0x7f946000}, {0x7f948000}, {0x7f94a000}, {0x7f94c000}, {0x7f94e000}, {0x7f950000}, {0x7f952000}, {0x7f954000}, {0x7f956000}, {0x7f958000}, {0x7f95a000}, {0x7f95c000}, {0x7f95e000}, {0x7f960000}, {0x7f962000}, {0x7f964000}, {0x7f966000}, {0x7f968000}, {0x7f96a000}, {0x7f96c000}, {0x7f96e000}, {0x7f970000}, {0x7f972000}, {0x7f974000}, {0x7f976000}, {0x7f978000}, {0x7f97a000}, {0x7f97c000}, {0x7f97e000}, {0x7f980000}, {0x7f982000}, {0x7f984000}, {0x7f986000}, {0x7f988000}, {0x7f98a000}, {0x7f98c000}, {0x7f98e000}, {0x7f990000}, {0x7f992000}, {0x7f994000}, {0x7f996000}, {0x7f998000}, {0x7f99a000}, {0x7f99c000}, {0x7f99e000}, {0x7f9a0000}, {0x7f9a2000}, {0x7f9a4000}, {0x7f9a6000}, {0x7f9a8000}, {0x7f9aa000}, {0x7f9ac000}, {0x7f9ae000}, {0x7f9b0000}, {0x7f9b2000}, {0x7f9b4000}, {0x7f9b6000}, {0x7f9b8000}, {0x7f9ba000}, {0x7f9bc000}, {0x7f9be000}, {0x7f9c0000}, {0x7f9c2000}, {0x7f9c4000}, {0x7f9c6000}, {0x7f9c8000}, {0x7f9ca000}, {0x7f9cc000}, {0x7f9ce000}, {0x7f9d0000}, {0x7f9d2000}, {0x7f9d4000}, {0x7f9d6000}, {0x7f9d8000}, {0x7f9da000}, {0x7f9dc000}, {0x7f9de000}, {0x7f9e0000}, {0x7f9e2000}, {0x7f9e4000}, {0x7f9e6000}, {0x7f9e8000}, {0x7f9ea000}, {0x7f9ec000}, {0x7f9ee000}, {0x7f9f0000}, {0x7f9f2000}, {0x7f9f4000}, {0x7f9f6000}, {0x7f9f8000}, {0x7f9fa000}, {0x7f9fc000}, {0x7f9fe000}, {0x7fa00000}, {0x7fa02000}, {0x7fa04000}, {0x7fa06000}, {0x7fa08000}, {0x7fa0a000}, {0x7fa0c000}, {0x7fa0e000}, {0x7fa10000}, {0x7fa12000}, {0x7fa14000}, {0x7fa16000}, {0x7fa18000}, {0x7fa1a000}, {0x7fa1c000}, {0x7fa1e000}, {0x7fa20000}, {0x7fa22000}, {0x7fa24000}, {0x7fa26000}, {0x7fa28000}, {0x7fa2a000}, {0x7fa2c000}, {0x7fa2e000}, {0x7fa30000}, {0x7fa32000}, {0x7fa34000}, {0x7fa36000}, {0x7fa38000}, {0x7fa3a000}, {0x7fa3c000}, {0x7fa3e000}, {0x7fa40000}, {0x7fa42000}, {0x7fa44000}, {0x7fa46000}, {0x7fa48000}, {0x7fa4a000}, {0x7fa4c000}, {0x7fa4e000}, {0x7fa50000}, {0x7fa52000}, {0x7fa54000}, {0x7fa56000}, {0x7fa58000}, {0x7fa5a000}, {0x7fa5c000}, {0x7fa5e000}, {0x7fa60000}, {0x7fa62000}, {0x7fa64000}, {0x7fa66000}, {0x7fa68000}, {0x7fa6a000}, {0x7fa6c000}, {0x7fa6e000}, {0x7fa70000}, {0x7fa72000}, {0x7fa74000}, {0x7fa76000}, {0x7fa78000}, {0x7fa7a000}, {0x7fa7c000}, {0x7fa7e000}, {0x7fa80000}, {0x7fa82000}, {0x7fa84000}, {0x7fa86000}, {0x7fa88000}, {0x7fa8a000}, {0x7fa8c000}, {0x7fa8e000}, {0x7fa90000}, {0x7fa92000}, {0x7fa94000}, {0x7fa96000}, {0x7fa98000}, {0x7fa9a000}, {0x7fa9c000}, {0x7fa9e000}, {0x7faa0000}, {0x7faa2000}, {0x7faa4000}, {0x7faa6000}, {0x7faa8000}, {0x7faaa000}, {0x7faac000}, {0x7faae000}, {0x7fab0000}, {0x7fab2000}, {0x7fab4000}, {0x7fab6000}, {0x7fab8000}, {0x7faba000}, {0x7fabc000}, {0x7fabe000}, {0x7fac0000}, {0x7fac2000}, {0x7fac4000}, {0x7fac6000}, {0x7fac8000}, {0x7faca000}, {0x7facc000}, {0x7face000}, {0x7fad0000}, {0x7fad2000}, {0x7fad4000}, {0x7fad6000}, {0x7fad8000}, {0x7fada000}, {0x7fadc000}, {0x7fade000}, {0x7fae0000}, {0x7fae2000}, {0x7fae4000}, {0x7fae6000}, {0x7fae8000}, {0x7faea000}, {0x7faec000}, {0x7faee000}, {0x7faf0000}, {0x7faf2000}, {0x7faf4000}, {0x7faf6000}, {0x7faf8000}, {0x7fafa000}, {0x7fafc000}, {0x7fafe000}, {0x7fb00000}, {0x7fb02000}, {0x7fb04000}, {0x7fb06000}, {0x7fb08000}, {0x7fb0a000}, {0x7fb0c000}, {0x7fb0e000}, {0x7fb10000}, {0x7fb12000}, {0x7fb14000}, {0x7fb16000}, {0x7fb18000}, {0x7fb1a000}, {0x7fb1c000}, {0x7fb1e000}, {0x7fb20000}, {0x7fb22000}, {0x7fb24000}, {0x7fb26000}, {0x7fb28000}, {0x7fb2a000}, {0x7fb2c000}, {0x7fb2e000}, {0x7fb30000}, {0x7fb32000}, {0x7fb34000}, {0x7fb36000}, {0x7fb38000}, {0x7fb3a000}, {0x7fb3c000}, {0x7fb3e000}, {0x7fb40000}, {0x7fb42000}, {0x7fb44000}, {0x7fb46000}, {0x7fb48000}, {0x7fb4a000}, {0x7fb4c000}, {0x7fb4e000}, {0x7fb50000}, {0x7fb52000}, {0x7fb54000}, {0x7fb56000}, {0x7fb58000}, {0x7fb5a000}, {0x7fb5c000}, {0x7fb5e000}, {0x7fb60000}, {0x7fb62000}, {0x7fb64000}, {0x7fb66000}, {0x7fb68000}, {0x7fb6a000}, {0x7fb6c000}, {0x7fb6e000}, {0x7fb70000}, {0x7fb72000}, {0x7fb74000}, {0x7fb76000}, {0x7fb78000}, {0x7fb7a000}, {0x7fb7c000}, {0x7fb7e000}, {0x7fb80000}, {0x7fb82000}, {0x7fb84000}, {0x7fb86000}, {0x7fb88000}, {0x7fb8a000}, {0x7fb8c000}, {0x7fb8e000}, {0x7fb90000}, {0x7fb92000}, {0x7fb94000}, {0x7fb96000}, {0x7fb98000}, {0x7fb9a000}, {0x7fb9c000}, {0x7fb9e000}, {0x7fba0000}, {0x7fba2000}, {0x7fba4000}, {0x7fba6000}, {0x7fba8000}, {0x7fbaa000}, {0x7fbac000}, {0x7fbae000}, {0x7fbb0000}, {0x7fbb2000}, {0x7fbb4000}, {0x7fbb6000}, {0x7fbb8000}, {0x7fbba000}, {0x7fbbc000}, {0x7fbbe000}, {0x7fbc0000}, {0x7fbc2000}, {0x7fbc4000}, {0x7fbc6000}, {0x7fbc8000}, {0x7fbca000}, {0x7fbcc000}, {0x7fbce000}, {0x7fbd0000}, {0x7fbd2000}, {0x7fbd4000}, {0x7fbd6000}, {0x7fbd8000}, {0x7fbda000}, {0x7fbdc000}, {0x7fbde000}, {0x7fbe0000}, {0x7fbe2000}, {0x7fbe4000}, {0x7fbe6000}, {0x7fbe8000}, {0x7fbea000}, {0x7fbec000}, {0x7fbee000}, {0x7fbf0000}, {0x7fbf2000}, {0x7fbf4000}, {0x7fbf6000}, {0x7fbf8000}, {0x7fbfa000}, {0x7fbfc000}, {0x7fbfe000}, {0x7fc00000}, {0x7fc02000}, {0x7fc04000}, {0x7fc06000}, {0x7fc08000}, {0x7fc0a000}, {0x7fc0c000}, {0x7fc0e000}, {0x7fc10000}, {0x7fc12000}, {0x7fc14000}, {0x7fc16000}, {0x7fc18000}, {0x7fc1a000}, {0x7fc1c000}, {0x7fc1e000}, {0x7fc20000}, {0x7fc22000}, {0x7fc24000}, {0x7fc26000}, {0x7fc28000}, {0x7fc2a000}, {0x7fc2c000}, {0x7fc2e000}, {0x7fc30000}, {0x7fc32000}, {0x7fc34000}, {0x7fc36000}, {0x7fc38000}, {0x7fc3a000}, {0x7fc3c000}, {0x7fc3e000}, {0x7fc40000}, {0x7fc42000}, {0x7fc44000}, {0x7fc46000}, {0x7fc48000}, {0x7fc4a000}, {0x7fc4c000}, {0x7fc4e000}, {0x7fc50000}, {0x7fc52000}, {0x7fc54000}, {0x7fc56000}, {0x7fc58000}, {0x7fc5a000}, {0x7fc5c000}, {0x7fc5e000}, {0x7fc60000}, {0x7fc62000}, {0x7fc64000}, {0x7fc66000}, {0x7fc68000}, {0x7fc6a000}, {0x7fc6c000}, {0x7fc6e000}, {0x7fc70000}, {0x7fc72000}, {0x7fc74000}, {0x7fc76000}, {0x7fc78000}, {0x7fc7a000}, {0x7fc7c000}, {0x7fc7e000}, {0x7fc80000}, {0x7fc82000}, {0x7fc84000}, {0x7fc86000}, {0x7fc88000}, {0x7fc8a000}, {0x7fc8c000}, {0x7fc8e000}, {0x7fc90000}, {0x7fc92000}, {0x7fc94000}, {0x7fc96000}, {0x7fc98000}, {0x7fc9a000}, {0x7fc9c000}, {0x7fc9e000}, {0x7fca0000}, {0x7fca2000}, {0x7fca4000}, {0x7fca6000}, {0x7fca8000}, {0x7fcaa000}, {0x7fcac000}, {0x7fcae000}, {0x7fcb0000}, {0x7fcb2000}, {0x7fcb4000}, {0x7fcb6000}, {0x7fcb8000}, {0x7fcba000}, {0x7fcbc000}, {0x7fcbe000}, {0x7fcc0000}, {0x7fcc2000}, {0x7fcc4000}, {0x7fcc6000}, {0x7fcc8000}, {0x7fcca000}, {0x7fccc000}, {0x7fcce000}, {0x7fcd0000}, {0x7fcd2000}, {0x7fcd4000}, {0x7fcd6000}, {0x7fcd8000}, {0x7fcda000}, {0x7fcdc000}, {0x7fcde000}, {0x7fce0000}, {0x7fce2000}, {0x7fce4000}, {0x7fce6000}, {0x7fce8000}, {0x7fcea000}, {0x7fcec000}, {0x7fcee000}, {0x7fcf0000}, {0x7fcf2000}, {0x7fcf4000}, {0x7fcf6000}, {0x7fcf8000}, {0x7fcfa000}, {0x7fcfc000}, {0x7fcfe000}, {0x7fd00000}, {0x7fd02000}, {0x7fd04000}, {0x7fd06000}, {0x7fd08000}, {0x7fd0a000}, {0x7fd0c000}, {0x7fd0e000}, {0x7fd10000}, {0x7fd12000}, {0x7fd14000}, {0x7fd16000}, {0x7fd18000}, {0x7fd1a000}, {0x7fd1c000}, {0x7fd1e000}, {0x7fd20000}, {0x7fd22000}, {0x7fd24000}, {0x7fd26000}, {0x7fd28000}, {0x7fd2a000}, {0x7fd2c000}, {0x7fd2e000}, {0x7fd30000}, {0x7fd32000}, {0x7fd34000}, {0x7fd36000}, {0x7fd38000}, {0x7fd3a000}, {0x7fd3c000}, {0x7fd3e000}, {0x7fd40000}, {0x7fd42000}, {0x7fd44000}, {0x7fd46000}, {0x7fd48000}, {0x7fd4a000}, {0x7fd4c000}, {0x7fd4e000}, {0x7fd50000}, {0x7fd52000}, {0x7fd54000}, {0x7fd56000}, {0x7fd58000}, {0x7fd5a000}, {0x7fd5c000}, {0x7fd5e000}, {0x7fd60000}, {0x7fd62000}, {0x7fd64000}, {0x7fd66000}, {0x7fd68000}, {0x7fd6a000}, {0x7fd6c000}, {0x7fd6e000}, {0x7fd70000}, {0x7fd72000}, {0x7fd74000}, {0x7fd76000}, {0x7fd78000}, {0x7fd7a000}, {0x7fd7c000}, {0x7fd7e000}, {0x7fd80000}, {0x7fd82000}, {0x7fd84000}, {0x7fd86000}, {0x7fd88000}, {0x7fd8a000}, {0x7fd8c000}, {0x7fd8e000}, {0x7fd90000}, {0x7fd92000}, {0x7fd94000}, {0x7fd96000}, {0x7fd98000}, {0x7fd9a000}, {0x7fd9c000}, {0x7fd9e000}, {0x7fda0000}, {0x7fda2000}, {0x7fda4000}, {0x7fda6000}, {0x7fda8000}, {0x7fdaa000}, {0x7fdac000}, {0x7fdae000}, {0x7fdb0000}, {0x7fdb2000}, {0x7fdb4000}, {0x7fdb6000}, {0x7fdb8000}, {0x7fdba000}, {0x7fdbc000}, {0x7fdbe000}, {0x7fdc0000}, {0x7fdc2000}, {0x7fdc4000}, {0x7fdc6000}, {0x7fdc8000}, {0x7fdca000}, {0x7fdcc000}, {0x7fdce000}, {0x7fdd0000}, {0x7fdd2000}, {0x7fdd4000}, {0x7fdd6000}, {0x7fdd8000}, {0x7fdda000}, {0x7fddc000}, {0x7fdde000}, {0x7fde0000}, {0x7fde2000}, {0x7fde4000}, {0x7fde6000}, {0x7fde8000}, {0x7fdea000}, {0x7fdec000}, {0x7fdee000}, {0x7fdf0000}, {0x7fdf2000}, {0x7fdf4000}, {0x7fdf6000}, {0x7fdf8000}, {0x7fdfa000}, {0x7fdfc000}, {0x7fdfe000}, {0x7fe00000}, {0x7fe02000}, {0x7fe04000}, {0x7fe06000}, {0x7fe08000}, {0x7fe0a000}, {0x7fe0c000}, {0x7fe0e000}, {0x7fe10000}, {0x7fe12000}, {0x7fe14000}, {0x7fe16000}, {0x7fe18000}, {0x7fe1a000}, {0x7fe1c000}, {0x7fe1e000}, {0x7fe20000}, {0x7fe22000}, {0x7fe24000}, {0x7fe26000}, {0x7fe28000}, {0x7fe2a000}, {0x7fe2c000}, {0x7fe2e000}, {0x7fe30000}, {0x7fe32000}, {0x7fe34000}, {0x7fe36000}, {0x7fe38000}, {0x7fe3a000}, {0x7fe3c000}, {0x7fe3e000}, {0x7fe40000}, {0x7fe42000}, {0x7fe44000}, {0x7fe46000}, {0x7fe48000}, {0x7fe4a000}, {0x7fe4c000}, {0x7fe4e000}, {0x7fe50000}, {0x7fe52000}, {0x7fe54000}, {0x7fe56000}, {0x7fe58000}, {0x7fe5a000}, {0x7fe5c000}, {0x7fe5e000}, {0x7fe60000}, {0x7fe62000}, {0x7fe64000}, {0x7fe66000}, {0x7fe68000}, {0x7fe6a000}, {0x7fe6c000}, {0x7fe6e000}, {0x7fe70000}, {0x7fe72000}, {0x7fe74000}, {0x7fe76000}, {0x7fe78000}, {0x7fe7a000}, {0x7fe7c000}, {0x7fe7e000}, {0x7fe80000}, {0x7fe82000}, {0x7fe84000}, {0x7fe86000}, {0x7fe88000}, {0x7fe8a000}, {0x7fe8c000}, {0x7fe8e000}, {0x7fe90000}, {0x7fe92000}, {0x7fe94000}, {0x7fe96000}, {0x7fe98000}, {0x7fe9a000}, {0x7fe9c000}, {0x7fe9e000}, {0x7fea0000}, {0x7fea2000}, {0x7fea4000}, {0x7fea6000}, {0x7fea8000}, {0x7feaa000}, {0x7feac000}, {0x7feae000}, {0x7feb0000}, {0x7feb2000}, {0x7feb4000}, {0x7feb6000}, {0x7feb8000}, {0x7feba000}, {0x7febc000}, {0x7febe000}, {0x7fec0000}, {0x7fec2000}, {0x7fec4000}, {0x7fec6000}, {0x7fec8000}, {0x7feca000}, {0x7fecc000}, {0x7fece000}, {0x7fed0000}, {0x7fed2000}, {0x7fed4000}, {0x7fed6000}, {0x7fed8000}, {0x7feda000}, {0x7fedc000}, {0x7fede000}, {0x7fee0000}, {0x7fee2000}, {0x7fee4000}, {0x7fee6000}, {0x7fee8000}, {0x7feea000}, {0x7feec000}, {0x7feee000}, {0x7fef0000}, {0x7fef2000}, {0x7fef4000}, {0x7fef6000}, {0x7fef8000}, {0x7fefa000}, {0x7fefc000}, {0x7fefe000}, {0x7ff00000}, {0x7ff02000}, {0x7ff04000}, {0x7ff06000}, {0x7ff08000}, {0x7ff0a000}, {0x7ff0c000}, {0x7ff0e000}, {0x7ff10000}, {0x7ff12000}, {0x7ff14000}, {0x7ff16000}, {0x7ff18000}, {0x7ff1a000}, {0x7ff1c000}, {0x7ff1e000}, {0x7ff20000}, {0x7ff22000}, {0x7ff24000}, {0x7ff26000}, {0x7ff28000}, {0x7ff2a000}, {0x7ff2c000}, {0x7ff2e000}, {0x7ff30000}, {0x7ff32000}, {0x7ff34000}, {0x7ff36000}, {0x7ff38000}, {0x7ff3a000}, {0x7ff3c000}, {0x7ff3e000}, {0x7ff40000}, {0x7ff42000}, {0x7ff44000}, {0x7ff46000}, {0x7ff48000}, {0x7ff4a000}, {0x7ff4c000}, {0x7ff4e000}, {0x7ff50000}, {0x7ff52000}, {0x7ff54000}, {0x7ff56000}, {0x7ff58000}, {0x7ff5a000}, {0x7ff5c000}, {0x7ff5e000}, {0x7ff60000}, {0x7ff62000}, {0x7ff64000}, {0x7ff66000}, {0x7ff68000}, {0x7ff6a000}, {0x7ff6c000}, {0x7ff6e000}, {0x7ff70000}, {0x7ff72000}, {0x7ff74000}, {0x7ff76000}, {0x7ff78000}, {0x7ff7a000}, {0x7ff7c000}, {0x7ff7e000}, {0x7ff80000}, {0x7ff82000}, {0x7ff84000}, {0x7ff86000}, {0x7ff88000}, {0x7ff8a000}, {0x7ff8c000}, {0x7ff8e000}, {0x7ff90000}, {0x7ff92000}, {0x7ff94000}, {0x7ff96000}, {0x7ff98000}, {0x7ff9a000}, {0x7ff9c000}, {0x7ff9e000}, {0x7ffa0000}, {0x7ffa2000}, {0x7ffa4000}, {0x7ffa6000}, {0x7ffa8000}, {0x7ffaa000}, {0x7ffac000}, {0x7ffae000}, {0x7ffb0000}, {0x7ffb2000}, {0x7ffb4000}, {0x7ffb6000}, {0x7ffb8000}, {0x7ffba000}, {0x7ffbc000}, {0x7ffbe000}, {0x7ffc0000}, {0x7ffc2000}, {0x7ffc4000}, {0x7ffc6000}, {0x7ffc8000}, {0x7ffca000}, {0x7ffcc000}, {0x7ffce000}, {0x7ffd0000}, {0x7ffd2000}, {0x7ffd4000}, {0x7ffd6000}, {0x7ffd8000}, {0x7ffda000}, {0x7ffdc000}, {0x7ffde000}, {0x7ffe0000}, {0x7ffe2000}, {0x7ffe4000}, {0x7ffe6000}, {0x7ffe8000}, {0x7ffea000}, {0x7ffec000}, {0x7ffee000}, {0x7fff0000}, {0x7fff2000}, {0x7fff4000}, {0x7fff6000}, {0x7fff8000}, {0x7fffa000}, {0x7fffc000}, {0x7fffe000}, {0x80000000}, {0xb3800000}, {0xb4000000}, {0xb4400000}, {0xb4800000}, {0xb4a00000}, {0xb4c00000}, {0xb4e00000}, {0xb5000000}, {0xb5100000}, {0xb5200000}, {0xb5300000}, {0xb5400000}, {0xb5500000}, {0xb5600000}, {0xb5700000}, {0xb5800000}, {0xb5880000}, {0xb5900000}, {0xb5980000}, {0xb5a00000}, {0xb5a80000}, {0xb5b00000}, {0xb5b80000}, {0xb5c00000}, {0xb5c80000}, {0xb5d00000}, {0xb5d80000}, {0xb5e00000}, {0xb5e80000}, {0xb5f00000}, {0xb5f80000}, {0xb6000000}, {0xb6040000}, {0xb6080000}, {0xb60c0000}, {0xb6100000}, {0xb6140000}, {0xb6180000}, {0xb61c0000}, {0xb6200000}, {0xb6240000}, {0xb6280000}, {0xb62c0000}, {0xb6300000}, {0xb6340000}, {0xb6380000}, {0xb63c0000}, {0xb6400000}, {0xb6440000}, {0xb6480000}, {0xb64c0000}, {0xb6500000}, {0xb6540000}, {0xb6580000}, {0xb65c0000}, {0xb6600000}, {0xb6640000}, {0xb6680000}, {0xb66c0000}, {0xb6700000}, {0xb6740000}, {0xb6780000}, {0xb67c0000}, {0xb6800000}, {0xb6820000}, {0xb6840000}, {0xb6860000}, {0xb6880000}, {0xb68a0000}, {0xb68c0000}, {0xb68e0000}, {0xb6900000}, {0xb6920000}, {0xb6940000}, {0xb6960000}, {0xb6980000}, {0xb69a0000}, {0xb69c0000}, {0xb69e0000}, {0xb6a00000}, {0xb6a20000}, {0xb6a40000}, {0xb6a60000}, {0xb6a80000}, {0xb6aa0000}, {0xb6ac0000}, {0xb6ae0000}, {0xb6b00000}, {0xb6b20000}, {0xb6b40000}, {0xb6b60000}, {0xb6b80000}, {0xb6ba0000}, {0xb6bc0000}, {0xb6be0000}, {0xb6c00000}, {0xb6c20000}, {0xb6c40000}, {0xb6c60000}, {0xb6c80000}, {0xb6ca0000}, {0xb6cc0000}, {0xb6ce0000}, {0xb6d00000}, {0xb6d20000}, {0xb6d40000}, {0xb6d60000}, {0xb6d80000}, {0xb6da0000}, {0xb6dc0000}, {0xb6de0000}, {0xb6e00000}, {0xb6e20000}, {0xb6e40000}, {0xb6e60000}, {0xb6e80000}, {0xb6ea0000}, {0xb6ec0000}, {0xb6ee0000}, {0xb6f00000}, {0xb6f20000}, {0xb6f40000}, {0xb6f60000}, {0xb6f80000}, {0xb6fa0000}, {0xb6fc0000}, {0xb6fe0000}, {0xb7000000}, {0xb7010000}, {0xb7020000}, {0xb7030000}, {0xb7040000}, {0xb7050000}, {0xb7060000}, {0xb7070000}, {0xb7080000}, {0xb7090000}, {0xb70a0000}, {0xb70b0000}, {0xb70c0000}, {0xb70d0000}, {0xb70e0000}, {0xb70f0000}, {0xb7100000}, {0xb7110000}, {0xb7120000}, {0xb7130000}, {0xb7140000}, {0xb7150000}, {0xb7160000}, {0xb7170000}, {0xb7180000}, {0xb7190000}, {0xb71a0000}, {0xb71b0000}, {0xb71c0000}, {0xb71d0000}, {0xb71e0000}, {0xb71f0000}, {0xb7200000}, {0xb7210000}, {0xb7220000}, {0xb7230000}, {0xb7240000}, {0xb7250000}, {0xb7260000}, {0xb7270000}, {0xb7280000}, {0xb7290000}, {0xb72a0000}, {0xb72b0000}, {0xb72c0000}, {0xb72d0000}, {0xb72e0000}, {0xb72f0000}, {0xb7300000}, {0xb7310000}, {0xb7320000}, {0xb7330000}, {0xb7340000}, {0xb7350000}, {0xb7360000}, {0xb7370000}, {0xb7380000}, {0xb7390000}, {0xb73a0000}, {0xb73b0000}, {0xb73c0000}, {0xb73d0000}, {0xb73e0000}, {0xb73f0000}, {0xb7400000}, {0xb7410000}, {0xb7420000}, {0xb7430000}, {0xb7440000}, {0xb7450000}, {0xb7460000}, {0xb7470000}, {0xb7480000}, {0xb7490000}, {0xb74a0000}, {0xb74b0000}, {0xb74c0000}, {0xb74d0000}, {0xb74e0000}, {0xb74f0000}, {0xb7500000}, {0xb7510000}, {0xb7520000}, {0xb7530000}, {0xb7540000}, {0xb7550000}, {0xb7560000}, {0xb7570000}, {0xb7580000}, {0xb7590000}, {0xb75a0000}, {0xb75b0000}, {0xb75c0000}, {0xb75d0000}, {0xb75e0000}, {0xb75f0000}, {0xb7600000}, {0xb7610000}, {0xb7620000}, {0xb7630000}, {0xb7640000}, {0xb7650000}, {0xb7660000}, {0xb7670000}, {0xb7680000}, {0xb7690000}, {0xb76a0000}, {0xb76b0000}, {0xb76c0000}, {0xb76d0000}, {0xb76e0000}, {0xb76f0000}, {0xb7700000}, {0xb7710000}, {0xb7720000}, {0xb7730000}, {0xb7740000}, {0xb7750000}, {0xb7760000}, {0xb7770000}, {0xb7780000}, {0xb7790000}, {0xb77a0000}, {0xb77b0000}, {0xb77c0000}, {0xb77d0000}, {0xb77e0000}, {0xb77f0000}, {0xb7800000}, {0xb7808000}, {0xb7810000}, {0xb7818000}, {0xb7820000}, {0xb7828000}, {0xb7830000}, {0xb7838000}, {0xb7840000}, {0xb7848000}, {0xb7850000}, {0xb7858000}, {0xb7860000}, {0xb7868000}, {0xb7870000}, {0xb7878000}, {0xb7880000}, {0xb7888000}, {0xb7890000}, {0xb7898000}, {0xb78a0000}, {0xb78a8000}, {0xb78b0000}, {0xb78b8000}, {0xb78c0000}, {0xb78c8000}, {0xb78d0000}, {0xb78d8000}, {0xb78e0000}, {0xb78e8000}, {0xb78f0000}, {0xb78f8000}, {0xb7900000}, {0xb7908000}, {0xb7910000}, {0xb7918000}, {0xb7920000}, {0xb7928000}, {0xb7930000}, {0xb7938000}, {0xb7940000}, {0xb7948000}, {0xb7950000}, {0xb7958000}, {0xb7960000}, {0xb7968000}, {0xb7970000}, {0xb7978000}, {0xb7980000}, {0xb7988000}, {0xb7990000}, {0xb7998000}, {0xb79a0000}, {0xb79a8000}, {0xb79b0000}, {0xb79b8000}, {0xb79c0000}, {0xb79c8000}, {0xb79d0000}, {0xb79d8000}, {0xb79e0000}, {0xb79e8000}, {0xb79f0000}, {0xb79f8000}, {0xb7a00000}, {0xb7a08000}, {0xb7a10000}, {0xb7a18000}, {0xb7a20000}, {0xb7a28000}, {0xb7a30000}, {0xb7a38000}, {0xb7a40000}, {0xb7a48000}, {0xb7a50000}, {0xb7a58000}, {0xb7a60000}, {0xb7a68000}, {0xb7a70000}, {0xb7a78000}, {0xb7a80000}, {0xb7a88000}, {0xb7a90000}, {0xb7a98000}, {0xb7aa0000}, {0xb7aa8000}, {0xb7ab0000}, {0xb7ab8000}, {0xb7ac0000}, {0xb7ac8000}, {0xb7ad0000}, {0xb7ad8000}, {0xb7ae0000}, {0xb7ae8000}, {0xb7af0000}, {0xb7af8000}, {0xb7b00000}, {0xb7b08000}, {0xb7b10000}, {0xb7b18000}, {0xb7b20000}, {0xb7b28000}, {0xb7b30000}, {0xb7b38000}, {0xb7b40000}, {0xb7b48000}, {0xb7b50000}, {0xb7b58000}, {0xb7b60000}, {0xb7b68000}, {0xb7b70000}, {0xb7b78000}, {0xb7b80000}, {0xb7b88000}, {0xb7b90000}, {0xb7b98000}, {0xb7ba0000}, {0xb7ba8000}, {0xb7bb0000}, {0xb7bb8000}, {0xb7bc0000}, {0xb7bc8000}, {0xb7bd0000}, {0xb7bd8000}, {0xb7be0000}, {0xb7be8000}, {0xb7bf0000}, {0xb7bf8000}, {0xb7c00000}, {0xb7c08000}, {0xb7c10000}, {0xb7c18000}, {0xb7c20000}, {0xb7c28000}, {0xb7c30000}, {0xb7c38000}, {0xb7c40000}, {0xb7c48000}, {0xb7c50000}, {0xb7c58000}, {0xb7c60000}, {0xb7c68000}, {0xb7c70000}, {0xb7c78000}, {0xb7c80000}, {0xb7c88000}, {0xb7c90000}, {0xb7c98000}, {0xb7ca0000}, {0xb7ca8000}, {0xb7cb0000}, {0xb7cb8000}, {0xb7cc0000}, {0xb7cc8000}, {0xb7cd0000}, {0xb7cd8000}, {0xb7ce0000}, {0xb7ce8000}, {0xb7cf0000}, {0xb7cf8000}, {0xb7d00000}, {0xb7d08000}, {0xb7d10000}, {0xb7d18000}, {0xb7d20000}, {0xb7d28000}, {0xb7d30000}, {0xb7d38000}, {0xb7d40000}, {0xb7d48000}, {0xb7d50000}, {0xb7d58000}, {0xb7d60000}, {0xb7d68000}, {0xb7d70000}, {0xb7d78000}, {0xb7d80000}, {0xb7d88000}, {0xb7d90000}, {0xb7d98000}, {0xb7da0000}, {0xb7da8000}, {0xb7db0000}, {0xb7db8000}, {0xb7dc0000}, {0xb7dc8000}, {0xb7dd0000}, {0xb7dd8000}, {0xb7de0000}, {0xb7de8000}, {0xb7df0000}, {0xb7df8000}, {0xb7e00000}, {0xb7e08000}, {0xb7e10000}, {0xb7e18000}, {0xb7e20000}, {0xb7e28000}, {0xb7e30000}, {0xb7e38000}, {0xb7e40000}, {0xb7e48000}, {0xb7e50000}, {0xb7e58000}, {0xb7e60000}, {0xb7e68000}, {0xb7e70000}, {0xb7e78000}, {0xb7e80000}, {0xb7e88000}, {0xb7e90000}, {0xb7e98000}, {0xb7ea0000}, {0xb7ea8000}, {0xb7eb0000}, {0xb7eb8000}, {0xb7ec0000}, {0xb7ec8000}, {0xb7ed0000}, {0xb7ed8000}, {0xb7ee0000}, {0xb7ee8000}, {0xb7ef0000}, {0xb7ef8000}, {0xb7f00000}, {0xb7f08000}, {0xb7f10000}, {0xb7f18000}, {0xb7f20000}, {0xb7f28000}, {0xb7f30000}, {0xb7f38000}, {0xb7f40000}, {0xb7f48000}, {0xb7f50000}, {0xb7f58000}, {0xb7f60000}, {0xb7f68000}, {0xb7f70000}, {0xb7f78000}, {0xb7f80000}, {0xb7f88000}, {0xb7f90000}, {0xb7f98000}, {0xb7fa0000}, {0xb7fa8000}, {0xb7fb0000}, {0xb7fb8000}, {0xb7fc0000}, {0xb7fc8000}, {0xb7fd0000}, {0xb7fd8000}, {0xb7fe0000}, {0xb7fe8000}, {0xb7ff0000}, {0xb7ff8000}, {0xb8000000}, {0xb8004000}, {0xb8008000}, {0xb800c000}, {0xb8010000}, {0xb8014000}, {0xb8018000}, {0xb801c000}, {0xb8020000}, {0xb8024000}, {0xb8028000}, {0xb802c000}, {0xb8030000}, {0xb8034000}, {0xb8038000}, {0xb803c000}, {0xb8040000}, {0xb8044000}, {0xb8048000}, {0xb804c000}, {0xb8050000}, {0xb8054000}, {0xb8058000}, {0xb805c000}, {0xb8060000}, {0xb8064000}, {0xb8068000}, {0xb806c000}, {0xb8070000}, {0xb8074000}, {0xb8078000}, {0xb807c000}, {0xb8080000}, {0xb8084000}, {0xb8088000}, {0xb808c000}, {0xb8090000}, {0xb8094000}, {0xb8098000}, {0xb809c000}, {0xb80a0000}, {0xb80a4000}, {0xb80a8000}, {0xb80ac000}, {0xb80b0000}, {0xb80b4000}, {0xb80b8000}, {0xb80bc000}, {0xb80c0000}, {0xb80c4000}, {0xb80c8000}, {0xb80cc000}, {0xb80d0000}, {0xb80d4000}, {0xb80d8000}, {0xb80dc000}, {0xb80e0000}, {0xb80e4000}, {0xb80e8000}, {0xb80ec000}, {0xb80f0000}, {0xb80f4000}, {0xb80f8000}, {0xb80fc000}, {0xb8100000}, {0xb8104000}, {0xb8108000}, {0xb810c000}, {0xb8110000}, {0xb8114000}, {0xb8118000}, {0xb811c000}, {0xb8120000}, {0xb8124000}, {0xb8128000}, {0xb812c000}, {0xb8130000}, {0xb8134000}, {0xb8138000}, {0xb813c000}, {0xb8140000}, {0xb8144000}, {0xb8148000}, {0xb814c000}, {0xb8150000}, {0xb8154000}, {0xb8158000}, {0xb815c000}, {0xb8160000}, {0xb8164000}, {0xb8168000}, {0xb816c000}, {0xb8170000}, {0xb8174000}, {0xb8178000}, {0xb817c000}, {0xb8180000}, {0xb8184000}, {0xb8188000}, {0xb818c000}, {0xb8190000}, {0xb8194000}, {0xb8198000}, {0xb819c000}, {0xb81a0000}, {0xb81a4000}, {0xb81a8000}, {0xb81ac000}, {0xb81b0000}, {0xb81b4000}, {0xb81b8000}, {0xb81bc000}, {0xb81c0000}, {0xb81c4000}, {0xb81c8000}, {0xb81cc000}, {0xb81d0000}, {0xb81d4000}, {0xb81d8000}, {0xb81dc000}, {0xb81e0000}, {0xb81e4000}, {0xb81e8000}, {0xb81ec000}, {0xb81f0000}, {0xb81f4000}, {0xb81f8000}, {0xb81fc000}, {0xb8200000}, {0xb8204000}, {0xb8208000}, {0xb820c000}, {0xb8210000}, {0xb8214000}, {0xb8218000}, {0xb821c000}, {0xb8220000}, {0xb8224000}, {0xb8228000}, {0xb822c000}, {0xb8230000}, {0xb8234000}, {0xb8238000}, {0xb823c000}, {0xb8240000}, {0xb8244000}, {0xb8248000}, {0xb824c000}, {0xb8250000}, {0xb8254000}, {0xb8258000}, {0xb825c000}, {0xb8260000}, {0xb8264000}, {0xb8268000}, {0xb826c000}, {0xb8270000}, {0xb8274000}, {0xb8278000}, {0xb827c000}, {0xb8280000}, {0xb8284000}, {0xb8288000}, {0xb828c000}, {0xb8290000}, {0xb8294000}, {0xb8298000}, {0xb829c000}, {0xb82a0000}, {0xb82a4000}, {0xb82a8000}, {0xb82ac000}, {0xb82b0000}, {0xb82b4000}, {0xb82b8000}, {0xb82bc000}, {0xb82c0000}, {0xb82c4000}, {0xb82c8000}, {0xb82cc000}, {0xb82d0000}, {0xb82d4000}, {0xb82d8000}, {0xb82dc000}, {0xb82e0000}, {0xb82e4000}, {0xb82e8000}, {0xb82ec000}, {0xb82f0000}, {0xb82f4000}, {0xb82f8000}, {0xb82fc000}, {0xb8300000}, {0xb8304000}, {0xb8308000}, {0xb830c000}, {0xb8310000}, {0xb8314000}, {0xb8318000}, {0xb831c000}, {0xb8320000}, {0xb8324000}, {0xb8328000}, {0xb832c000}, {0xb8330000}, {0xb8334000}, {0xb8338000}, {0xb833c000}, {0xb8340000}, {0xb8344000}, {0xb8348000}, {0xb834c000}, {0xb8350000}, {0xb8354000}, {0xb8358000}, {0xb835c000}, {0xb8360000}, {0xb8364000}, {0xb8368000}, {0xb836c000}, {0xb8370000}, {0xb8374000}, {0xb8378000}, {0xb837c000}, {0xb8380000}, {0xb8384000}, {0xb8388000}, {0xb838c000}, {0xb8390000}, {0xb8394000}, {0xb8398000}, {0xb839c000}, {0xb83a0000}, {0xb83a4000}, {0xb83a8000}, {0xb83ac000}, {0xb83b0000}, {0xb83b4000}, {0xb83b8000}, {0xb83bc000}, {0xb83c0000}, {0xb83c4000}, {0xb83c8000}, {0xb83cc000}, {0xb83d0000}, {0xb83d4000}, {0xb83d8000}, {0xb83dc000}, {0xb83e0000}, {0xb83e4000}, {0xb83e8000}, {0xb83ec000}, {0xb83f0000}, {0xb83f4000}, {0xb83f8000}, {0xb83fc000}, {0xb8400000}, {0xb8404000}, {0xb8408000}, {0xb840c000}, {0xb8410000}, {0xb8414000}, {0xb8418000}, {0xb841c000}, {0xb8420000}, {0xb8424000}, {0xb8428000}, {0xb842c000}, {0xb8430000}, {0xb8434000}, {0xb8438000}, {0xb843c000}, {0xb8440000}, {0xb8444000}, {0xb8448000}, {0xb844c000}, {0xb8450000}, {0xb8454000}, {0xb8458000}, {0xb845c000}, {0xb8460000}, {0xb8464000}, {0xb8468000}, {0xb846c000}, {0xb8470000}, {0xb8474000}, {0xb8478000}, {0xb847c000}, {0xb8480000}, {0xb8484000}, {0xb8488000}, {0xb848c000}, {0xb8490000}, {0xb8494000}, {0xb8498000}, {0xb849c000}, {0xb84a0000}, {0xb84a4000}, {0xb84a8000}, {0xb84ac000}, {0xb84b0000}, {0xb84b4000}, {0xb84b8000}, {0xb84bc000}, {0xb84c0000}, {0xb84c4000}, {0xb84c8000}, {0xb84cc000}, {0xb84d0000}, {0xb84d4000}, {0xb84d8000}, {0xb84dc000}, {0xb84e0000}, {0xb84e4000}, {0xb84e8000}, {0xb84ec000}, {0xb84f0000}, {0xb84f4000}, {0xb84f8000}, {0xb84fc000}, {0xb8500000}, {0xb8504000}, {0xb8508000}, {0xb850c000}, {0xb8510000}, {0xb8514000}, {0xb8518000}, {0xb851c000}, {0xb8520000}, {0xb8524000}, {0xb8528000}, {0xb852c000}, {0xb8530000}, {0xb8534000}, {0xb8538000}, {0xb853c000}, {0xb8540000}, {0xb8544000}, {0xb8548000}, {0xb854c000}, {0xb8550000}, {0xb8554000}, {0xb8558000}, {0xb855c000}, {0xb8560000}, {0xb8564000}, {0xb8568000}, {0xb856c000}, {0xb8570000}, {0xb8574000}, {0xb8578000}, {0xb857c000}, {0xb8580000}, {0xb8584000}, {0xb8588000}, {0xb858c000}, {0xb8590000}, {0xb8594000}, {0xb8598000}, {0xb859c000}, {0xb85a0000}, {0xb85a4000}, {0xb85a8000}, {0xb85ac000}, {0xb85b0000}, {0xb85b4000}, {0xb85b8000}, {0xb85bc000}, {0xb85c0000}, {0xb85c4000}, {0xb85c8000}, {0xb85cc000}, {0xb85d0000}, {0xb85d4000}, {0xb85d8000}, {0xb85dc000}, {0xb85e0000}, {0xb85e4000}, {0xb85e8000}, {0xb85ec000}, {0xb85f0000}, {0xb85f4000}, {0xb85f8000}, {0xb85fc000}, {0xb8600000}, {0xb8604000}, {0xb8608000}, {0xb860c000}, {0xb8610000}, {0xb8614000}, {0xb8618000}, {0xb861c000}, {0xb8620000}, {0xb8624000}, {0xb8628000}, {0xb862c000}, {0xb8630000}, {0xb8634000}, {0xb8638000}, {0xb863c000}, {0xb8640000}, {0xb8644000}, {0xb8648000}, {0xb864c000}, {0xb8650000}, {0xb8654000}, {0xb8658000}, {0xb865c000}, {0xb8660000}, {0xb8664000}, {0xb8668000}, {0xb866c000}, {0xb8670000}, {0xb8674000}, {0xb8678000}, {0xb867c000}, {0xb8680000}, {0xb8684000}, {0xb8688000}, {0xb868c000}, {0xb8690000}, {0xb8694000}, {0xb8698000}, {0xb869c000}, {0xb86a0000}, {0xb86a4000}, {0xb86a8000}, {0xb86ac000}, {0xb86b0000}, {0xb86b4000}, {0xb86b8000}, {0xb86bc000}, {0xb86c0000}, {0xb86c4000}, {0xb86c8000}, {0xb86cc000}, {0xb86d0000}, {0xb86d4000}, {0xb86d8000}, {0xb86dc000}, {0xb86e0000}, {0xb86e4000}, {0xb86e8000}, {0xb86ec000}, {0xb86f0000}, {0xb86f4000}, {0xb86f8000}, {0xb86fc000}, {0xb8700000}, {0xb8704000}, {0xb8708000}, {0xb870c000}, {0xb8710000}, {0xb8714000}, {0xb8718000}, {0xb871c000}, {0xb8720000}, {0xb8724000}, {0xb8728000}, {0xb872c000}, {0xb8730000}, {0xb8734000}, {0xb8738000}, {0xb873c000}, {0xb8740000}, {0xb8744000}, {0xb8748000}, {0xb874c000}, {0xb8750000}, {0xb8754000}, {0xb8758000}, {0xb875c000}, {0xb8760000}, {0xb8764000}, {0xb8768000}, {0xb876c000}, {0xb8770000}, {0xb8774000}, {0xb8778000}, {0xb877c000}, {0xb8780000}, {0xb8784000}, {0xb8788000}, {0xb878c000}, {0xb8790000}, {0xb8794000}, {0xb8798000}, {0xb879c000}, {0xb87a0000}, {0xb87a4000}, {0xb87a8000}, {0xb87ac000}, {0xb87b0000}, {0xb87b4000}, {0xb87b8000}, {0xb87bc000}, {0xb87c0000}, {0xb87c4000}, {0xb87c8000}, {0xb87cc000}, {0xb87d0000}, {0xb87d4000}, {0xb87d8000}, {0xb87dc000}, {0xb87e0000}, {0xb87e4000}, {0xb87e8000}, {0xb87ec000}, {0xb87f0000}, {0xb87f4000}, {0xb87f8000}, {0xb87fc000}, {0xb8800000}, {0xb8802000}, {0xb8804000}, {0xb8806000}, {0xb8808000}, {0xb880a000}, {0xb880c000}, {0xb880e000}, {0xb8810000}, {0xb8812000}, {0xb8814000}, {0xb8816000}, {0xb8818000}, {0xb881a000}, {0xb881c000}, {0xb881e000}, {0xb8820000}, {0xb8822000}, {0xb8824000}, {0xb8826000}, {0xb8828000}, {0xb882a000}, {0xb882c000}, {0xb882e000}, {0xb8830000}, {0xb8832000}, {0xb8834000}, {0xb8836000}, {0xb8838000}, {0xb883a000}, {0xb883c000}, {0xb883e000}, {0xb8840000}, {0xb8842000}, {0xb8844000}, {0xb8846000}, {0xb8848000}, {0xb884a000}, {0xb884c000}, {0xb884e000}, {0xb8850000}, {0xb8852000}, {0xb8854000}, {0xb8856000}, {0xb8858000}, {0xb885a000}, {0xb885c000}, {0xb885e000}, {0xb8860000}, {0xb8862000}, {0xb8864000}, {0xb8866000}, {0xb8868000}, {0xb886a000}, {0xb886c000}, {0xb886e000}, {0xb8870000}, {0xb8872000}, {0xb8874000}, {0xb8876000}, {0xb8878000}, {0xb887a000}, {0xb887c000}, {0xb887e000}, {0xb8880000}, {0xb8882000}, {0xb8884000}, {0xb8886000}, {0xb8888000}, {0xb888a000}, {0xb888c000}, {0xb888e000}, {0xb8890000}, {0xb8892000}, {0xb8894000}, {0xb8896000}, {0xb8898000}, {0xb889a000}, {0xb889c000}, {0xb889e000}, {0xb88a0000}, {0xb88a2000}, {0xb88a4000}, {0xb88a6000}, {0xb88a8000}, {0xb88aa000}, {0xb88ac000}, {0xb88ae000}, {0xb88b0000}, {0xb88b2000}, {0xb88b4000}, {0xb88b6000}, {0xb88b8000}, {0xb88ba000}, {0xb88bc000}, {0xb88be000}, {0xb88c0000}, {0xb88c2000}, {0xb88c4000}, {0xb88c6000}, {0xb88c8000}, {0xb88ca000}, {0xb88cc000}, {0xb88ce000}, {0xb88d0000}, {0xb88d2000}, {0xb88d4000}, {0xb88d6000}, {0xb88d8000}, {0xb88da000}, {0xb88dc000}, {0xb88de000}, {0xb88e0000}, {0xb88e2000}, {0xb88e4000}, {0xb88e6000}, {0xb88e8000}, {0xb88ea000}, {0xb88ec000}, {0xb88ee000}, {0xb88f0000}, {0xb88f2000}, {0xb88f4000}, {0xb88f6000}, {0xb88f8000}, {0xb88fa000}, {0xb88fc000}, {0xb88fe000}, {0xb8900000}, {0xb8902000}, {0xb8904000}, {0xb8906000}, {0xb8908000}, {0xb890a000}, {0xb890c000}, {0xb890e000}, {0xb8910000}, {0xb8912000}, {0xb8914000}, {0xb8916000}, {0xb8918000}, {0xb891a000}, {0xb891c000}, {0xb891e000}, {0xb8920000}, {0xb8922000}, {0xb8924000}, {0xb8926000}, {0xb8928000}, {0xb892a000}, {0xb892c000}, {0xb892e000}, {0xb8930000}, {0xb8932000}, {0xb8934000}, {0xb8936000}, {0xb8938000}, {0xb893a000}, {0xb893c000}, {0xb893e000}, {0xb8940000}, {0xb8942000}, {0xb8944000}, {0xb8946000}, {0xb8948000}, {0xb894a000}, {0xb894c000}, {0xb894e000}, {0xb8950000}, {0xb8952000}, {0xb8954000}, {0xb8956000}, {0xb8958000}, {0xb895a000}, {0xb895c000}, {0xb895e000}, {0xb8960000}, {0xb8962000}, {0xb8964000}, {0xb8966000}, {0xb8968000}, {0xb896a000}, {0xb896c000}, {0xb896e000}, {0xb8970000}, {0xb8972000}, {0xb8974000}, {0xb8976000}, {0xb8978000}, {0xb897a000}, {0xb897c000}, {0xb897e000}, {0xb8980000}, {0xb8982000}, {0xb8984000}, {0xb8986000}, {0xb8988000}, {0xb898a000}, {0xb898c000}, {0xb898e000}, {0xb8990000}, {0xb8992000}, {0xb8994000}, {0xb8996000}, {0xb8998000}, {0xb899a000}, {0xb899c000}, {0xb899e000}, {0xb89a0000}, {0xb89a2000}, {0xb89a4000}, {0xb89a6000}, {0xb89a8000}, {0xb89aa000}, {0xb89ac000}, {0xb89ae000}, {0xb89b0000}, {0xb89b2000}, {0xb89b4000}, {0xb89b6000}, {0xb89b8000}, {0xb89ba000}, {0xb89bc000}, {0xb89be000}, {0xb89c0000}, {0xb89c2000}, {0xb89c4000}, {0xb89c6000}, {0xb89c8000}, {0xb89ca000}, {0xb89cc000}, {0xb89ce000}, {0xb89d0000}, {0xb89d2000}, {0xb89d4000}, {0xb89d6000}, {0xb89d8000}, {0xb89da000}, {0xb89dc000}, {0xb89de000}, {0xb89e0000}, {0xb89e2000}, {0xb89e4000}, {0xb89e6000}, {0xb89e8000}, {0xb89ea000}, {0xb89ec000}, {0xb89ee000}, {0xb89f0000}, {0xb89f2000}, {0xb89f4000}, {0xb89f6000}, {0xb89f8000}, {0xb89fa000}, {0xb89fc000}, {0xb89fe000}, {0xb8a00000}, {0xb8a02000}, {0xb8a04000}, {0xb8a06000}, {0xb8a08000}, {0xb8a0a000}, {0xb8a0c000}, {0xb8a0e000}, {0xb8a10000}, {0xb8a12000}, {0xb8a14000}, {0xb8a16000}, {0xb8a18000}, {0xb8a1a000}, {0xb8a1c000}, {0xb8a1e000}, {0xb8a20000}, {0xb8a22000}, {0xb8a24000}, {0xb8a26000}, {0xb8a28000}, {0xb8a2a000}, {0xb8a2c000}, {0xb8a2e000}, {0xb8a30000}, {0xb8a32000}, {0xb8a34000}, {0xb8a36000}, {0xb8a38000}, {0xb8a3a000}, {0xb8a3c000}, {0xb8a3e000}, {0xb8a40000}, {0xb8a42000}, {0xb8a44000}, {0xb8a46000}, {0xb8a48000}, {0xb8a4a000}, {0xb8a4c000}, {0xb8a4e000}, {0xb8a50000}, {0xb8a52000}, {0xb8a54000}, {0xb8a56000}, {0xb8a58000}, {0xb8a5a000}, {0xb8a5c000}, {0xb8a5e000}, {0xb8a60000}, {0xb8a62000}, {0xb8a64000}, {0xb8a66000}, {0xb8a68000}, {0xb8a6a000}, {0xb8a6c000}, {0xb8a6e000}, {0xb8a70000}, {0xb8a72000}, {0xb8a74000}, {0xb8a76000}, {0xb8a78000}, {0xb8a7a000}, {0xb8a7c000}, {0xb8a7e000}, {0xb8a80000}, {0xb8a82000}, {0xb8a84000}, {0xb8a86000}, {0xb8a88000}, {0xb8a8a000}, {0xb8a8c000}, {0xb8a8e000}, {0xb8a90000}, {0xb8a92000}, {0xb8a94000}, {0xb8a96000}, {0xb8a98000}, {0xb8a9a000}, {0xb8a9c000}, {0xb8a9e000}, {0xb8aa0000}, {0xb8aa2000}, {0xb8aa4000}, {0xb8aa6000}, {0xb8aa8000}, {0xb8aaa000}, {0xb8aac000}, {0xb8aae000}, {0xb8ab0000}, {0xb8ab2000}, {0xb8ab4000}, {0xb8ab6000}, {0xb8ab8000}, {0xb8aba000}, {0xb8abc000}, {0xb8abe000}, {0xb8ac0000}, {0xb8ac2000}, {0xb8ac4000}, {0xb8ac6000}, {0xb8ac8000}, {0xb8aca000}, {0xb8acc000}, {0xb8ace000}, {0xb8ad0000}, {0xb8ad2000}, {0xb8ad4000}, {0xb8ad6000}, {0xb8ad8000}, {0xb8ada000}, {0xb8adc000}, {0xb8ade000}, {0xb8ae0000}, {0xb8ae2000}, {0xb8ae4000}, {0xb8ae6000}, {0xb8ae8000}, {0xb8aea000}, {0xb8aec000}, {0xb8aee000}, {0xb8af0000}, {0xb8af2000}, {0xb8af4000}, {0xb8af6000}, {0xb8af8000}, {0xb8afa000}, {0xb8afc000}, {0xb8afe000}, {0xb8b00000}, {0xb8b02000}, {0xb8b04000}, {0xb8b06000}, {0xb8b08000}, {0xb8b0a000}, {0xb8b0c000}, {0xb8b0e000}, {0xb8b10000}, {0xb8b12000}, {0xb8b14000}, {0xb8b16000}, {0xb8b18000}, {0xb8b1a000}, {0xb8b1c000}, {0xb8b1e000}, {0xb8b20000}, {0xb8b22000}, {0xb8b24000}, {0xb8b26000}, {0xb8b28000}, {0xb8b2a000}, {0xb8b2c000}, {0xb8b2e000}, {0xb8b30000}, {0xb8b32000}, {0xb8b34000}, {0xb8b36000}, {0xb8b38000}, {0xb8b3a000}, {0xb8b3c000}, {0xb8b3e000}, {0xb8b40000}, {0xb8b42000}, {0xb8b44000}, {0xb8b46000}, {0xb8b48000}, {0xb8b4a000}, {0xb8b4c000}, {0xb8b4e000}, {0xb8b50000}, {0xb8b52000}, {0xb8b54000}, {0xb8b56000}, {0xb8b58000}, {0xb8b5a000}, {0xb8b5c000}, {0xb8b5e000}, {0xb8b60000}, {0xb8b62000}, {0xb8b64000}, {0xb8b66000}, {0xb8b68000}, {0xb8b6a000}, {0xb8b6c000}, {0xb8b6e000}, {0xb8b70000}, {0xb8b72000}, {0xb8b74000}, {0xb8b76000}, {0xb8b78000}, {0xb8b7a000}, {0xb8b7c000}, {0xb8b7e000}, {0xb8b80000}, {0xb8b82000}, {0xb8b84000}, {0xb8b86000}, {0xb8b88000}, {0xb8b8a000}, {0xb8b8c000}, {0xb8b8e000}, {0xb8b90000}, {0xb8b92000}, {0xb8b94000}, {0xb8b96000}, {0xb8b98000}, {0xb8b9a000}, {0xb8b9c000}, {0xb8b9e000}, {0xb8ba0000}, {0xb8ba2000}, {0xb8ba4000}, {0xb8ba6000}, {0xb8ba8000}, {0xb8baa000}, {0xb8bac000}, {0xb8bae000}, {0xb8bb0000}, {0xb8bb2000}, {0xb8bb4000}, {0xb8bb6000}, {0xb8bb8000}, {0xb8bba000}, {0xb8bbc000}, {0xb8bbe000}, {0xb8bc0000}, {0xb8bc2000}, {0xb8bc4000}, {0xb8bc6000}, {0xb8bc8000}, {0xb8bca000}, {0xb8bcc000}, {0xb8bce000}, {0xb8bd0000}, {0xb8bd2000}, {0xb8bd4000}, {0xb8bd6000}, {0xb8bd8000}, {0xb8bda000}, {0xb8bdc000}, {0xb8bde000}, {0xb8be0000}, {0xb8be2000}, {0xb8be4000}, {0xb8be6000}, {0xb8be8000}, {0xb8bea000}, {0xb8bec000}, {0xb8bee000}, {0xb8bf0000}, {0xb8bf2000}, {0xb8bf4000}, {0xb8bf6000}, {0xb8bf8000}, {0xb8bfa000}, {0xb8bfc000}, {0xb8bfe000}, {0xb8c00000}, {0xb8c02000}, {0xb8c04000}, {0xb8c06000}, {0xb8c08000}, {0xb8c0a000}, {0xb8c0c000}, {0xb8c0e000}, {0xb8c10000}, {0xb8c12000}, {0xb8c14000}, {0xb8c16000}, {0xb8c18000}, {0xb8c1a000}, {0xb8c1c000}, {0xb8c1e000}, {0xb8c20000}, {0xb8c22000}, {0xb8c24000}, {0xb8c26000}, {0xb8c28000}, {0xb8c2a000}, {0xb8c2c000}, {0xb8c2e000}, {0xb8c30000}, {0xb8c32000}, {0xb8c34000}, {0xb8c36000}, {0xb8c38000}, {0xb8c3a000}, {0xb8c3c000}, {0xb8c3e000}, {0xb8c40000}, {0xb8c42000}, {0xb8c44000}, {0xb8c46000}, {0xb8c48000}, {0xb8c4a000}, {0xb8c4c000}, {0xb8c4e000}, {0xb8c50000}, {0xb8c52000}, {0xb8c54000}, {0xb8c56000}, {0xb8c58000}, {0xb8c5a000}, {0xb8c5c000}, {0xb8c5e000}, {0xb8c60000}, {0xb8c62000}, {0xb8c64000}, {0xb8c66000}, {0xb8c68000}, {0xb8c6a000}, {0xb8c6c000}, {0xb8c6e000}, {0xb8c70000}, {0xb8c72000}, {0xb8c74000}, {0xb8c76000}, {0xb8c78000}, {0xb8c7a000}, {0xb8c7c000}, {0xb8c7e000}, {0xb8c80000}, {0xb8c82000}, {0xb8c84000}, {0xb8c86000}, {0xb8c88000}, {0xb8c8a000}, {0xb8c8c000}, {0xb8c8e000}, {0xb8c90000}, {0xb8c92000}, {0xb8c94000}, {0xb8c96000}, {0xb8c98000}, {0xb8c9a000}, {0xb8c9c000}, {0xb8c9e000}, {0xb8ca0000}, {0xb8ca2000}, {0xb8ca4000}, {0xb8ca6000}, {0xb8ca8000}, {0xb8caa000}, {0xb8cac000}, {0xb8cae000}, {0xb8cb0000}, {0xb8cb2000}, {0xb8cb4000}, {0xb8cb6000}, {0xb8cb8000}, {0xb8cba000}, {0xb8cbc000}, {0xb8cbe000}, {0xb8cc0000}, {0xb8cc2000}, {0xb8cc4000}, {0xb8cc6000}, {0xb8cc8000}, {0xb8cca000}, {0xb8ccc000}, {0xb8cce000}, {0xb8cd0000}, {0xb8cd2000}, {0xb8cd4000}, {0xb8cd6000}, {0xb8cd8000}, {0xb8cda000}, {0xb8cdc000}, {0xb8cde000}, {0xb8ce0000}, {0xb8ce2000}, {0xb8ce4000}, {0xb8ce6000}, {0xb8ce8000}, {0xb8cea000}, {0xb8cec000}, {0xb8cee000}, {0xb8cf0000}, {0xb8cf2000}, {0xb8cf4000}, {0xb8cf6000}, {0xb8cf8000}, {0xb8cfa000}, {0xb8cfc000}, {0xb8cfe000}, {0xb8d00000}, {0xb8d02000}, {0xb8d04000}, {0xb8d06000}, {0xb8d08000}, {0xb8d0a000}, {0xb8d0c000}, {0xb8d0e000}, {0xb8d10000}, {0xb8d12000}, {0xb8d14000}, {0xb8d16000}, {0xb8d18000}, {0xb8d1a000}, {0xb8d1c000}, {0xb8d1e000}, {0xb8d20000}, {0xb8d22000}, {0xb8d24000}, {0xb8d26000}, {0xb8d28000}, {0xb8d2a000}, {0xb8d2c000}, {0xb8d2e000}, {0xb8d30000}, {0xb8d32000}, {0xb8d34000}, {0xb8d36000}, {0xb8d38000}, {0xb8d3a000}, {0xb8d3c000}, {0xb8d3e000}, {0xb8d40000}, {0xb8d42000}, {0xb8d44000}, {0xb8d46000}, {0xb8d48000}, {0xb8d4a000}, {0xb8d4c000}, {0xb8d4e000}, {0xb8d50000}, {0xb8d52000}, {0xb8d54000}, {0xb8d56000}, {0xb8d58000}, {0xb8d5a000}, {0xb8d5c000}, {0xb8d5e000}, {0xb8d60000}, {0xb8d62000}, {0xb8d64000}, {0xb8d66000}, {0xb8d68000}, {0xb8d6a000}, {0xb8d6c000}, {0xb8d6e000}, {0xb8d70000}, {0xb8d72000}, {0xb8d74000}, {0xb8d76000}, {0xb8d78000}, {0xb8d7a000}, {0xb8d7c000}, {0xb8d7e000}, {0xb8d80000}, {0xb8d82000}, {0xb8d84000}, {0xb8d86000}, {0xb8d88000}, {0xb8d8a000}, {0xb8d8c000}, {0xb8d8e000}, {0xb8d90000}, {0xb8d92000}, {0xb8d94000}, {0xb8d96000}, {0xb8d98000}, {0xb8d9a000}, {0xb8d9c000}, {0xb8d9e000}, {0xb8da0000}, {0xb8da2000}, {0xb8da4000}, {0xb8da6000}, {0xb8da8000}, {0xb8daa000}, {0xb8dac000}, {0xb8dae000}, {0xb8db0000}, {0xb8db2000}, {0xb8db4000}, {0xb8db6000}, {0xb8db8000}, {0xb8dba000}, {0xb8dbc000}, {0xb8dbe000}, {0xb8dc0000}, {0xb8dc2000}, {0xb8dc4000}, {0xb8dc6000}, {0xb8dc8000}, {0xb8dca000}, {0xb8dcc000}, {0xb8dce000}, {0xb8dd0000}, {0xb8dd2000}, {0xb8dd4000}, {0xb8dd6000}, {0xb8dd8000}, {0xb8dda000}, {0xb8ddc000}, {0xb8dde000}, {0xb8de0000}, {0xb8de2000}, {0xb8de4000}, {0xb8de6000}, {0xb8de8000}, {0xb8dea000}, {0xb8dec000}, {0xb8dee000}, {0xb8df0000}, {0xb8df2000}, {0xb8df4000}, {0xb8df6000}, {0xb8df8000}, {0xb8dfa000}, {0xb8dfc000}, {0xb8dfe000}, {0xb8e00000}, {0xb8e02000}, {0xb8e04000}, {0xb8e06000}, {0xb8e08000}, {0xb8e0a000}, {0xb8e0c000}, {0xb8e0e000}, {0xb8e10000}, {0xb8e12000}, {0xb8e14000}, {0xb8e16000}, {0xb8e18000}, {0xb8e1a000}, {0xb8e1c000}, {0xb8e1e000}, {0xb8e20000}, {0xb8e22000}, {0xb8e24000}, {0xb8e26000}, {0xb8e28000}, {0xb8e2a000}, {0xb8e2c000}, {0xb8e2e000}, {0xb8e30000}, {0xb8e32000}, {0xb8e34000}, {0xb8e36000}, {0xb8e38000}, {0xb8e3a000}, {0xb8e3c000}, {0xb8e3e000}, {0xb8e40000}, {0xb8e42000}, {0xb8e44000}, {0xb8e46000}, {0xb8e48000}, {0xb8e4a000}, {0xb8e4c000}, {0xb8e4e000}, {0xb8e50000}, {0xb8e52000}, {0xb8e54000}, {0xb8e56000}, {0xb8e58000}, {0xb8e5a000}, {0xb8e5c000}, {0xb8e5e000}, {0xb8e60000}, {0xb8e62000}, {0xb8e64000}, {0xb8e66000}, {0xb8e68000}, {0xb8e6a000}, {0xb8e6c000}, {0xb8e6e000}, {0xb8e70000}, {0xb8e72000}, {0xb8e74000}, {0xb8e76000}, {0xb8e78000}, {0xb8e7a000}, {0xb8e7c000}, {0xb8e7e000}, {0xb8e80000}, {0xb8e82000}, {0xb8e84000}, {0xb8e86000}, {0xb8e88000}, {0xb8e8a000}, {0xb8e8c000}, {0xb8e8e000}, {0xb8e90000}, {0xb8e92000}, {0xb8e94000}, {0xb8e96000}, {0xb8e98000}, {0xb8e9a000}, {0xb8e9c000}, {0xb8e9e000}, {0xb8ea0000}, {0xb8ea2000}, {0xb8ea4000}, {0xb8ea6000}, {0xb8ea8000}, {0xb8eaa000}, {0xb8eac000}, {0xb8eae000}, {0xb8eb0000}, {0xb8eb2000}, {0xb8eb4000}, {0xb8eb6000}, {0xb8eb8000}, {0xb8eba000}, {0xb8ebc000}, {0xb8ebe000}, {0xb8ec0000}, {0xb8ec2000}, {0xb8ec4000}, {0xb8ec6000}, {0xb8ec8000}, {0xb8eca000}, {0xb8ecc000}, {0xb8ece000}, {0xb8ed0000}, {0xb8ed2000}, {0xb8ed4000}, {0xb8ed6000}, {0xb8ed8000}, {0xb8eda000}, {0xb8edc000}, {0xb8ede000}, {0xb8ee0000}, {0xb8ee2000}, {0xb8ee4000}, {0xb8ee6000}, {0xb8ee8000}, {0xb8eea000}, {0xb8eec000}, {0xb8eee000}, {0xb8ef0000}, {0xb8ef2000}, {0xb8ef4000}, {0xb8ef6000}, {0xb8ef8000}, {0xb8efa000}, {0xb8efc000}, {0xb8efe000}, {0xb8f00000}, {0xb8f02000}, {0xb8f04000}, {0xb8f06000}, {0xb8f08000}, {0xb8f0a000}, {0xb8f0c000}, {0xb8f0e000}, {0xb8f10000}, {0xb8f12000}, {0xb8f14000}, {0xb8f16000}, {0xb8f18000}, {0xb8f1a000}, {0xb8f1c000}, {0xb8f1e000}, {0xb8f20000}, {0xb8f22000}, {0xb8f24000}, {0xb8f26000}, {0xb8f28000}, {0xb8f2a000}, {0xb8f2c000}, {0xb8f2e000}, {0xb8f30000}, {0xb8f32000}, {0xb8f34000}, {0xb8f36000}, {0xb8f38000}, {0xb8f3a000}, {0xb8f3c000}, {0xb8f3e000}, {0xb8f40000}, {0xb8f42000}, {0xb8f44000}, {0xb8f46000}, {0xb8f48000}, {0xb8f4a000}, {0xb8f4c000}, {0xb8f4e000}, {0xb8f50000}, {0xb8f52000}, {0xb8f54000}, {0xb8f56000}, {0xb8f58000}, {0xb8f5a000}, {0xb8f5c000}, {0xb8f5e000}, {0xb8f60000}, {0xb8f62000}, {0xb8f64000}, {0xb8f66000}, {0xb8f68000}, {0xb8f6a000}, {0xb8f6c000}, {0xb8f6e000}, {0xb8f70000}, {0xb8f72000}, {0xb8f74000}, {0xb8f76000}, {0xb8f78000}, {0xb8f7a000}, {0xb8f7c000}, {0xb8f7e000}, {0xb8f80000}, {0xb8f82000}, {0xb8f84000}, {0xb8f86000}, {0xb8f88000}, {0xb8f8a000}, {0xb8f8c000}, {0xb8f8e000}, {0xb8f90000}, {0xb8f92000}, {0xb8f94000}, {0xb8f96000}, {0xb8f98000}, {0xb8f9a000}, {0xb8f9c000}, {0xb8f9e000}, {0xb8fa0000}, {0xb8fa2000}, {0xb8fa4000}, {0xb8fa6000}, {0xb8fa8000}, {0xb8faa000}, {0xb8fac000}, {0xb8fae000}, {0xb8fb0000}, {0xb8fb2000}, {0xb8fb4000}, {0xb8fb6000}, {0xb8fb8000}, {0xb8fba000}, {0xb8fbc000}, {0xb8fbe000}, {0xb8fc0000}, {0xb8fc2000}, {0xb8fc4000}, {0xb8fc6000}, {0xb8fc8000}, {0xb8fca000}, {0xb8fcc000}, {0xb8fce000}, {0xb8fd0000}, {0xb8fd2000}, {0xb8fd4000}, {0xb8fd6000}, {0xb8fd8000}, {0xb8fda000}, {0xb8fdc000}, {0xb8fde000}, {0xb8fe0000}, {0xb8fe2000}, {0xb8fe4000}, {0xb8fe6000}, {0xb8fe8000}, {0xb8fea000}, {0xb8fec000}, {0xb8fee000}, {0xb8ff0000}, {0xb8ff2000}, {0xb8ff4000}, {0xb8ff6000}, {0xb8ff8000}, {0xb8ffa000}, {0xb8ffc000}, {0xb8ffe000}, {0xb9000000}, {0xb9002000}, {0xb9004000}, {0xb9006000}, {0xb9008000}, {0xb900a000}, {0xb900c000}, {0xb900e000}, {0xb9010000}, {0xb9012000}, {0xb9014000}, {0xb9016000}, {0xb9018000}, {0xb901a000}, {0xb901c000}, {0xb901e000}, {0xb9020000}, {0xb9022000}, {0xb9024000}, {0xb9026000}, {0xb9028000}, {0xb902a000}, {0xb902c000}, {0xb902e000}, {0xb9030000}, {0xb9032000}, {0xb9034000}, {0xb9036000}, {0xb9038000}, {0xb903a000}, {0xb903c000}, {0xb903e000}, {0xb9040000}, {0xb9042000}, {0xb9044000}, {0xb9046000}, {0xb9048000}, {0xb904a000}, {0xb904c000}, {0xb904e000}, {0xb9050000}, {0xb9052000}, {0xb9054000}, {0xb9056000}, {0xb9058000}, {0xb905a000}, {0xb905c000}, {0xb905e000}, {0xb9060000}, {0xb9062000}, {0xb9064000}, {0xb9066000}, {0xb9068000}, {0xb906a000}, {0xb906c000}, {0xb906e000}, {0xb9070000}, {0xb9072000}, {0xb9074000}, {0xb9076000}, {0xb9078000}, {0xb907a000}, {0xb907c000}, {0xb907e000}, {0xb9080000}, {0xb9082000}, {0xb9084000}, {0xb9086000}, {0xb9088000}, {0xb908a000}, {0xb908c000}, {0xb908e000}, {0xb9090000}, {0xb9092000}, {0xb9094000}, {0xb9096000}, {0xb9098000}, {0xb909a000}, {0xb909c000}, {0xb909e000}, {0xb90a0000}, {0xb90a2000}, {0xb90a4000}, {0xb90a6000}, {0xb90a8000}, {0xb90aa000}, {0xb90ac000}, {0xb90ae000}, {0xb90b0000}, {0xb90b2000}, {0xb90b4000}, {0xb90b6000}, {0xb90b8000}, {0xb90ba000}, {0xb90bc000}, {0xb90be000}, {0xb90c0000}, {0xb90c2000}, {0xb90c4000}, {0xb90c6000}, {0xb90c8000}, {0xb90ca000}, {0xb90cc000}, {0xb90ce000}, {0xb90d0000}, {0xb90d2000}, {0xb90d4000}, {0xb90d6000}, {0xb90d8000}, {0xb90da000}, {0xb90dc000}, {0xb90de000}, {0xb90e0000}, {0xb90e2000}, {0xb90e4000}, {0xb90e6000}, {0xb90e8000}, {0xb90ea000}, {0xb90ec000}, {0xb90ee000}, {0xb90f0000}, {0xb90f2000}, {0xb90f4000}, {0xb90f6000}, {0xb90f8000}, {0xb90fa000}, {0xb90fc000}, {0xb90fe000}, {0xb9100000}, {0xb9102000}, {0xb9104000}, {0xb9106000}, {0xb9108000}, {0xb910a000}, {0xb910c000}, {0xb910e000}, {0xb9110000}, {0xb9112000}, {0xb9114000}, {0xb9116000}, {0xb9118000}, {0xb911a000}, {0xb911c000}, {0xb911e000}, {0xb9120000}, {0xb9122000}, {0xb9124000}, {0xb9126000}, {0xb9128000}, {0xb912a000}, {0xb912c000}, {0xb912e000}, {0xb9130000}, {0xb9132000}, {0xb9134000}, {0xb9136000}, {0xb9138000}, {0xb913a000}, {0xb913c000}, {0xb913e000}, {0xb9140000}, {0xb9142000}, {0xb9144000}, {0xb9146000}, {0xb9148000}, {0xb914a000}, {0xb914c000}, {0xb914e000}, {0xb9150000}, {0xb9152000}, {0xb9154000}, {0xb9156000}, {0xb9158000}, {0xb915a000}, {0xb915c000}, {0xb915e000}, {0xb9160000}, {0xb9162000}, {0xb9164000}, {0xb9166000}, {0xb9168000}, {0xb916a000}, {0xb916c000}, {0xb916e000}, {0xb9170000}, {0xb9172000}, {0xb9174000}, {0xb9176000}, {0xb9178000}, {0xb917a000}, {0xb917c000}, {0xb917e000}, {0xb9180000}, {0xb9182000}, {0xb9184000}, {0xb9186000}, {0xb9188000}, {0xb918a000}, {0xb918c000}, {0xb918e000}, {0xb9190000}, {0xb9192000}, {0xb9194000}, {0xb9196000}, {0xb9198000}, {0xb919a000}, {0xb919c000}, {0xb919e000}, {0xb91a0000}, {0xb91a2000}, {0xb91a4000}, {0xb91a6000}, {0xb91a8000}, {0xb91aa000}, {0xb91ac000}, {0xb91ae000}, {0xb91b0000}, {0xb91b2000}, {0xb91b4000}, {0xb91b6000}, {0xb91b8000}, {0xb91ba000}, {0xb91bc000}, {0xb91be000}, {0xb91c0000}, {0xb91c2000}, {0xb91c4000}, {0xb91c6000}, {0xb91c8000}, {0xb91ca000}, {0xb91cc000}, {0xb91ce000}, {0xb91d0000}, {0xb91d2000}, {0xb91d4000}, {0xb91d6000}, {0xb91d8000}, {0xb91da000}, {0xb91dc000}, {0xb91de000}, {0xb91e0000}, {0xb91e2000}, {0xb91e4000}, {0xb91e6000}, {0xb91e8000}, {0xb91ea000}, {0xb91ec000}, {0xb91ee000}, {0xb91f0000}, {0xb91f2000}, {0xb91f4000}, {0xb91f6000}, {0xb91f8000}, {0xb91fa000}, {0xb91fc000}, {0xb91fe000}, {0xb9200000}, {0xb9202000}, {0xb9204000}, {0xb9206000}, {0xb9208000}, {0xb920a000}, {0xb920c000}, {0xb920e000}, {0xb9210000}, {0xb9212000}, {0xb9214000}, {0xb9216000}, {0xb9218000}, {0xb921a000}, {0xb921c000}, {0xb921e000}, {0xb9220000}, {0xb9222000}, {0xb9224000}, {0xb9226000}, {0xb9228000}, {0xb922a000}, {0xb922c000}, {0xb922e000}, {0xb9230000}, {0xb9232000}, {0xb9234000}, {0xb9236000}, {0xb9238000}, {0xb923a000}, {0xb923c000}, {0xb923e000}, {0xb9240000}, {0xb9242000}, {0xb9244000}, {0xb9246000}, {0xb9248000}, {0xb924a000}, {0xb924c000}, {0xb924e000}, {0xb9250000}, {0xb9252000}, {0xb9254000}, {0xb9256000}, {0xb9258000}, {0xb925a000}, {0xb925c000}, {0xb925e000}, {0xb9260000}, {0xb9262000}, {0xb9264000}, {0xb9266000}, {0xb9268000}, {0xb926a000}, {0xb926c000}, {0xb926e000}, {0xb9270000}, {0xb9272000}, {0xb9274000}, {0xb9276000}, {0xb9278000}, {0xb927a000}, {0xb927c000}, {0xb927e000}, {0xb9280000}, {0xb9282000}, {0xb9284000}, {0xb9286000}, {0xb9288000}, {0xb928a000}, {0xb928c000}, {0xb928e000}, {0xb9290000}, {0xb9292000}, {0xb9294000}, {0xb9296000}, {0xb9298000}, {0xb929a000}, {0xb929c000}, {0xb929e000}, {0xb92a0000}, {0xb92a2000}, {0xb92a4000}, {0xb92a6000}, {0xb92a8000}, {0xb92aa000}, {0xb92ac000}, {0xb92ae000}, {0xb92b0000}, {0xb92b2000}, {0xb92b4000}, {0xb92b6000}, {0xb92b8000}, {0xb92ba000}, {0xb92bc000}, {0xb92be000}, {0xb92c0000}, {0xb92c2000}, {0xb92c4000}, {0xb92c6000}, {0xb92c8000}, {0xb92ca000}, {0xb92cc000}, {0xb92ce000}, {0xb92d0000}, {0xb92d2000}, {0xb92d4000}, {0xb92d6000}, {0xb92d8000}, {0xb92da000}, {0xb92dc000}, {0xb92de000}, {0xb92e0000}, {0xb92e2000}, {0xb92e4000}, {0xb92e6000}, {0xb92e8000}, {0xb92ea000}, {0xb92ec000}, {0xb92ee000}, {0xb92f0000}, {0xb92f2000}, {0xb92f4000}, {0xb92f6000}, {0xb92f8000}, {0xb92fa000}, {0xb92fc000}, {0xb92fe000}, {0xb9300000}, {0xb9302000}, {0xb9304000}, {0xb9306000}, {0xb9308000}, {0xb930a000}, {0xb930c000}, {0xb930e000}, {0xb9310000}, {0xb9312000}, {0xb9314000}, {0xb9316000}, {0xb9318000}, {0xb931a000}, {0xb931c000}, {0xb931e000}, {0xb9320000}, {0xb9322000}, {0xb9324000}, {0xb9326000}, {0xb9328000}, {0xb932a000}, {0xb932c000}, {0xb932e000}, {0xb9330000}, {0xb9332000}, {0xb9334000}, {0xb9336000}, {0xb9338000}, {0xb933a000}, {0xb933c000}, {0xb933e000}, {0xb9340000}, {0xb9342000}, {0xb9344000}, {0xb9346000}, {0xb9348000}, {0xb934a000}, {0xb934c000}, {0xb934e000}, {0xb9350000}, {0xb9352000}, {0xb9354000}, {0xb9356000}, {0xb9358000}, {0xb935a000}, {0xb935c000}, {0xb935e000}, {0xb9360000}, {0xb9362000}, {0xb9364000}, {0xb9366000}, {0xb9368000}, {0xb936a000}, {0xb936c000}, {0xb936e000}, {0xb9370000}, {0xb9372000}, {0xb9374000}, {0xb9376000}, {0xb9378000}, {0xb937a000}, {0xb937c000}, {0xb937e000}, {0xb9380000}, {0xb9382000}, {0xb9384000}, {0xb9386000}, {0xb9388000}, {0xb938a000}, {0xb938c000}, {0xb938e000}, {0xb9390000}, {0xb9392000}, {0xb9394000}, {0xb9396000}, {0xb9398000}, {0xb939a000}, {0xb939c000}, {0xb939e000}, {0xb93a0000}, {0xb93a2000}, {0xb93a4000}, {0xb93a6000}, {0xb93a8000}, {0xb93aa000}, {0xb93ac000}, {0xb93ae000}, {0xb93b0000}, {0xb93b2000}, {0xb93b4000}, {0xb93b6000}, {0xb93b8000}, {0xb93ba000}, {0xb93bc000}, {0xb93be000}, {0xb93c0000}, {0xb93c2000}, {0xb93c4000}, {0xb93c6000}, {0xb93c8000}, {0xb93ca000}, {0xb93cc000}, {0xb93ce000}, {0xb93d0000}, {0xb93d2000}, {0xb93d4000}, {0xb93d6000}, {0xb93d8000}, {0xb93da000}, {0xb93dc000}, {0xb93de000}, {0xb93e0000}, {0xb93e2000}, {0xb93e4000}, {0xb93e6000}, {0xb93e8000}, {0xb93ea000}, {0xb93ec000}, {0xb93ee000}, {0xb93f0000}, {0xb93f2000}, {0xb93f4000}, {0xb93f6000}, {0xb93f8000}, {0xb93fa000}, {0xb93fc000}, {0xb93fe000}, {0xb9400000}, {0xb9402000}, {0xb9404000}, {0xb9406000}, {0xb9408000}, {0xb940a000}, {0xb940c000}, {0xb940e000}, {0xb9410000}, {0xb9412000}, {0xb9414000}, {0xb9416000}, {0xb9418000}, {0xb941a000}, {0xb941c000}, {0xb941e000}, {0xb9420000}, {0xb9422000}, {0xb9424000}, {0xb9426000}, {0xb9428000}, {0xb942a000}, {0xb942c000}, {0xb942e000}, {0xb9430000}, {0xb9432000}, {0xb9434000}, {0xb9436000}, {0xb9438000}, {0xb943a000}, {0xb943c000}, {0xb943e000}, {0xb9440000}, {0xb9442000}, {0xb9444000}, {0xb9446000}, {0xb9448000}, {0xb944a000}, {0xb944c000}, {0xb944e000}, {0xb9450000}, {0xb9452000}, {0xb9454000}, {0xb9456000}, {0xb9458000}, {0xb945a000}, {0xb945c000}, {0xb945e000}, {0xb9460000}, {0xb9462000}, {0xb9464000}, {0xb9466000}, {0xb9468000}, {0xb946a000}, {0xb946c000}, {0xb946e000}, {0xb9470000}, {0xb9472000}, {0xb9474000}, {0xb9476000}, {0xb9478000}, {0xb947a000}, {0xb947c000}, {0xb947e000}, {0xb9480000}, {0xb9482000}, {0xb9484000}, {0xb9486000}, {0xb9488000}, {0xb948a000}, {0xb948c000}, {0xb948e000}, {0xb9490000}, {0xb9492000}, {0xb9494000}, {0xb9496000}, {0xb9498000}, {0xb949a000}, {0xb949c000}, {0xb949e000}, {0xb94a0000}, {0xb94a2000}, {0xb94a4000}, {0xb94a6000}, {0xb94a8000}, {0xb94aa000}, {0xb94ac000}, {0xb94ae000}, {0xb94b0000}, {0xb94b2000}, {0xb94b4000}, {0xb94b6000}, {0xb94b8000}, {0xb94ba000}, {0xb94bc000}, {0xb94be000}, {0xb94c0000}, {0xb94c2000}, {0xb94c4000}, {0xb94c6000}, {0xb94c8000}, {0xb94ca000}, {0xb94cc000}, {0xb94ce000}, {0xb94d0000}, {0xb94d2000}, {0xb94d4000}, {0xb94d6000}, {0xb94d8000}, {0xb94da000}, {0xb94dc000}, {0xb94de000}, {0xb94e0000}, {0xb94e2000}, {0xb94e4000}, {0xb94e6000}, {0xb94e8000}, {0xb94ea000}, {0xb94ec000}, {0xb94ee000}, {0xb94f0000}, {0xb94f2000}, {0xb94f4000}, {0xb94f6000}, {0xb94f8000}, {0xb94fa000}, {0xb94fc000}, {0xb94fe000}, {0xb9500000}, {0xb9502000}, {0xb9504000}, {0xb9506000}, {0xb9508000}, {0xb950a000}, {0xb950c000}, {0xb950e000}, {0xb9510000}, {0xb9512000}, {0xb9514000}, {0xb9516000}, {0xb9518000}, {0xb951a000}, {0xb951c000}, {0xb951e000}, {0xb9520000}, {0xb9522000}, {0xb9524000}, {0xb9526000}, {0xb9528000}, {0xb952a000}, {0xb952c000}, {0xb952e000}, {0xb9530000}, {0xb9532000}, {0xb9534000}, {0xb9536000}, {0xb9538000}, {0xb953a000}, {0xb953c000}, {0xb953e000}, {0xb9540000}, {0xb9542000}, {0xb9544000}, {0xb9546000}, {0xb9548000}, {0xb954a000}, {0xb954c000}, {0xb954e000}, {0xb9550000}, {0xb9552000}, {0xb9554000}, {0xb9556000}, {0xb9558000}, {0xb955a000}, {0xb955c000}, {0xb955e000}, {0xb9560000}, {0xb9562000}, {0xb9564000}, {0xb9566000}, {0xb9568000}, {0xb956a000}, {0xb956c000}, {0xb956e000}, {0xb9570000}, {0xb9572000}, {0xb9574000}, {0xb9576000}, {0xb9578000}, {0xb957a000}, {0xb957c000}, {0xb957e000}, {0xb9580000}, {0xb9582000}, {0xb9584000}, {0xb9586000}, {0xb9588000}, {0xb958a000}, {0xb958c000}, {0xb958e000}, {0xb9590000}, {0xb9592000}, {0xb9594000}, {0xb9596000}, {0xb9598000}, {0xb959a000}, {0xb959c000}, {0xb959e000}, {0xb95a0000}, {0xb95a2000}, {0xb95a4000}, {0xb95a6000}, {0xb95a8000}, {0xb95aa000}, {0xb95ac000}, {0xb95ae000}, {0xb95b0000}, {0xb95b2000}, {0xb95b4000}, {0xb95b6000}, {0xb95b8000}, {0xb95ba000}, {0xb95bc000}, {0xb95be000}, {0xb95c0000}, {0xb95c2000}, {0xb95c4000}, {0xb95c6000}, {0xb95c8000}, {0xb95ca000}, {0xb95cc000}, {0xb95ce000}, {0xb95d0000}, {0xb95d2000}, {0xb95d4000}, {0xb95d6000}, {0xb95d8000}, {0xb95da000}, {0xb95dc000}, {0xb95de000}, {0xb95e0000}, {0xb95e2000}, {0xb95e4000}, {0xb95e6000}, {0xb95e8000}, {0xb95ea000}, {0xb95ec000}, {0xb95ee000}, {0xb95f0000}, {0xb95f2000}, {0xb95f4000}, {0xb95f6000}, {0xb95f8000}, {0xb95fa000}, {0xb95fc000}, {0xb95fe000}, {0xb9600000}, {0xb9602000}, {0xb9604000}, {0xb9606000}, {0xb9608000}, {0xb960a000}, {0xb960c000}, {0xb960e000}, {0xb9610000}, {0xb9612000}, {0xb9614000}, {0xb9616000}, {0xb9618000}, {0xb961a000}, {0xb961c000}, {0xb961e000}, {0xb9620000}, {0xb9622000}, {0xb9624000}, {0xb9626000}, {0xb9628000}, {0xb962a000}, {0xb962c000}, {0xb962e000}, {0xb9630000}, {0xb9632000}, {0xb9634000}, {0xb9636000}, {0xb9638000}, {0xb963a000}, {0xb963c000}, {0xb963e000}, {0xb9640000}, {0xb9642000}, {0xb9644000}, {0xb9646000}, {0xb9648000}, {0xb964a000}, {0xb964c000}, {0xb964e000}, {0xb9650000}, {0xb9652000}, {0xb9654000}, {0xb9656000}, {0xb9658000}, {0xb965a000}, {0xb965c000}, {0xb965e000}, {0xb9660000}, {0xb9662000}, {0xb9664000}, {0xb9666000}, {0xb9668000}, {0xb966a000}, {0xb966c000}, {0xb966e000}, {0xb9670000}, {0xb9672000}, {0xb9674000}, {0xb9676000}, {0xb9678000}, {0xb967a000}, {0xb967c000}, {0xb967e000}, {0xb9680000}, {0xb9682000}, {0xb9684000}, {0xb9686000}, {0xb9688000}, {0xb968a000}, {0xb968c000}, {0xb968e000}, {0xb9690000}, {0xb9692000}, {0xb9694000}, {0xb9696000}, {0xb9698000}, {0xb969a000}, {0xb969c000}, {0xb969e000}, {0xb96a0000}, {0xb96a2000}, {0xb96a4000}, {0xb96a6000}, {0xb96a8000}, {0xb96aa000}, {0xb96ac000}, {0xb96ae000}, {0xb96b0000}, {0xb96b2000}, {0xb96b4000}, {0xb96b6000}, {0xb96b8000}, {0xb96ba000}, {0xb96bc000}, {0xb96be000}, {0xb96c0000}, {0xb96c2000}, {0xb96c4000}, {0xb96c6000}, {0xb96c8000}, {0xb96ca000}, {0xb96cc000}, {0xb96ce000}, {0xb96d0000}, {0xb96d2000}, {0xb96d4000}, {0xb96d6000}, {0xb96d8000}, {0xb96da000}, {0xb96dc000}, {0xb96de000}, {0xb96e0000}, {0xb96e2000}, {0xb96e4000}, {0xb96e6000}, {0xb96e8000}, {0xb96ea000}, {0xb96ec000}, {0xb96ee000}, {0xb96f0000}, {0xb96f2000}, {0xb96f4000}, {0xb96f6000}, {0xb96f8000}, {0xb96fa000}, {0xb96fc000}, {0xb96fe000}, {0xb9700000}, {0xb9702000}, {0xb9704000}, {0xb9706000}, {0xb9708000}, {0xb970a000}, {0xb970c000}, {0xb970e000}, {0xb9710000}, {0xb9712000}, {0xb9714000}, {0xb9716000}, {0xb9718000}, {0xb971a000}, {0xb971c000}, {0xb971e000}, {0xb9720000}, {0xb9722000}, {0xb9724000}, {0xb9726000}, {0xb9728000}, {0xb972a000}, {0xb972c000}, {0xb972e000}, {0xb9730000}, {0xb9732000}, {0xb9734000}, {0xb9736000}, {0xb9738000}, {0xb973a000}, {0xb973c000}, {0xb973e000}, {0xb9740000}, {0xb9742000}, {0xb9744000}, {0xb9746000}, {0xb9748000}, {0xb974a000}, {0xb974c000}, {0xb974e000}, {0xb9750000}, {0xb9752000}, {0xb9754000}, {0xb9756000}, {0xb9758000}, {0xb975a000}, {0xb975c000}, {0xb975e000}, {0xb9760000}, {0xb9762000}, {0xb9764000}, {0xb9766000}, {0xb9768000}, {0xb976a000}, {0xb976c000}, {0xb976e000}, {0xb9770000}, {0xb9772000}, {0xb9774000}, {0xb9776000}, {0xb9778000}, {0xb977a000}, {0xb977c000}, {0xb977e000}, {0xb9780000}, {0xb9782000}, {0xb9784000}, {0xb9786000}, {0xb9788000}, {0xb978a000}, {0xb978c000}, {0xb978e000}, {0xb9790000}, {0xb9792000}, {0xb9794000}, {0xb9796000}, {0xb9798000}, {0xb979a000}, {0xb979c000}, {0xb979e000}, {0xb97a0000}, {0xb97a2000}, {0xb97a4000}, {0xb97a6000}, {0xb97a8000}, {0xb97aa000}, {0xb97ac000}, {0xb97ae000}, {0xb97b0000}, {0xb97b2000}, {0xb97b4000}, {0xb97b6000}, {0xb97b8000}, {0xb97ba000}, {0xb97bc000}, {0xb97be000}, {0xb97c0000}, {0xb97c2000}, {0xb97c4000}, {0xb97c6000}, {0xb97c8000}, {0xb97ca000}, {0xb97cc000}, {0xb97ce000}, {0xb97d0000}, {0xb97d2000}, {0xb97d4000}, {0xb97d6000}, {0xb97d8000}, {0xb97da000}, {0xb97dc000}, {0xb97de000}, {0xb97e0000}, {0xb97e2000}, {0xb97e4000}, {0xb97e6000}, {0xb97e8000}, {0xb97ea000}, {0xb97ec000}, {0xb97ee000}, {0xb97f0000}, {0xb97f2000}, {0xb97f4000}, {0xb97f6000}, {0xb97f8000}, {0xb97fa000}, {0xb97fc000}, {0xb97fe000}, {0xb9800000}, {0xb9802000}, {0xb9804000}, {0xb9806000}, {0xb9808000}, {0xb980a000}, {0xb980c000}, {0xb980e000}, {0xb9810000}, {0xb9812000}, {0xb9814000}, {0xb9816000}, {0xb9818000}, {0xb981a000}, {0xb981c000}, {0xb981e000}, {0xb9820000}, {0xb9822000}, {0xb9824000}, {0xb9826000}, {0xb9828000}, {0xb982a000}, {0xb982c000}, {0xb982e000}, {0xb9830000}, {0xb9832000}, {0xb9834000}, {0xb9836000}, {0xb9838000}, {0xb983a000}, {0xb983c000}, {0xb983e000}, {0xb9840000}, {0xb9842000}, {0xb9844000}, {0xb9846000}, {0xb9848000}, {0xb984a000}, {0xb984c000}, {0xb984e000}, {0xb9850000}, {0xb9852000}, {0xb9854000}, {0xb9856000}, {0xb9858000}, {0xb985a000}, {0xb985c000}, {0xb985e000}, {0xb9860000}, {0xb9862000}, {0xb9864000}, {0xb9866000}, {0xb9868000}, {0xb986a000}, {0xb986c000}, {0xb986e000}, {0xb9870000}, {0xb9872000}, {0xb9874000}, {0xb9876000}, {0xb9878000}, {0xb987a000}, {0xb987c000}, {0xb987e000}, {0xb9880000}, {0xb9882000}, {0xb9884000}, {0xb9886000}, {0xb9888000}, {0xb988a000}, {0xb988c000}, {0xb988e000}, {0xb9890000}, {0xb9892000}, {0xb9894000}, {0xb9896000}, {0xb9898000}, {0xb989a000}, {0xb989c000}, {0xb989e000}, {0xb98a0000}, {0xb98a2000}, {0xb98a4000}, {0xb98a6000}, {0xb98a8000}, {0xb98aa000}, {0xb98ac000}, {0xb98ae000}, {0xb98b0000}, {0xb98b2000}, {0xb98b4000}, {0xb98b6000}, {0xb98b8000}, {0xb98ba000}, {0xb98bc000}, {0xb98be000}, {0xb98c0000}, {0xb98c2000}, {0xb98c4000}, {0xb98c6000}, {0xb98c8000}, {0xb98ca000}, {0xb98cc000}, {0xb98ce000}, {0xb98d0000}, {0xb98d2000}, {0xb98d4000}, {0xb98d6000}, {0xb98d8000}, {0xb98da000}, {0xb98dc000}, {0xb98de000}, {0xb98e0000}, {0xb98e2000}, {0xb98e4000}, {0xb98e6000}, {0xb98e8000}, {0xb98ea000}, {0xb98ec000}, {0xb98ee000}, {0xb98f0000}, {0xb98f2000}, {0xb98f4000}, {0xb98f6000}, {0xb98f8000}, {0xb98fa000}, {0xb98fc000}, {0xb98fe000}, {0xb9900000}, {0xb9902000}, {0xb9904000}, {0xb9906000}, {0xb9908000}, {0xb990a000}, {0xb990c000}, {0xb990e000}, {0xb9910000}, {0xb9912000}, {0xb9914000}, {0xb9916000}, {0xb9918000}, {0xb991a000}, {0xb991c000}, {0xb991e000}, {0xb9920000}, {0xb9922000}, {0xb9924000}, {0xb9926000}, {0xb9928000}, {0xb992a000}, {0xb992c000}, {0xb992e000}, {0xb9930000}, {0xb9932000}, {0xb9934000}, {0xb9936000}, {0xb9938000}, {0xb993a000}, {0xb993c000}, {0xb993e000}, {0xb9940000}, {0xb9942000}, {0xb9944000}, {0xb9946000}, {0xb9948000}, {0xb994a000}, {0xb994c000}, {0xb994e000}, {0xb9950000}, {0xb9952000}, {0xb9954000}, {0xb9956000}, {0xb9958000}, {0xb995a000}, {0xb995c000}, {0xb995e000}, {0xb9960000}, {0xb9962000}, {0xb9964000}, {0xb9966000}, {0xb9968000}, {0xb996a000}, {0xb996c000}, {0xb996e000}, {0xb9970000}, {0xb9972000}, {0xb9974000}, {0xb9976000}, {0xb9978000}, {0xb997a000}, {0xb997c000}, {0xb997e000}, {0xb9980000}, {0xb9982000}, {0xb9984000}, {0xb9986000}, {0xb9988000}, {0xb998a000}, {0xb998c000}, {0xb998e000}, {0xb9990000}, {0xb9992000}, {0xb9994000}, {0xb9996000}, {0xb9998000}, {0xb999a000}, {0xb999c000}, {0xb999e000}, {0xb99a0000}, {0xb99a2000}, {0xb99a4000}, {0xb99a6000}, {0xb99a8000}, {0xb99aa000}, {0xb99ac000}, {0xb99ae000}, {0xb99b0000}, {0xb99b2000}, {0xb99b4000}, {0xb99b6000}, {0xb99b8000}, {0xb99ba000}, {0xb99bc000}, {0xb99be000}, {0xb99c0000}, {0xb99c2000}, {0xb99c4000}, {0xb99c6000}, {0xb99c8000}, {0xb99ca000}, {0xb99cc000}, {0xb99ce000}, {0xb99d0000}, {0xb99d2000}, {0xb99d4000}, {0xb99d6000}, {0xb99d8000}, {0xb99da000}, {0xb99dc000}, {0xb99de000}, {0xb99e0000}, {0xb99e2000}, {0xb99e4000}, {0xb99e6000}, {0xb99e8000}, {0xb99ea000}, {0xb99ec000}, {0xb99ee000}, {0xb99f0000}, {0xb99f2000}, {0xb99f4000}, {0xb99f6000}, {0xb99f8000}, {0xb99fa000}, {0xb99fc000}, {0xb99fe000}, {0xb9a00000}, {0xb9a02000}, {0xb9a04000}, {0xb9a06000}, {0xb9a08000}, {0xb9a0a000}, {0xb9a0c000}, {0xb9a0e000}, {0xb9a10000}, {0xb9a12000}, {0xb9a14000}, {0xb9a16000}, {0xb9a18000}, {0xb9a1a000}, {0xb9a1c000}, {0xb9a1e000}, {0xb9a20000}, {0xb9a22000}, {0xb9a24000}, {0xb9a26000}, {0xb9a28000}, {0xb9a2a000}, {0xb9a2c000}, {0xb9a2e000}, {0xb9a30000}, {0xb9a32000}, {0xb9a34000}, {0xb9a36000}, {0xb9a38000}, {0xb9a3a000}, {0xb9a3c000}, {0xb9a3e000}, {0xb9a40000}, {0xb9a42000}, {0xb9a44000}, {0xb9a46000}, {0xb9a48000}, {0xb9a4a000}, {0xb9a4c000}, {0xb9a4e000}, {0xb9a50000}, {0xb9a52000}, {0xb9a54000}, {0xb9a56000}, {0xb9a58000}, {0xb9a5a000}, {0xb9a5c000}, {0xb9a5e000}, {0xb9a60000}, {0xb9a62000}, {0xb9a64000}, {0xb9a66000}, {0xb9a68000}, {0xb9a6a000}, {0xb9a6c000}, {0xb9a6e000}, {0xb9a70000}, {0xb9a72000}, {0xb9a74000}, {0xb9a76000}, {0xb9a78000}, {0xb9a7a000}, {0xb9a7c000}, {0xb9a7e000}, {0xb9a80000}, {0xb9a82000}, {0xb9a84000}, {0xb9a86000}, {0xb9a88000}, {0xb9a8a000}, {0xb9a8c000}, {0xb9a8e000}, {0xb9a90000}, {0xb9a92000}, {0xb9a94000}, {0xb9a96000}, {0xb9a98000}, {0xb9a9a000}, {0xb9a9c000}, {0xb9a9e000}, {0xb9aa0000}, {0xb9aa2000}, {0xb9aa4000}, {0xb9aa6000}, {0xb9aa8000}, {0xb9aaa000}, {0xb9aac000}, {0xb9aae000}, {0xb9ab0000}, {0xb9ab2000}, {0xb9ab4000}, {0xb9ab6000}, {0xb9ab8000}, {0xb9aba000}, {0xb9abc000}, {0xb9abe000}, {0xb9ac0000}, {0xb9ac2000}, {0xb9ac4000}, {0xb9ac6000}, {0xb9ac8000}, {0xb9aca000}, {0xb9acc000}, {0xb9ace000}, {0xb9ad0000}, {0xb9ad2000}, {0xb9ad4000}, {0xb9ad6000}, {0xb9ad8000}, {0xb9ada000}, {0xb9adc000}, {0xb9ade000}, {0xb9ae0000}, {0xb9ae2000}, {0xb9ae4000}, {0xb9ae6000}, {0xb9ae8000}, {0xb9aea000}, {0xb9aec000}, {0xb9aee000}, {0xb9af0000}, {0xb9af2000}, {0xb9af4000}, {0xb9af6000}, {0xb9af8000}, {0xb9afa000}, {0xb9afc000}, {0xb9afe000}, {0xb9b00000}, {0xb9b02000}, {0xb9b04000}, {0xb9b06000}, {0xb9b08000}, {0xb9b0a000}, {0xb9b0c000}, {0xb9b0e000}, {0xb9b10000}, {0xb9b12000}, {0xb9b14000}, {0xb9b16000}, {0xb9b18000}, {0xb9b1a000}, {0xb9b1c000}, {0xb9b1e000}, {0xb9b20000}, {0xb9b22000}, {0xb9b24000}, {0xb9b26000}, {0xb9b28000}, {0xb9b2a000}, {0xb9b2c000}, {0xb9b2e000}, {0xb9b30000}, {0xb9b32000}, {0xb9b34000}, {0xb9b36000}, {0xb9b38000}, {0xb9b3a000}, {0xb9b3c000}, {0xb9b3e000}, {0xb9b40000}, {0xb9b42000}, {0xb9b44000}, {0xb9b46000}, {0xb9b48000}, {0xb9b4a000}, {0xb9b4c000}, {0xb9b4e000}, {0xb9b50000}, {0xb9b52000}, {0xb9b54000}, {0xb9b56000}, {0xb9b58000}, {0xb9b5a000}, {0xb9b5c000}, {0xb9b5e000}, {0xb9b60000}, {0xb9b62000}, {0xb9b64000}, {0xb9b66000}, {0xb9b68000}, {0xb9b6a000}, {0xb9b6c000}, {0xb9b6e000}, {0xb9b70000}, {0xb9b72000}, {0xb9b74000}, {0xb9b76000}, {0xb9b78000}, {0xb9b7a000}, {0xb9b7c000}, {0xb9b7e000}, {0xb9b80000}, {0xb9b82000}, {0xb9b84000}, {0xb9b86000}, {0xb9b88000}, {0xb9b8a000}, {0xb9b8c000}, {0xb9b8e000}, {0xb9b90000}, {0xb9b92000}, {0xb9b94000}, {0xb9b96000}, {0xb9b98000}, {0xb9b9a000}, {0xb9b9c000}, {0xb9b9e000}, {0xb9ba0000}, {0xb9ba2000}, {0xb9ba4000}, {0xb9ba6000}, {0xb9ba8000}, {0xb9baa000}, {0xb9bac000}, {0xb9bae000}, {0xb9bb0000}, {0xb9bb2000}, {0xb9bb4000}, {0xb9bb6000}, {0xb9bb8000}, {0xb9bba000}, {0xb9bbc000}, {0xb9bbe000}, {0xb9bc0000}, {0xb9bc2000}, {0xb9bc4000}, {0xb9bc6000}, {0xb9bc8000}, {0xb9bca000}, {0xb9bcc000}, {0xb9bce000}, {0xb9bd0000}, {0xb9bd2000}, {0xb9bd4000}, {0xb9bd6000}, {0xb9bd8000}, {0xb9bda000}, {0xb9bdc000}, {0xb9bde000}, {0xb9be0000}, {0xb9be2000}, {0xb9be4000}, {0xb9be6000}, {0xb9be8000}, {0xb9bea000}, {0xb9bec000}, {0xb9bee000}, {0xb9bf0000}, {0xb9bf2000}, {0xb9bf4000}, {0xb9bf6000}, {0xb9bf8000}, {0xb9bfa000}, {0xb9bfc000}, {0xb9bfe000}, {0xb9c00000}, {0xb9c02000}, {0xb9c04000}, {0xb9c06000}, {0xb9c08000}, {0xb9c0a000}, {0xb9c0c000}, {0xb9c0e000}, {0xb9c10000}, {0xb9c12000}, {0xb9c14000}, {0xb9c16000}, {0xb9c18000}, {0xb9c1a000}, {0xb9c1c000}, {0xb9c1e000}, {0xb9c20000}, {0xb9c22000}, {0xb9c24000}, {0xb9c26000}, {0xb9c28000}, {0xb9c2a000}, {0xb9c2c000}, {0xb9c2e000}, {0xb9c30000}, {0xb9c32000}, {0xb9c34000}, {0xb9c36000}, {0xb9c38000}, {0xb9c3a000}, {0xb9c3c000}, {0xb9c3e000}, {0xb9c40000}, {0xb9c42000}, {0xb9c44000}, {0xb9c46000}, {0xb9c48000}, {0xb9c4a000}, {0xb9c4c000}, {0xb9c4e000}, {0xb9c50000}, {0xb9c52000}, {0xb9c54000}, {0xb9c56000}, {0xb9c58000}, {0xb9c5a000}, {0xb9c5c000}, {0xb9c5e000}, {0xb9c60000}, {0xb9c62000}, {0xb9c64000}, {0xb9c66000}, {0xb9c68000}, {0xb9c6a000}, {0xb9c6c000}, {0xb9c6e000}, {0xb9c70000}, {0xb9c72000}, {0xb9c74000}, {0xb9c76000}, {0xb9c78000}, {0xb9c7a000}, {0xb9c7c000}, {0xb9c7e000}, {0xb9c80000}, {0xb9c82000}, {0xb9c84000}, {0xb9c86000}, {0xb9c88000}, {0xb9c8a000}, {0xb9c8c000}, {0xb9c8e000}, {0xb9c90000}, {0xb9c92000}, {0xb9c94000}, {0xb9c96000}, {0xb9c98000}, {0xb9c9a000}, {0xb9c9c000}, {0xb9c9e000}, {0xb9ca0000}, {0xb9ca2000}, {0xb9ca4000}, {0xb9ca6000}, {0xb9ca8000}, {0xb9caa000}, {0xb9cac000}, {0xb9cae000}, {0xb9cb0000}, {0xb9cb2000}, {0xb9cb4000}, {0xb9cb6000}, {0xb9cb8000}, {0xb9cba000}, {0xb9cbc000}, {0xb9cbe000}, {0xb9cc0000}, {0xb9cc2000}, {0xb9cc4000}, {0xb9cc6000}, {0xb9cc8000}, {0xb9cca000}, {0xb9ccc000}, {0xb9cce000}, {0xb9cd0000}, {0xb9cd2000}, {0xb9cd4000}, {0xb9cd6000}, {0xb9cd8000}, {0xb9cda000}, {0xb9cdc000}, {0xb9cde000}, {0xb9ce0000}, {0xb9ce2000}, {0xb9ce4000}, {0xb9ce6000}, {0xb9ce8000}, {0xb9cea000}, {0xb9cec000}, {0xb9cee000}, {0xb9cf0000}, {0xb9cf2000}, {0xb9cf4000}, {0xb9cf6000}, {0xb9cf8000}, {0xb9cfa000}, {0xb9cfc000}, {0xb9cfe000}, {0xb9d00000}, {0xb9d02000}, {0xb9d04000}, {0xb9d06000}, {0xb9d08000}, {0xb9d0a000}, {0xb9d0c000}, {0xb9d0e000}, {0xb9d10000}, {0xb9d12000}, {0xb9d14000}, {0xb9d16000}, {0xb9d18000}, {0xb9d1a000}, {0xb9d1c000}, {0xb9d1e000}, {0xb9d20000}, {0xb9d22000}, {0xb9d24000}, {0xb9d26000}, {0xb9d28000}, {0xb9d2a000}, {0xb9d2c000}, {0xb9d2e000}, {0xb9d30000}, {0xb9d32000}, {0xb9d34000}, {0xb9d36000}, {0xb9d38000}, {0xb9d3a000}, {0xb9d3c000}, {0xb9d3e000}, {0xb9d40000}, {0xb9d42000}, {0xb9d44000}, {0xb9d46000}, {0xb9d48000}, {0xb9d4a000}, {0xb9d4c000}, {0xb9d4e000}, {0xb9d50000}, {0xb9d52000}, {0xb9d54000}, {0xb9d56000}, {0xb9d58000}, {0xb9d5a000}, {0xb9d5c000}, {0xb9d5e000}, {0xb9d60000}, {0xb9d62000}, {0xb9d64000}, {0xb9d66000}, {0xb9d68000}, {0xb9d6a000}, {0xb9d6c000}, {0xb9d6e000}, {0xb9d70000}, {0xb9d72000}, {0xb9d74000}, {0xb9d76000}, {0xb9d78000}, {0xb9d7a000}, {0xb9d7c000}, {0xb9d7e000}, {0xb9d80000}, {0xb9d82000}, {0xb9d84000}, {0xb9d86000}, {0xb9d88000}, {0xb9d8a000}, {0xb9d8c000}, {0xb9d8e000}, {0xb9d90000}, {0xb9d92000}, {0xb9d94000}, {0xb9d96000}, {0xb9d98000}, {0xb9d9a000}, {0xb9d9c000}, {0xb9d9e000}, {0xb9da0000}, {0xb9da2000}, {0xb9da4000}, {0xb9da6000}, {0xb9da8000}, {0xb9daa000}, {0xb9dac000}, {0xb9dae000}, {0xb9db0000}, {0xb9db2000}, {0xb9db4000}, {0xb9db6000}, {0xb9db8000}, {0xb9dba000}, {0xb9dbc000}, {0xb9dbe000}, {0xb9dc0000}, {0xb9dc2000}, {0xb9dc4000}, {0xb9dc6000}, {0xb9dc8000}, {0xb9dca000}, {0xb9dcc000}, {0xb9dce000}, {0xb9dd0000}, {0xb9dd2000}, {0xb9dd4000}, {0xb9dd6000}, {0xb9dd8000}, {0xb9dda000}, {0xb9ddc000}, {0xb9dde000}, {0xb9de0000}, {0xb9de2000}, {0xb9de4000}, {0xb9de6000}, {0xb9de8000}, {0xb9dea000}, {0xb9dec000}, {0xb9dee000}, {0xb9df0000}, {0xb9df2000}, {0xb9df4000}, {0xb9df6000}, {0xb9df8000}, {0xb9dfa000}, {0xb9dfc000}, {0xb9dfe000}, {0xb9e00000}, {0xb9e02000}, {0xb9e04000}, {0xb9e06000}, {0xb9e08000}, {0xb9e0a000}, {0xb9e0c000}, {0xb9e0e000}, {0xb9e10000}, {0xb9e12000}, {0xb9e14000}, {0xb9e16000}, {0xb9e18000}, {0xb9e1a000}, {0xb9e1c000}, {0xb9e1e000}, {0xb9e20000}, {0xb9e22000}, {0xb9e24000}, {0xb9e26000}, {0xb9e28000}, {0xb9e2a000}, {0xb9e2c000}, {0xb9e2e000}, {0xb9e30000}, {0xb9e32000}, {0xb9e34000}, {0xb9e36000}, {0xb9e38000}, {0xb9e3a000}, {0xb9e3c000}, {0xb9e3e000}, {0xb9e40000}, {0xb9e42000}, {0xb9e44000}, {0xb9e46000}, {0xb9e48000}, {0xb9e4a000}, {0xb9e4c000}, {0xb9e4e000}, {0xb9e50000}, {0xb9e52000}, {0xb9e54000}, {0xb9e56000}, {0xb9e58000}, {0xb9e5a000}, {0xb9e5c000}, {0xb9e5e000}, {0xb9e60000}, {0xb9e62000}, {0xb9e64000}, {0xb9e66000}, {0xb9e68000}, {0xb9e6a000}, {0xb9e6c000}, {0xb9e6e000}, {0xb9e70000}, {0xb9e72000}, {0xb9e74000}, {0xb9e76000}, {0xb9e78000}, {0xb9e7a000}, {0xb9e7c000}, {0xb9e7e000}, {0xb9e80000}, {0xb9e82000}, {0xb9e84000}, {0xb9e86000}, {0xb9e88000}, {0xb9e8a000}, {0xb9e8c000}, {0xb9e8e000}, {0xb9e90000}, {0xb9e92000}, {0xb9e94000}, {0xb9e96000}, {0xb9e98000}, {0xb9e9a000}, {0xb9e9c000}, {0xb9e9e000}, {0xb9ea0000}, {0xb9ea2000}, {0xb9ea4000}, {0xb9ea6000}, {0xb9ea8000}, {0xb9eaa000}, {0xb9eac000}, {0xb9eae000}, {0xb9eb0000}, {0xb9eb2000}, {0xb9eb4000}, {0xb9eb6000}, {0xb9eb8000}, {0xb9eba000}, {0xb9ebc000}, {0xb9ebe000}, {0xb9ec0000}, {0xb9ec2000}, {0xb9ec4000}, {0xb9ec6000}, {0xb9ec8000}, {0xb9eca000}, {0xb9ecc000}, {0xb9ece000}, {0xb9ed0000}, {0xb9ed2000}, {0xb9ed4000}, {0xb9ed6000}, {0xb9ed8000}, {0xb9eda000}, {0xb9edc000}, {0xb9ede000}, {0xb9ee0000}, {0xb9ee2000}, {0xb9ee4000}, {0xb9ee6000}, {0xb9ee8000}, {0xb9eea000}, {0xb9eec000}, {0xb9eee000}, {0xb9ef0000}, {0xb9ef2000}, {0xb9ef4000}, {0xb9ef6000}, {0xb9ef8000}, {0xb9efa000}, {0xb9efc000}, {0xb9efe000}, {0xb9f00000}, {0xb9f02000}, {0xb9f04000}, {0xb9f06000}, {0xb9f08000}, {0xb9f0a000}, {0xb9f0c000}, {0xb9f0e000}, {0xb9f10000}, {0xb9f12000}, {0xb9f14000}, {0xb9f16000}, {0xb9f18000}, {0xb9f1a000}, {0xb9f1c000}, {0xb9f1e000}, {0xb9f20000}, {0xb9f22000}, {0xb9f24000}, {0xb9f26000}, {0xb9f28000}, {0xb9f2a000}, {0xb9f2c000}, {0xb9f2e000}, {0xb9f30000}, {0xb9f32000}, {0xb9f34000}, {0xb9f36000}, {0xb9f38000}, {0xb9f3a000}, {0xb9f3c000}, {0xb9f3e000}, {0xb9f40000}, {0xb9f42000}, {0xb9f44000}, {0xb9f46000}, {0xb9f48000}, {0xb9f4a000}, {0xb9f4c000}, {0xb9f4e000}, {0xb9f50000}, {0xb9f52000}, {0xb9f54000}, {0xb9f56000}, {0xb9f58000}, {0xb9f5a000}, {0xb9f5c000}, {0xb9f5e000}, {0xb9f60000}, {0xb9f62000}, {0xb9f64000}, {0xb9f66000}, {0xb9f68000}, {0xb9f6a000}, {0xb9f6c000}, {0xb9f6e000}, {0xb9f70000}, {0xb9f72000}, {0xb9f74000}, {0xb9f76000}, {0xb9f78000}, {0xb9f7a000}, {0xb9f7c000}, {0xb9f7e000}, {0xb9f80000}, {0xb9f82000}, {0xb9f84000}, {0xb9f86000}, {0xb9f88000}, {0xb9f8a000}, {0xb9f8c000}, {0xb9f8e000}, {0xb9f90000}, {0xb9f92000}, {0xb9f94000}, {0xb9f96000}, {0xb9f98000}, {0xb9f9a000}, {0xb9f9c000}, {0xb9f9e000}, {0xb9fa0000}, {0xb9fa2000}, {0xb9fa4000}, {0xb9fa6000}, {0xb9fa8000}, {0xb9faa000}, {0xb9fac000}, {0xb9fae000}, {0xb9fb0000}, {0xb9fb2000}, {0xb9fb4000}, {0xb9fb6000}, {0xb9fb8000}, {0xb9fba000}, {0xb9fbc000}, {0xb9fbe000}, {0xb9fc0000}, {0xb9fc2000}, {0xb9fc4000}, {0xb9fc6000}, {0xb9fc8000}, {0xb9fca000}, {0xb9fcc000}, {0xb9fce000}, {0xb9fd0000}, {0xb9fd2000}, {0xb9fd4000}, {0xb9fd6000}, {0xb9fd8000}, {0xb9fda000}, {0xb9fdc000}, {0xb9fde000}, {0xb9fe0000}, {0xb9fe2000}, {0xb9fe4000}, {0xb9fe6000}, {0xb9fe8000}, {0xb9fea000}, {0xb9fec000}, {0xb9fee000}, {0xb9ff0000}, {0xb9ff2000}, {0xb9ff4000}, {0xb9ff6000}, {0xb9ff8000}, {0xb9ffa000}, {0xb9ffc000}, {0xb9ffe000}, {0xba000000}, {0xba002000}, {0xba004000}, {0xba006000}, {0xba008000}, {0xba00a000}, {0xba00c000}, {0xba00e000}, {0xba010000}, {0xba012000}, {0xba014000}, {0xba016000}, {0xba018000}, {0xba01a000}, {0xba01c000}, {0xba01e000}, {0xba020000}, {0xba022000}, {0xba024000}, {0xba026000}, {0xba028000}, {0xba02a000}, {0xba02c000}, {0xba02e000}, {0xba030000}, {0xba032000}, {0xba034000}, {0xba036000}, {0xba038000}, {0xba03a000}, {0xba03c000}, {0xba03e000}, {0xba040000}, {0xba042000}, {0xba044000}, {0xba046000}, {0xba048000}, {0xba04a000}, {0xba04c000}, {0xba04e000}, {0xba050000}, {0xba052000}, {0xba054000}, {0xba056000}, {0xba058000}, {0xba05a000}, {0xba05c000}, {0xba05e000}, {0xba060000}, {0xba062000}, {0xba064000}, {0xba066000}, {0xba068000}, {0xba06a000}, {0xba06c000}, {0xba06e000}, {0xba070000}, {0xba072000}, {0xba074000}, {0xba076000}, {0xba078000}, {0xba07a000}, {0xba07c000}, {0xba07e000}, {0xba080000}, {0xba082000}, {0xba084000}, {0xba086000}, {0xba088000}, {0xba08a000}, {0xba08c000}, {0xba08e000}, {0xba090000}, {0xba092000}, {0xba094000}, {0xba096000}, {0xba098000}, {0xba09a000}, {0xba09c000}, {0xba09e000}, {0xba0a0000}, {0xba0a2000}, {0xba0a4000}, {0xba0a6000}, {0xba0a8000}, {0xba0aa000}, {0xba0ac000}, {0xba0ae000}, {0xba0b0000}, {0xba0b2000}, {0xba0b4000}, {0xba0b6000}, {0xba0b8000}, {0xba0ba000}, {0xba0bc000}, {0xba0be000}, {0xba0c0000}, {0xba0c2000}, {0xba0c4000}, {0xba0c6000}, {0xba0c8000}, {0xba0ca000}, {0xba0cc000}, {0xba0ce000}, {0xba0d0000}, {0xba0d2000}, {0xba0d4000}, {0xba0d6000}, {0xba0d8000}, {0xba0da000}, {0xba0dc000}, {0xba0de000}, {0xba0e0000}, {0xba0e2000}, {0xba0e4000}, {0xba0e6000}, {0xba0e8000}, {0xba0ea000}, {0xba0ec000}, {0xba0ee000}, {0xba0f0000}, {0xba0f2000}, {0xba0f4000}, {0xba0f6000}, {0xba0f8000}, {0xba0fa000}, {0xba0fc000}, {0xba0fe000}, {0xba100000}, {0xba102000}, {0xba104000}, {0xba106000}, {0xba108000}, {0xba10a000}, {0xba10c000}, {0xba10e000}, {0xba110000}, {0xba112000}, {0xba114000}, {0xba116000}, {0xba118000}, {0xba11a000}, {0xba11c000}, {0xba11e000}, {0xba120000}, {0xba122000}, {0xba124000}, {0xba126000}, {0xba128000}, {0xba12a000}, {0xba12c000}, {0xba12e000}, {0xba130000}, {0xba132000}, {0xba134000}, {0xba136000}, {0xba138000}, {0xba13a000}, {0xba13c000}, {0xba13e000}, {0xba140000}, {0xba142000}, {0xba144000}, {0xba146000}, {0xba148000}, {0xba14a000}, {0xba14c000}, {0xba14e000}, {0xba150000}, {0xba152000}, {0xba154000}, {0xba156000}, {0xba158000}, {0xba15a000}, {0xba15c000}, {0xba15e000}, {0xba160000}, {0xba162000}, {0xba164000}, {0xba166000}, {0xba168000}, {0xba16a000}, {0xba16c000}, {0xba16e000}, {0xba170000}, {0xba172000}, {0xba174000}, {0xba176000}, {0xba178000}, {0xba17a000}, {0xba17c000}, {0xba17e000}, {0xba180000}, {0xba182000}, {0xba184000}, {0xba186000}, {0xba188000}, {0xba18a000}, {0xba18c000}, {0xba18e000}, {0xba190000}, {0xba192000}, {0xba194000}, {0xba196000}, {0xba198000}, {0xba19a000}, {0xba19c000}, {0xba19e000}, {0xba1a0000}, {0xba1a2000}, {0xba1a4000}, {0xba1a6000}, {0xba1a8000}, {0xba1aa000}, {0xba1ac000}, {0xba1ae000}, {0xba1b0000}, {0xba1b2000}, {0xba1b4000}, {0xba1b6000}, {0xba1b8000}, {0xba1ba000}, {0xba1bc000}, {0xba1be000}, {0xba1c0000}, {0xba1c2000}, {0xba1c4000}, {0xba1c6000}, {0xba1c8000}, {0xba1ca000}, {0xba1cc000}, {0xba1ce000}, {0xba1d0000}, {0xba1d2000}, {0xba1d4000}, {0xba1d6000}, {0xba1d8000}, {0xba1da000}, {0xba1dc000}, {0xba1de000}, {0xba1e0000}, {0xba1e2000}, {0xba1e4000}, {0xba1e6000}, {0xba1e8000}, {0xba1ea000}, {0xba1ec000}, {0xba1ee000}, {0xba1f0000}, {0xba1f2000}, {0xba1f4000}, {0xba1f6000}, {0xba1f8000}, {0xba1fa000}, {0xba1fc000}, {0xba1fe000}, {0xba200000}, {0xba202000}, {0xba204000}, {0xba206000}, {0xba208000}, {0xba20a000}, {0xba20c000}, {0xba20e000}, {0xba210000}, {0xba212000}, {0xba214000}, {0xba216000}, {0xba218000}, {0xba21a000}, {0xba21c000}, {0xba21e000}, {0xba220000}, {0xba222000}, {0xba224000}, {0xba226000}, {0xba228000}, {0xba22a000}, {0xba22c000}, {0xba22e000}, {0xba230000}, {0xba232000}, {0xba234000}, {0xba236000}, {0xba238000}, {0xba23a000}, {0xba23c000}, {0xba23e000}, {0xba240000}, {0xba242000}, {0xba244000}, {0xba246000}, {0xba248000}, {0xba24a000}, {0xba24c000}, {0xba24e000}, {0xba250000}, {0xba252000}, {0xba254000}, {0xba256000}, {0xba258000}, {0xba25a000}, {0xba25c000}, {0xba25e000}, {0xba260000}, {0xba262000}, {0xba264000}, {0xba266000}, {0xba268000}, {0xba26a000}, {0xba26c000}, {0xba26e000}, {0xba270000}, {0xba272000}, {0xba274000}, {0xba276000}, {0xba278000}, {0xba27a000}, {0xba27c000}, {0xba27e000}, {0xba280000}, {0xba282000}, {0xba284000}, {0xba286000}, {0xba288000}, {0xba28a000}, {0xba28c000}, {0xba28e000}, {0xba290000}, {0xba292000}, {0xba294000}, {0xba296000}, {0xba298000}, {0xba29a000}, {0xba29c000}, {0xba29e000}, {0xba2a0000}, {0xba2a2000}, {0xba2a4000}, {0xba2a6000}, {0xba2a8000}, {0xba2aa000}, {0xba2ac000}, {0xba2ae000}, {0xba2b0000}, {0xba2b2000}, {0xba2b4000}, {0xba2b6000}, {0xba2b8000}, {0xba2ba000}, {0xba2bc000}, {0xba2be000}, {0xba2c0000}, {0xba2c2000}, {0xba2c4000}, {0xba2c6000}, {0xba2c8000}, {0xba2ca000}, {0xba2cc000}, {0xba2ce000}, {0xba2d0000}, {0xba2d2000}, {0xba2d4000}, {0xba2d6000}, {0xba2d8000}, {0xba2da000}, {0xba2dc000}, {0xba2de000}, {0xba2e0000}, {0xba2e2000}, {0xba2e4000}, {0xba2e6000}, {0xba2e8000}, {0xba2ea000}, {0xba2ec000}, {0xba2ee000}, {0xba2f0000}, {0xba2f2000}, {0xba2f4000}, {0xba2f6000}, {0xba2f8000}, {0xba2fa000}, {0xba2fc000}, {0xba2fe000}, {0xba300000}, {0xba302000}, {0xba304000}, {0xba306000}, {0xba308000}, {0xba30a000}, {0xba30c000}, {0xba30e000}, {0xba310000}, {0xba312000}, {0xba314000}, {0xba316000}, {0xba318000}, {0xba31a000}, {0xba31c000}, {0xba31e000}, {0xba320000}, {0xba322000}, {0xba324000}, {0xba326000}, {0xba328000}, {0xba32a000}, {0xba32c000}, {0xba32e000}, {0xba330000}, {0xba332000}, {0xba334000}, {0xba336000}, {0xba338000}, {0xba33a000}, {0xba33c000}, {0xba33e000}, {0xba340000}, {0xba342000}, {0xba344000}, {0xba346000}, {0xba348000}, {0xba34a000}, {0xba34c000}, {0xba34e000}, {0xba350000}, {0xba352000}, {0xba354000}, {0xba356000}, {0xba358000}, {0xba35a000}, {0xba35c000}, {0xba35e000}, {0xba360000}, {0xba362000}, {0xba364000}, {0xba366000}, {0xba368000}, {0xba36a000}, {0xba36c000}, {0xba36e000}, {0xba370000}, {0xba372000}, {0xba374000}, {0xba376000}, {0xba378000}, {0xba37a000}, {0xba37c000}, {0xba37e000}, {0xba380000}, {0xba382000}, {0xba384000}, {0xba386000}, {0xba388000}, {0xba38a000}, {0xba38c000}, {0xba38e000}, {0xba390000}, {0xba392000}, {0xba394000}, {0xba396000}, {0xba398000}, {0xba39a000}, {0xba39c000}, {0xba39e000}, {0xba3a0000}, {0xba3a2000}, {0xba3a4000}, {0xba3a6000}, {0xba3a8000}, {0xba3aa000}, {0xba3ac000}, {0xba3ae000}, {0xba3b0000}, {0xba3b2000}, {0xba3b4000}, {0xba3b6000}, {0xba3b8000}, {0xba3ba000}, {0xba3bc000}, {0xba3be000}, {0xba3c0000}, {0xba3c2000}, {0xba3c4000}, {0xba3c6000}, {0xba3c8000}, {0xba3ca000}, {0xba3cc000}, {0xba3ce000}, {0xba3d0000}, {0xba3d2000}, {0xba3d4000}, {0xba3d6000}, {0xba3d8000}, {0xba3da000}, {0xba3dc000}, {0xba3de000}, {0xba3e0000}, {0xba3e2000}, {0xba3e4000}, {0xba3e6000}, {0xba3e8000}, {0xba3ea000}, {0xba3ec000}, {0xba3ee000}, {0xba3f0000}, {0xba3f2000}, {0xba3f4000}, {0xba3f6000}, {0xba3f8000}, {0xba3fa000}, {0xba3fc000}, {0xba3fe000}, {0xba400000}, {0xba402000}, {0xba404000}, {0xba406000}, {0xba408000}, {0xba40a000}, {0xba40c000}, {0xba40e000}, {0xba410000}, {0xba412000}, {0xba414000}, {0xba416000}, {0xba418000}, {0xba41a000}, {0xba41c000}, {0xba41e000}, {0xba420000}, {0xba422000}, {0xba424000}, {0xba426000}, {0xba428000}, {0xba42a000}, {0xba42c000}, {0xba42e000}, {0xba430000}, {0xba432000}, {0xba434000}, {0xba436000}, {0xba438000}, {0xba43a000}, {0xba43c000}, {0xba43e000}, {0xba440000}, {0xba442000}, {0xba444000}, {0xba446000}, {0xba448000}, {0xba44a000}, {0xba44c000}, {0xba44e000}, {0xba450000}, {0xba452000}, {0xba454000}, {0xba456000}, {0xba458000}, {0xba45a000}, {0xba45c000}, {0xba45e000}, {0xba460000}, {0xba462000}, {0xba464000}, {0xba466000}, {0xba468000}, {0xba46a000}, {0xba46c000}, {0xba46e000}, {0xba470000}, {0xba472000}, {0xba474000}, {0xba476000}, {0xba478000}, {0xba47a000}, {0xba47c000}, {0xba47e000}, {0xba480000}, {0xba482000}, {0xba484000}, {0xba486000}, {0xba488000}, {0xba48a000}, {0xba48c000}, {0xba48e000}, {0xba490000}, {0xba492000}, {0xba494000}, {0xba496000}, {0xba498000}, {0xba49a000}, {0xba49c000}, {0xba49e000}, {0xba4a0000}, {0xba4a2000}, {0xba4a4000}, {0xba4a6000}, {0xba4a8000}, {0xba4aa000}, {0xba4ac000}, {0xba4ae000}, {0xba4b0000}, {0xba4b2000}, {0xba4b4000}, {0xba4b6000}, {0xba4b8000}, {0xba4ba000}, {0xba4bc000}, {0xba4be000}, {0xba4c0000}, {0xba4c2000}, {0xba4c4000}, {0xba4c6000}, {0xba4c8000}, {0xba4ca000}, {0xba4cc000}, {0xba4ce000}, {0xba4d0000}, {0xba4d2000}, {0xba4d4000}, {0xba4d6000}, {0xba4d8000}, {0xba4da000}, {0xba4dc000}, {0xba4de000}, {0xba4e0000}, {0xba4e2000}, {0xba4e4000}, {0xba4e6000}, {0xba4e8000}, {0xba4ea000}, {0xba4ec000}, {0xba4ee000}, {0xba4f0000}, {0xba4f2000}, {0xba4f4000}, {0xba4f6000}, {0xba4f8000}, {0xba4fa000}, {0xba4fc000}, {0xba4fe000}, {0xba500000}, {0xba502000}, {0xba504000}, {0xba506000}, {0xba508000}, {0xba50a000}, {0xba50c000}, {0xba50e000}, {0xba510000}, {0xba512000}, {0xba514000}, {0xba516000}, {0xba518000}, {0xba51a000}, {0xba51c000}, {0xba51e000}, {0xba520000}, {0xba522000}, {0xba524000}, {0xba526000}, {0xba528000}, {0xba52a000}, {0xba52c000}, {0xba52e000}, {0xba530000}, {0xba532000}, {0xba534000}, {0xba536000}, {0xba538000}, {0xba53a000}, {0xba53c000}, {0xba53e000}, {0xba540000}, {0xba542000}, {0xba544000}, {0xba546000}, {0xba548000}, {0xba54a000}, {0xba54c000}, {0xba54e000}, {0xba550000}, {0xba552000}, {0xba554000}, {0xba556000}, {0xba558000}, {0xba55a000}, {0xba55c000}, {0xba55e000}, {0xba560000}, {0xba562000}, {0xba564000}, {0xba566000}, {0xba568000}, {0xba56a000}, {0xba56c000}, {0xba56e000}, {0xba570000}, {0xba572000}, {0xba574000}, {0xba576000}, {0xba578000}, {0xba57a000}, {0xba57c000}, {0xba57e000}, {0xba580000}, {0xba582000}, {0xba584000}, {0xba586000}, {0xba588000}, {0xba58a000}, {0xba58c000}, {0xba58e000}, {0xba590000}, {0xba592000}, {0xba594000}, {0xba596000}, {0xba598000}, {0xba59a000}, {0xba59c000}, {0xba59e000}, {0xba5a0000}, {0xba5a2000}, {0xba5a4000}, {0xba5a6000}, {0xba5a8000}, {0xba5aa000}, {0xba5ac000}, {0xba5ae000}, {0xba5b0000}, {0xba5b2000}, {0xba5b4000}, {0xba5b6000}, {0xba5b8000}, {0xba5ba000}, {0xba5bc000}, {0xba5be000}, {0xba5c0000}, {0xba5c2000}, {0xba5c4000}, {0xba5c6000}, {0xba5c8000}, {0xba5ca000}, {0xba5cc000}, {0xba5ce000}, {0xba5d0000}, {0xba5d2000}, {0xba5d4000}, {0xba5d6000}, {0xba5d8000}, {0xba5da000}, {0xba5dc000}, {0xba5de000}, {0xba5e0000}, {0xba5e2000}, {0xba5e4000}, {0xba5e6000}, {0xba5e8000}, {0xba5ea000}, {0xba5ec000}, {0xba5ee000}, {0xba5f0000}, {0xba5f2000}, {0xba5f4000}, {0xba5f6000}, {0xba5f8000}, {0xba5fa000}, {0xba5fc000}, {0xba5fe000}, {0xba600000}, {0xba602000}, {0xba604000}, {0xba606000}, {0xba608000}, {0xba60a000}, {0xba60c000}, {0xba60e000}, {0xba610000}, {0xba612000}, {0xba614000}, {0xba616000}, {0xba618000}, {0xba61a000}, {0xba61c000}, {0xba61e000}, {0xba620000}, {0xba622000}, {0xba624000}, {0xba626000}, {0xba628000}, {0xba62a000}, {0xba62c000}, {0xba62e000}, {0xba630000}, {0xba632000}, {0xba634000}, {0xba636000}, {0xba638000}, {0xba63a000}, {0xba63c000}, {0xba63e000}, {0xba640000}, {0xba642000}, {0xba644000}, {0xba646000}, {0xba648000}, {0xba64a000}, {0xba64c000}, {0xba64e000}, {0xba650000}, {0xba652000}, {0xba654000}, {0xba656000}, {0xba658000}, {0xba65a000}, {0xba65c000}, {0xba65e000}, {0xba660000}, {0xba662000}, {0xba664000}, {0xba666000}, {0xba668000}, {0xba66a000}, {0xba66c000}, {0xba66e000}, {0xba670000}, {0xba672000}, {0xba674000}, {0xba676000}, {0xba678000}, {0xba67a000}, {0xba67c000}, {0xba67e000}, {0xba680000}, {0xba682000}, {0xba684000}, {0xba686000}, {0xba688000}, {0xba68a000}, {0xba68c000}, {0xba68e000}, {0xba690000}, {0xba692000}, {0xba694000}, {0xba696000}, {0xba698000}, {0xba69a000}, {0xba69c000}, {0xba69e000}, {0xba6a0000}, {0xba6a2000}, {0xba6a4000}, {0xba6a6000}, {0xba6a8000}, {0xba6aa000}, {0xba6ac000}, {0xba6ae000}, {0xba6b0000}, {0xba6b2000}, {0xba6b4000}, {0xba6b6000}, {0xba6b8000}, {0xba6ba000}, {0xba6bc000}, {0xba6be000}, {0xba6c0000}, {0xba6c2000}, {0xba6c4000}, {0xba6c6000}, {0xba6c8000}, {0xba6ca000}, {0xba6cc000}, {0xba6ce000}, {0xba6d0000}, {0xba6d2000}, {0xba6d4000}, {0xba6d6000}, {0xba6d8000}, {0xba6da000}, {0xba6dc000}, {0xba6de000}, {0xba6e0000}, {0xba6e2000}, {0xba6e4000}, {0xba6e6000}, {0xba6e8000}, {0xba6ea000}, {0xba6ec000}, {0xba6ee000}, {0xba6f0000}, {0xba6f2000}, {0xba6f4000}, {0xba6f6000}, {0xba6f8000}, {0xba6fa000}, {0xba6fc000}, {0xba6fe000}, {0xba700000}, {0xba702000}, {0xba704000}, {0xba706000}, {0xba708000}, {0xba70a000}, {0xba70c000}, {0xba70e000}, {0xba710000}, {0xba712000}, {0xba714000}, {0xba716000}, {0xba718000}, {0xba71a000}, {0xba71c000}, {0xba71e000}, {0xba720000}, {0xba722000}, {0xba724000}, {0xba726000}, {0xba728000}, {0xba72a000}, {0xba72c000}, {0xba72e000}, {0xba730000}, {0xba732000}, {0xba734000}, {0xba736000}, {0xba738000}, {0xba73a000}, {0xba73c000}, {0xba73e000}, {0xba740000}, {0xba742000}, {0xba744000}, {0xba746000}, {0xba748000}, {0xba74a000}, {0xba74c000}, {0xba74e000}, {0xba750000}, {0xba752000}, {0xba754000}, {0xba756000}, {0xba758000}, {0xba75a000}, {0xba75c000}, {0xba75e000}, {0xba760000}, {0xba762000}, {0xba764000}, {0xba766000}, {0xba768000}, {0xba76a000}, {0xba76c000}, {0xba76e000}, {0xba770000}, {0xba772000}, {0xba774000}, {0xba776000}, {0xba778000}, {0xba77a000}, {0xba77c000}, {0xba77e000}, {0xba780000}, {0xba782000}, {0xba784000}, {0xba786000}, {0xba788000}, {0xba78a000}, {0xba78c000}, {0xba78e000}, {0xba790000}, {0xba792000}, {0xba794000}, {0xba796000}, {0xba798000}, {0xba79a000}, {0xba79c000}, {0xba79e000}, {0xba7a0000}, {0xba7a2000}, {0xba7a4000}, {0xba7a6000}, {0xba7a8000}, {0xba7aa000}, {0xba7ac000}, {0xba7ae000}, {0xba7b0000}, {0xba7b2000}, {0xba7b4000}, {0xba7b6000}, {0xba7b8000}, {0xba7ba000}, {0xba7bc000}, {0xba7be000}, {0xba7c0000}, {0xba7c2000}, {0xba7c4000}, {0xba7c6000}, {0xba7c8000}, {0xba7ca000}, {0xba7cc000}, {0xba7ce000}, {0xba7d0000}, {0xba7d2000}, {0xba7d4000}, {0xba7d6000}, {0xba7d8000}, {0xba7da000}, {0xba7dc000}, {0xba7de000}, {0xba7e0000}, {0xba7e2000}, {0xba7e4000}, {0xba7e6000}, {0xba7e8000}, {0xba7ea000}, {0xba7ec000}, {0xba7ee000}, {0xba7f0000}, {0xba7f2000}, {0xba7f4000}, {0xba7f6000}, {0xba7f8000}, {0xba7fa000}, {0xba7fc000}, {0xba7fe000}, {0xba800000}, {0xba802000}, {0xba804000}, {0xba806000}, {0xba808000}, {0xba80a000}, {0xba80c000}, {0xba80e000}, {0xba810000}, {0xba812000}, {0xba814000}, {0xba816000}, {0xba818000}, {0xba81a000}, {0xba81c000}, {0xba81e000}, {0xba820000}, {0xba822000}, {0xba824000}, {0xba826000}, {0xba828000}, {0xba82a000}, {0xba82c000}, {0xba82e000}, {0xba830000}, {0xba832000}, {0xba834000}, {0xba836000}, {0xba838000}, {0xba83a000}, {0xba83c000}, {0xba83e000}, {0xba840000}, {0xba842000}, {0xba844000}, {0xba846000}, {0xba848000}, {0xba84a000}, {0xba84c000}, {0xba84e000}, {0xba850000}, {0xba852000}, {0xba854000}, {0xba856000}, {0xba858000}, {0xba85a000}, {0xba85c000}, {0xba85e000}, {0xba860000}, {0xba862000}, {0xba864000}, {0xba866000}, {0xba868000}, {0xba86a000}, {0xba86c000}, {0xba86e000}, {0xba870000}, {0xba872000}, {0xba874000}, {0xba876000}, {0xba878000}, {0xba87a000}, {0xba87c000}, {0xba87e000}, {0xba880000}, {0xba882000}, {0xba884000}, {0xba886000}, {0xba888000}, {0xba88a000}, {0xba88c000}, {0xba88e000}, {0xba890000}, {0xba892000}, {0xba894000}, {0xba896000}, {0xba898000}, {0xba89a000}, {0xba89c000}, {0xba89e000}, {0xba8a0000}, {0xba8a2000}, {0xba8a4000}, {0xba8a6000}, {0xba8a8000}, {0xba8aa000}, {0xba8ac000}, {0xba8ae000}, {0xba8b0000}, {0xba8b2000}, {0xba8b4000}, {0xba8b6000}, {0xba8b8000}, {0xba8ba000}, {0xba8bc000}, {0xba8be000}, {0xba8c0000}, {0xba8c2000}, {0xba8c4000}, {0xba8c6000}, {0xba8c8000}, {0xba8ca000}, {0xba8cc000}, {0xba8ce000}, {0xba8d0000}, {0xba8d2000}, {0xba8d4000}, {0xba8d6000}, {0xba8d8000}, {0xba8da000}, {0xba8dc000}, {0xba8de000}, {0xba8e0000}, {0xba8e2000}, {0xba8e4000}, {0xba8e6000}, {0xba8e8000}, {0xba8ea000}, {0xba8ec000}, {0xba8ee000}, {0xba8f0000}, {0xba8f2000}, {0xba8f4000}, {0xba8f6000}, {0xba8f8000}, {0xba8fa000}, {0xba8fc000}, {0xba8fe000}, {0xba900000}, {0xba902000}, {0xba904000}, {0xba906000}, {0xba908000}, {0xba90a000}, {0xba90c000}, {0xba90e000}, {0xba910000}, {0xba912000}, {0xba914000}, {0xba916000}, {0xba918000}, {0xba91a000}, {0xba91c000}, {0xba91e000}, {0xba920000}, {0xba922000}, {0xba924000}, {0xba926000}, {0xba928000}, {0xba92a000}, {0xba92c000}, {0xba92e000}, {0xba930000}, {0xba932000}, {0xba934000}, {0xba936000}, {0xba938000}, {0xba93a000}, {0xba93c000}, {0xba93e000}, {0xba940000}, {0xba942000}, {0xba944000}, {0xba946000}, {0xba948000}, {0xba94a000}, {0xba94c000}, {0xba94e000}, {0xba950000}, {0xba952000}, {0xba954000}, {0xba956000}, {0xba958000}, {0xba95a000}, {0xba95c000}, {0xba95e000}, {0xba960000}, {0xba962000}, {0xba964000}, {0xba966000}, {0xba968000}, {0xba96a000}, {0xba96c000}, {0xba96e000}, {0xba970000}, {0xba972000}, {0xba974000}, {0xba976000}, {0xba978000}, {0xba97a000}, {0xba97c000}, {0xba97e000}, {0xba980000}, {0xba982000}, {0xba984000}, {0xba986000}, {0xba988000}, {0xba98a000}, {0xba98c000}, {0xba98e000}, {0xba990000}, {0xba992000}, {0xba994000}, {0xba996000}, {0xba998000}, {0xba99a000}, {0xba99c000}, {0xba99e000}, {0xba9a0000}, {0xba9a2000}, {0xba9a4000}, {0xba9a6000}, {0xba9a8000}, {0xba9aa000}, {0xba9ac000}, {0xba9ae000}, {0xba9b0000}, {0xba9b2000}, {0xba9b4000}, {0xba9b6000}, {0xba9b8000}, {0xba9ba000}, {0xba9bc000}, {0xba9be000}, {0xba9c0000}, {0xba9c2000}, {0xba9c4000}, {0xba9c6000}, {0xba9c8000}, {0xba9ca000}, {0xba9cc000}, {0xba9ce000}, {0xba9d0000}, {0xba9d2000}, {0xba9d4000}, {0xba9d6000}, {0xba9d8000}, {0xba9da000}, {0xba9dc000}, {0xba9de000}, {0xba9e0000}, {0xba9e2000}, {0xba9e4000}, {0xba9e6000}, {0xba9e8000}, {0xba9ea000}, {0xba9ec000}, {0xba9ee000}, {0xba9f0000}, {0xba9f2000}, {0xba9f4000}, {0xba9f6000}, {0xba9f8000}, {0xba9fa000}, {0xba9fc000}, {0xba9fe000}, {0xbaa00000}, {0xbaa02000}, {0xbaa04000}, {0xbaa06000}, {0xbaa08000}, {0xbaa0a000}, {0xbaa0c000}, {0xbaa0e000}, {0xbaa10000}, {0xbaa12000}, {0xbaa14000}, {0xbaa16000}, {0xbaa18000}, {0xbaa1a000}, {0xbaa1c000}, {0xbaa1e000}, {0xbaa20000}, {0xbaa22000}, {0xbaa24000}, {0xbaa26000}, {0xbaa28000}, {0xbaa2a000}, {0xbaa2c000}, {0xbaa2e000}, {0xbaa30000}, {0xbaa32000}, {0xbaa34000}, {0xbaa36000}, {0xbaa38000}, {0xbaa3a000}, {0xbaa3c000}, {0xbaa3e000}, {0xbaa40000}, {0xbaa42000}, {0xbaa44000}, {0xbaa46000}, {0xbaa48000}, {0xbaa4a000}, {0xbaa4c000}, {0xbaa4e000}, {0xbaa50000}, {0xbaa52000}, {0xbaa54000}, {0xbaa56000}, {0xbaa58000}, {0xbaa5a000}, {0xbaa5c000}, {0xbaa5e000}, {0xbaa60000}, {0xbaa62000}, {0xbaa64000}, {0xbaa66000}, {0xbaa68000}, {0xbaa6a000}, {0xbaa6c000}, {0xbaa6e000}, {0xbaa70000}, {0xbaa72000}, {0xbaa74000}, {0xbaa76000}, {0xbaa78000}, {0xbaa7a000}, {0xbaa7c000}, {0xbaa7e000}, {0xbaa80000}, {0xbaa82000}, {0xbaa84000}, {0xbaa86000}, {0xbaa88000}, {0xbaa8a000}, {0xbaa8c000}, {0xbaa8e000}, {0xbaa90000}, {0xbaa92000}, {0xbaa94000}, {0xbaa96000}, {0xbaa98000}, {0xbaa9a000}, {0xbaa9c000}, {0xbaa9e000}, {0xbaaa0000}, {0xbaaa2000}, {0xbaaa4000}, {0xbaaa6000}, {0xbaaa8000}, {0xbaaaa000}, {0xbaaac000}, {0xbaaae000}, {0xbaab0000}, {0xbaab2000}, {0xbaab4000}, {0xbaab6000}, {0xbaab8000}, {0xbaaba000}, {0xbaabc000}, {0xbaabe000}, {0xbaac0000}, {0xbaac2000}, {0xbaac4000}, {0xbaac6000}, {0xbaac8000}, {0xbaaca000}, {0xbaacc000}, {0xbaace000}, {0xbaad0000}, {0xbaad2000}, {0xbaad4000}, {0xbaad6000}, {0xbaad8000}, {0xbaada000}, {0xbaadc000}, {0xbaade000}, {0xbaae0000}, {0xbaae2000}, {0xbaae4000}, {0xbaae6000}, {0xbaae8000}, {0xbaaea000}, {0xbaaec000}, {0xbaaee000}, {0xbaaf0000}, {0xbaaf2000}, {0xbaaf4000}, {0xbaaf6000}, {0xbaaf8000}, {0xbaafa000}, {0xbaafc000}, {0xbaafe000}, {0xbab00000}, {0xbab02000}, {0xbab04000}, {0xbab06000}, {0xbab08000}, {0xbab0a000}, {0xbab0c000}, {0xbab0e000}, {0xbab10000}, {0xbab12000}, {0xbab14000}, {0xbab16000}, {0xbab18000}, {0xbab1a000}, {0xbab1c000}, {0xbab1e000}, {0xbab20000}, {0xbab22000}, {0xbab24000}, {0xbab26000}, {0xbab28000}, {0xbab2a000}, {0xbab2c000}, {0xbab2e000}, {0xbab30000}, {0xbab32000}, {0xbab34000}, {0xbab36000}, {0xbab38000}, {0xbab3a000}, {0xbab3c000}, {0xbab3e000}, {0xbab40000}, {0xbab42000}, {0xbab44000}, {0xbab46000}, {0xbab48000}, {0xbab4a000}, {0xbab4c000}, {0xbab4e000}, {0xbab50000}, {0xbab52000}, {0xbab54000}, {0xbab56000}, {0xbab58000}, {0xbab5a000}, {0xbab5c000}, {0xbab5e000}, {0xbab60000}, {0xbab62000}, {0xbab64000}, {0xbab66000}, {0xbab68000}, {0xbab6a000}, {0xbab6c000}, {0xbab6e000}, {0xbab70000}, {0xbab72000}, {0xbab74000}, {0xbab76000}, {0xbab78000}, {0xbab7a000}, {0xbab7c000}, {0xbab7e000}, {0xbab80000}, {0xbab82000}, {0xbab84000}, {0xbab86000}, {0xbab88000}, {0xbab8a000}, {0xbab8c000}, {0xbab8e000}, {0xbab90000}, {0xbab92000}, {0xbab94000}, {0xbab96000}, {0xbab98000}, {0xbab9a000}, {0xbab9c000}, {0xbab9e000}, {0xbaba0000}, {0xbaba2000}, {0xbaba4000}, {0xbaba6000}, {0xbaba8000}, {0xbabaa000}, {0xbabac000}, {0xbabae000}, {0xbabb0000}, {0xbabb2000}, {0xbabb4000}, {0xbabb6000}, {0xbabb8000}, {0xbabba000}, {0xbabbc000}, {0xbabbe000}, {0xbabc0000}, {0xbabc2000}, {0xbabc4000}, {0xbabc6000}, {0xbabc8000}, {0xbabca000}, {0xbabcc000}, {0xbabce000}, {0xbabd0000}, {0xbabd2000}, {0xbabd4000}, {0xbabd6000}, {0xbabd8000}, {0xbabda000}, {0xbabdc000}, {0xbabde000}, {0xbabe0000}, {0xbabe2000}, {0xbabe4000}, {0xbabe6000}, {0xbabe8000}, {0xbabea000}, {0xbabec000}, {0xbabee000}, {0xbabf0000}, {0xbabf2000}, {0xbabf4000}, {0xbabf6000}, {0xbabf8000}, {0xbabfa000}, {0xbabfc000}, {0xbabfe000}, {0xbac00000}, {0xbac02000}, {0xbac04000}, {0xbac06000}, {0xbac08000}, {0xbac0a000}, {0xbac0c000}, {0xbac0e000}, {0xbac10000}, {0xbac12000}, {0xbac14000}, {0xbac16000}, {0xbac18000}, {0xbac1a000}, {0xbac1c000}, {0xbac1e000}, {0xbac20000}, {0xbac22000}, {0xbac24000}, {0xbac26000}, {0xbac28000}, {0xbac2a000}, {0xbac2c000}, {0xbac2e000}, {0xbac30000}, {0xbac32000}, {0xbac34000}, {0xbac36000}, {0xbac38000}, {0xbac3a000}, {0xbac3c000}, {0xbac3e000}, {0xbac40000}, {0xbac42000}, {0xbac44000}, {0xbac46000}, {0xbac48000}, {0xbac4a000}, {0xbac4c000}, {0xbac4e000}, {0xbac50000}, {0xbac52000}, {0xbac54000}, {0xbac56000}, {0xbac58000}, {0xbac5a000}, {0xbac5c000}, {0xbac5e000}, {0xbac60000}, {0xbac62000}, {0xbac64000}, {0xbac66000}, {0xbac68000}, {0xbac6a000}, {0xbac6c000}, {0xbac6e000}, {0xbac70000}, {0xbac72000}, {0xbac74000}, {0xbac76000}, {0xbac78000}, {0xbac7a000}, {0xbac7c000}, {0xbac7e000}, {0xbac80000}, {0xbac82000}, {0xbac84000}, {0xbac86000}, {0xbac88000}, {0xbac8a000}, {0xbac8c000}, {0xbac8e000}, {0xbac90000}, {0xbac92000}, {0xbac94000}, {0xbac96000}, {0xbac98000}, {0xbac9a000}, {0xbac9c000}, {0xbac9e000}, {0xbaca0000}, {0xbaca2000}, {0xbaca4000}, {0xbaca6000}, {0xbaca8000}, {0xbacaa000}, {0xbacac000}, {0xbacae000}, {0xbacb0000}, {0xbacb2000}, {0xbacb4000}, {0xbacb6000}, {0xbacb8000}, {0xbacba000}, {0xbacbc000}, {0xbacbe000}, {0xbacc0000}, {0xbacc2000}, {0xbacc4000}, {0xbacc6000}, {0xbacc8000}, {0xbacca000}, {0xbaccc000}, {0xbacce000}, {0xbacd0000}, {0xbacd2000}, {0xbacd4000}, {0xbacd6000}, {0xbacd8000}, {0xbacda000}, {0xbacdc000}, {0xbacde000}, {0xbace0000}, {0xbace2000}, {0xbace4000}, {0xbace6000}, {0xbace8000}, {0xbacea000}, {0xbacec000}, {0xbacee000}, {0xbacf0000}, {0xbacf2000}, {0xbacf4000}, {0xbacf6000}, {0xbacf8000}, {0xbacfa000}, {0xbacfc000}, {0xbacfe000}, {0xbad00000}, {0xbad02000}, {0xbad04000}, {0xbad06000}, {0xbad08000}, {0xbad0a000}, {0xbad0c000}, {0xbad0e000}, {0xbad10000}, {0xbad12000}, {0xbad14000}, {0xbad16000}, {0xbad18000}, {0xbad1a000}, {0xbad1c000}, {0xbad1e000}, {0xbad20000}, {0xbad22000}, {0xbad24000}, {0xbad26000}, {0xbad28000}, {0xbad2a000}, {0xbad2c000}, {0xbad2e000}, {0xbad30000}, {0xbad32000}, {0xbad34000}, {0xbad36000}, {0xbad38000}, {0xbad3a000}, {0xbad3c000}, {0xbad3e000}, {0xbad40000}, {0xbad42000}, {0xbad44000}, {0xbad46000}, {0xbad48000}, {0xbad4a000}, {0xbad4c000}, {0xbad4e000}, {0xbad50000}, {0xbad52000}, {0xbad54000}, {0xbad56000}, {0xbad58000}, {0xbad5a000}, {0xbad5c000}, {0xbad5e000}, {0xbad60000}, {0xbad62000}, {0xbad64000}, {0xbad66000}, {0xbad68000}, {0xbad6a000}, {0xbad6c000}, {0xbad6e000}, {0xbad70000}, {0xbad72000}, {0xbad74000}, {0xbad76000}, {0xbad78000}, {0xbad7a000}, {0xbad7c000}, {0xbad7e000}, {0xbad80000}, {0xbad82000}, {0xbad84000}, {0xbad86000}, {0xbad88000}, {0xbad8a000}, {0xbad8c000}, {0xbad8e000}, {0xbad90000}, {0xbad92000}, {0xbad94000}, {0xbad96000}, {0xbad98000}, {0xbad9a000}, {0xbad9c000}, {0xbad9e000}, {0xbada0000}, {0xbada2000}, {0xbada4000}, {0xbada6000}, {0xbada8000}, {0xbadaa000}, {0xbadac000}, {0xbadae000}, {0xbadb0000}, {0xbadb2000}, {0xbadb4000}, {0xbadb6000}, {0xbadb8000}, {0xbadba000}, {0xbadbc000}, {0xbadbe000}, {0xbadc0000}, {0xbadc2000}, {0xbadc4000}, {0xbadc6000}, {0xbadc8000}, {0xbadca000}, {0xbadcc000}, {0xbadce000}, {0xbadd0000}, {0xbadd2000}, {0xbadd4000}, {0xbadd6000}, {0xbadd8000}, {0xbadda000}, {0xbaddc000}, {0xbadde000}, {0xbade0000}, {0xbade2000}, {0xbade4000}, {0xbade6000}, {0xbade8000}, {0xbadea000}, {0xbadec000}, {0xbadee000}, {0xbadf0000}, {0xbadf2000}, {0xbadf4000}, {0xbadf6000}, {0xbadf8000}, {0xbadfa000}, {0xbadfc000}, {0xbadfe000}, {0xbae00000}, {0xbae02000}, {0xbae04000}, {0xbae06000}, {0xbae08000}, {0xbae0a000}, {0xbae0c000}, {0xbae0e000}, {0xbae10000}, {0xbae12000}, {0xbae14000}, {0xbae16000}, {0xbae18000}, {0xbae1a000}, {0xbae1c000}, {0xbae1e000}, {0xbae20000}, {0xbae22000}, {0xbae24000}, {0xbae26000}, {0xbae28000}, {0xbae2a000}, {0xbae2c000}, {0xbae2e000}, {0xbae30000}, {0xbae32000}, {0xbae34000}, {0xbae36000}, {0xbae38000}, {0xbae3a000}, {0xbae3c000}, {0xbae3e000}, {0xbae40000}, {0xbae42000}, {0xbae44000}, {0xbae46000}, {0xbae48000}, {0xbae4a000}, {0xbae4c000}, {0xbae4e000}, {0xbae50000}, {0xbae52000}, {0xbae54000}, {0xbae56000}, {0xbae58000}, {0xbae5a000}, {0xbae5c000}, {0xbae5e000}, {0xbae60000}, {0xbae62000}, {0xbae64000}, {0xbae66000}, {0xbae68000}, {0xbae6a000}, {0xbae6c000}, {0xbae6e000}, {0xbae70000}, {0xbae72000}, {0xbae74000}, {0xbae76000}, {0xbae78000}, {0xbae7a000}, {0xbae7c000}, {0xbae7e000}, {0xbae80000}, {0xbae82000}, {0xbae84000}, {0xbae86000}, {0xbae88000}, {0xbae8a000}, {0xbae8c000}, {0xbae8e000}, {0xbae90000}, {0xbae92000}, {0xbae94000}, {0xbae96000}, {0xbae98000}, {0xbae9a000}, {0xbae9c000}, {0xbae9e000}, {0xbaea0000}, {0xbaea2000}, {0xbaea4000}, {0xbaea6000}, {0xbaea8000}, {0xbaeaa000}, {0xbaeac000}, {0xbaeae000}, {0xbaeb0000}, {0xbaeb2000}, {0xbaeb4000}, {0xbaeb6000}, {0xbaeb8000}, {0xbaeba000}, {0xbaebc000}, {0xbaebe000}, {0xbaec0000}, {0xbaec2000}, {0xbaec4000}, {0xbaec6000}, {0xbaec8000}, {0xbaeca000}, {0xbaecc000}, {0xbaece000}, {0xbaed0000}, {0xbaed2000}, {0xbaed4000}, {0xbaed6000}, {0xbaed8000}, {0xbaeda000}, {0xbaedc000}, {0xbaede000}, {0xbaee0000}, {0xbaee2000}, {0xbaee4000}, {0xbaee6000}, {0xbaee8000}, {0xbaeea000}, {0xbaeec000}, {0xbaeee000}, {0xbaef0000}, {0xbaef2000}, {0xbaef4000}, {0xbaef6000}, {0xbaef8000}, {0xbaefa000}, {0xbaefc000}, {0xbaefe000}, {0xbaf00000}, {0xbaf02000}, {0xbaf04000}, {0xbaf06000}, {0xbaf08000}, {0xbaf0a000}, {0xbaf0c000}, {0xbaf0e000}, {0xbaf10000}, {0xbaf12000}, {0xbaf14000}, {0xbaf16000}, {0xbaf18000}, {0xbaf1a000}, {0xbaf1c000}, {0xbaf1e000}, {0xbaf20000}, {0xbaf22000}, {0xbaf24000}, {0xbaf26000}, {0xbaf28000}, {0xbaf2a000}, {0xbaf2c000}, {0xbaf2e000}, {0xbaf30000}, {0xbaf32000}, {0xbaf34000}, {0xbaf36000}, {0xbaf38000}, {0xbaf3a000}, {0xbaf3c000}, {0xbaf3e000}, {0xbaf40000}, {0xbaf42000}, {0xbaf44000}, {0xbaf46000}, {0xbaf48000}, {0xbaf4a000}, {0xbaf4c000}, {0xbaf4e000}, {0xbaf50000}, {0xbaf52000}, {0xbaf54000}, {0xbaf56000}, {0xbaf58000}, {0xbaf5a000}, {0xbaf5c000}, {0xbaf5e000}, {0xbaf60000}, {0xbaf62000}, {0xbaf64000}, {0xbaf66000}, {0xbaf68000}, {0xbaf6a000}, {0xbaf6c000}, {0xbaf6e000}, {0xbaf70000}, {0xbaf72000}, {0xbaf74000}, {0xbaf76000}, {0xbaf78000}, {0xbaf7a000}, {0xbaf7c000}, {0xbaf7e000}, {0xbaf80000}, {0xbaf82000}, {0xbaf84000}, {0xbaf86000}, {0xbaf88000}, {0xbaf8a000}, {0xbaf8c000}, {0xbaf8e000}, {0xbaf90000}, {0xbaf92000}, {0xbaf94000}, {0xbaf96000}, {0xbaf98000}, {0xbaf9a000}, {0xbaf9c000}, {0xbaf9e000}, {0xbafa0000}, {0xbafa2000}, {0xbafa4000}, {0xbafa6000}, {0xbafa8000}, {0xbafaa000}, {0xbafac000}, {0xbafae000}, {0xbafb0000}, {0xbafb2000}, {0xbafb4000}, {0xbafb6000}, {0xbafb8000}, {0xbafba000}, {0xbafbc000}, {0xbafbe000}, {0xbafc0000}, {0xbafc2000}, {0xbafc4000}, {0xbafc6000}, {0xbafc8000}, {0xbafca000}, {0xbafcc000}, {0xbafce000}, {0xbafd0000}, {0xbafd2000}, {0xbafd4000}, {0xbafd6000}, {0xbafd8000}, {0xbafda000}, {0xbafdc000}, {0xbafde000}, {0xbafe0000}, {0xbafe2000}, {0xbafe4000}, {0xbafe6000}, {0xbafe8000}, {0xbafea000}, {0xbafec000}, {0xbafee000}, {0xbaff0000}, {0xbaff2000}, {0xbaff4000}, {0xbaff6000}, {0xbaff8000}, {0xbaffa000}, {0xbaffc000}, {0xbaffe000}, {0xbb000000}, {0xbb002000}, {0xbb004000}, {0xbb006000}, {0xbb008000}, {0xbb00a000}, {0xbb00c000}, {0xbb00e000}, {0xbb010000}, {0xbb012000}, {0xbb014000}, {0xbb016000}, {0xbb018000}, {0xbb01a000}, {0xbb01c000}, {0xbb01e000}, {0xbb020000}, {0xbb022000}, {0xbb024000}, {0xbb026000}, {0xbb028000}, {0xbb02a000}, {0xbb02c000}, {0xbb02e000}, {0xbb030000}, {0xbb032000}, {0xbb034000}, {0xbb036000}, {0xbb038000}, {0xbb03a000}, {0xbb03c000}, {0xbb03e000}, {0xbb040000}, {0xbb042000}, {0xbb044000}, {0xbb046000}, {0xbb048000}, {0xbb04a000}, {0xbb04c000}, {0xbb04e000}, {0xbb050000}, {0xbb052000}, {0xbb054000}, {0xbb056000}, {0xbb058000}, {0xbb05a000}, {0xbb05c000}, {0xbb05e000}, {0xbb060000}, {0xbb062000}, {0xbb064000}, {0xbb066000}, {0xbb068000}, {0xbb06a000}, {0xbb06c000}, {0xbb06e000}, {0xbb070000}, {0xbb072000}, {0xbb074000}, {0xbb076000}, {0xbb078000}, {0xbb07a000}, {0xbb07c000}, {0xbb07e000}, {0xbb080000}, {0xbb082000}, {0xbb084000}, {0xbb086000}, {0xbb088000}, {0xbb08a000}, {0xbb08c000}, {0xbb08e000}, {0xbb090000}, {0xbb092000}, {0xbb094000}, {0xbb096000}, {0xbb098000}, {0xbb09a000}, {0xbb09c000}, {0xbb09e000}, {0xbb0a0000}, {0xbb0a2000}, {0xbb0a4000}, {0xbb0a6000}, {0xbb0a8000}, {0xbb0aa000}, {0xbb0ac000}, {0xbb0ae000}, {0xbb0b0000}, {0xbb0b2000}, {0xbb0b4000}, {0xbb0b6000}, {0xbb0b8000}, {0xbb0ba000}, {0xbb0bc000}, {0xbb0be000}, {0xbb0c0000}, {0xbb0c2000}, {0xbb0c4000}, {0xbb0c6000}, {0xbb0c8000}, {0xbb0ca000}, {0xbb0cc000}, {0xbb0ce000}, {0xbb0d0000}, {0xbb0d2000}, {0xbb0d4000}, {0xbb0d6000}, {0xbb0d8000}, {0xbb0da000}, {0xbb0dc000}, {0xbb0de000}, {0xbb0e0000}, {0xbb0e2000}, {0xbb0e4000}, {0xbb0e6000}, {0xbb0e8000}, {0xbb0ea000}, {0xbb0ec000}, {0xbb0ee000}, {0xbb0f0000}, {0xbb0f2000}, {0xbb0f4000}, {0xbb0f6000}, {0xbb0f8000}, {0xbb0fa000}, {0xbb0fc000}, {0xbb0fe000}, {0xbb100000}, {0xbb102000}, {0xbb104000}, {0xbb106000}, {0xbb108000}, {0xbb10a000}, {0xbb10c000}, {0xbb10e000}, {0xbb110000}, {0xbb112000}, {0xbb114000}, {0xbb116000}, {0xbb118000}, {0xbb11a000}, {0xbb11c000}, {0xbb11e000}, {0xbb120000}, {0xbb122000}, {0xbb124000}, {0xbb126000}, {0xbb128000}, {0xbb12a000}, {0xbb12c000}, {0xbb12e000}, {0xbb130000}, {0xbb132000}, {0xbb134000}, {0xbb136000}, {0xbb138000}, {0xbb13a000}, {0xbb13c000}, {0xbb13e000}, {0xbb140000}, {0xbb142000}, {0xbb144000}, {0xbb146000}, {0xbb148000}, {0xbb14a000}, {0xbb14c000}, {0xbb14e000}, {0xbb150000}, {0xbb152000}, {0xbb154000}, {0xbb156000}, {0xbb158000}, {0xbb15a000}, {0xbb15c000}, {0xbb15e000}, {0xbb160000}, {0xbb162000}, {0xbb164000}, {0xbb166000}, {0xbb168000}, {0xbb16a000}, {0xbb16c000}, {0xbb16e000}, {0xbb170000}, {0xbb172000}, {0xbb174000}, {0xbb176000}, {0xbb178000}, {0xbb17a000}, {0xbb17c000}, {0xbb17e000}, {0xbb180000}, {0xbb182000}, {0xbb184000}, {0xbb186000}, {0xbb188000}, {0xbb18a000}, {0xbb18c000}, {0xbb18e000}, {0xbb190000}, {0xbb192000}, {0xbb194000}, {0xbb196000}, {0xbb198000}, {0xbb19a000}, {0xbb19c000}, {0xbb19e000}, {0xbb1a0000}, {0xbb1a2000}, {0xbb1a4000}, {0xbb1a6000}, {0xbb1a8000}, {0xbb1aa000}, {0xbb1ac000}, {0xbb1ae000}, {0xbb1b0000}, {0xbb1b2000}, {0xbb1b4000}, {0xbb1b6000}, {0xbb1b8000}, {0xbb1ba000}, {0xbb1bc000}, {0xbb1be000}, {0xbb1c0000}, {0xbb1c2000}, {0xbb1c4000}, {0xbb1c6000}, {0xbb1c8000}, {0xbb1ca000}, {0xbb1cc000}, {0xbb1ce000}, {0xbb1d0000}, {0xbb1d2000}, {0xbb1d4000}, {0xbb1d6000}, {0xbb1d8000}, {0xbb1da000}, {0xbb1dc000}, {0xbb1de000}, {0xbb1e0000}, {0xbb1e2000}, {0xbb1e4000}, {0xbb1e6000}, {0xbb1e8000}, {0xbb1ea000}, {0xbb1ec000}, {0xbb1ee000}, {0xbb1f0000}, {0xbb1f2000}, {0xbb1f4000}, {0xbb1f6000}, {0xbb1f8000}, {0xbb1fa000}, {0xbb1fc000}, {0xbb1fe000}, {0xbb200000}, {0xbb202000}, {0xbb204000}, {0xbb206000}, {0xbb208000}, {0xbb20a000}, {0xbb20c000}, {0xbb20e000}, {0xbb210000}, {0xbb212000}, {0xbb214000}, {0xbb216000}, {0xbb218000}, {0xbb21a000}, {0xbb21c000}, {0xbb21e000}, {0xbb220000}, {0xbb222000}, {0xbb224000}, {0xbb226000}, {0xbb228000}, {0xbb22a000}, {0xbb22c000}, {0xbb22e000}, {0xbb230000}, {0xbb232000}, {0xbb234000}, {0xbb236000}, {0xbb238000}, {0xbb23a000}, {0xbb23c000}, {0xbb23e000}, {0xbb240000}, {0xbb242000}, {0xbb244000}, {0xbb246000}, {0xbb248000}, {0xbb24a000}, {0xbb24c000}, {0xbb24e000}, {0xbb250000}, {0xbb252000}, {0xbb254000}, {0xbb256000}, {0xbb258000}, {0xbb25a000}, {0xbb25c000}, {0xbb25e000}, {0xbb260000}, {0xbb262000}, {0xbb264000}, {0xbb266000}, {0xbb268000}, {0xbb26a000}, {0xbb26c000}, {0xbb26e000}, {0xbb270000}, {0xbb272000}, {0xbb274000}, {0xbb276000}, {0xbb278000}, {0xbb27a000}, {0xbb27c000}, {0xbb27e000}, {0xbb280000}, {0xbb282000}, {0xbb284000}, {0xbb286000}, {0xbb288000}, {0xbb28a000}, {0xbb28c000}, {0xbb28e000}, {0xbb290000}, {0xbb292000}, {0xbb294000}, {0xbb296000}, {0xbb298000}, {0xbb29a000}, {0xbb29c000}, {0xbb29e000}, {0xbb2a0000}, {0xbb2a2000}, {0xbb2a4000}, {0xbb2a6000}, {0xbb2a8000}, {0xbb2aa000}, {0xbb2ac000}, {0xbb2ae000}, {0xbb2b0000}, {0xbb2b2000}, {0xbb2b4000}, {0xbb2b6000}, {0xbb2b8000}, {0xbb2ba000}, {0xbb2bc000}, {0xbb2be000}, {0xbb2c0000}, {0xbb2c2000}, {0xbb2c4000}, {0xbb2c6000}, {0xbb2c8000}, {0xbb2ca000}, {0xbb2cc000}, {0xbb2ce000}, {0xbb2d0000}, {0xbb2d2000}, {0xbb2d4000}, {0xbb2d6000}, {0xbb2d8000}, {0xbb2da000}, {0xbb2dc000}, {0xbb2de000}, {0xbb2e0000}, {0xbb2e2000}, {0xbb2e4000}, {0xbb2e6000}, {0xbb2e8000}, {0xbb2ea000}, {0xbb2ec000}, {0xbb2ee000}, {0xbb2f0000}, {0xbb2f2000}, {0xbb2f4000}, {0xbb2f6000}, {0xbb2f8000}, {0xbb2fa000}, {0xbb2fc000}, {0xbb2fe000}, {0xbb300000}, {0xbb302000}, {0xbb304000}, {0xbb306000}, {0xbb308000}, {0xbb30a000}, {0xbb30c000}, {0xbb30e000}, {0xbb310000}, {0xbb312000}, {0xbb314000}, {0xbb316000}, {0xbb318000}, {0xbb31a000}, {0xbb31c000}, {0xbb31e000}, {0xbb320000}, {0xbb322000}, {0xbb324000}, {0xbb326000}, {0xbb328000}, {0xbb32a000}, {0xbb32c000}, {0xbb32e000}, {0xbb330000}, {0xbb332000}, {0xbb334000}, {0xbb336000}, {0xbb338000}, {0xbb33a000}, {0xbb33c000}, {0xbb33e000}, {0xbb340000}, {0xbb342000}, {0xbb344000}, {0xbb346000}, {0xbb348000}, {0xbb34a000}, {0xbb34c000}, {0xbb34e000}, {0xbb350000}, {0xbb352000}, {0xbb354000}, {0xbb356000}, {0xbb358000}, {0xbb35a000}, {0xbb35c000}, {0xbb35e000}, {0xbb360000}, {0xbb362000}, {0xbb364000}, {0xbb366000}, {0xbb368000}, {0xbb36a000}, {0xbb36c000}, {0xbb36e000}, {0xbb370000}, {0xbb372000}, {0xbb374000}, {0xbb376000}, {0xbb378000}, {0xbb37a000}, {0xbb37c000}, {0xbb37e000}, {0xbb380000}, {0xbb382000}, {0xbb384000}, {0xbb386000}, {0xbb388000}, {0xbb38a000}, {0xbb38c000}, {0xbb38e000}, {0xbb390000}, {0xbb392000}, {0xbb394000}, {0xbb396000}, {0xbb398000}, {0xbb39a000}, {0xbb39c000}, {0xbb39e000}, {0xbb3a0000}, {0xbb3a2000}, {0xbb3a4000}, {0xbb3a6000}, {0xbb3a8000}, {0xbb3aa000}, {0xbb3ac000}, {0xbb3ae000}, {0xbb3b0000}, {0xbb3b2000}, {0xbb3b4000}, {0xbb3b6000}, {0xbb3b8000}, {0xbb3ba000}, {0xbb3bc000}, {0xbb3be000}, {0xbb3c0000}, {0xbb3c2000}, {0xbb3c4000}, {0xbb3c6000}, {0xbb3c8000}, {0xbb3ca000}, {0xbb3cc000}, {0xbb3ce000}, {0xbb3d0000}, {0xbb3d2000}, {0xbb3d4000}, {0xbb3d6000}, {0xbb3d8000}, {0xbb3da000}, {0xbb3dc000}, {0xbb3de000}, {0xbb3e0000}, {0xbb3e2000}, {0xbb3e4000}, {0xbb3e6000}, {0xbb3e8000}, {0xbb3ea000}, {0xbb3ec000}, {0xbb3ee000}, {0xbb3f0000}, {0xbb3f2000}, {0xbb3f4000}, {0xbb3f6000}, {0xbb3f8000}, {0xbb3fa000}, {0xbb3fc000}, {0xbb3fe000}, {0xbb400000}, {0xbb402000}, {0xbb404000}, {0xbb406000}, {0xbb408000}, {0xbb40a000}, {0xbb40c000}, {0xbb40e000}, {0xbb410000}, {0xbb412000}, {0xbb414000}, {0xbb416000}, {0xbb418000}, {0xbb41a000}, {0xbb41c000}, {0xbb41e000}, {0xbb420000}, {0xbb422000}, {0xbb424000}, {0xbb426000}, {0xbb428000}, {0xbb42a000}, {0xbb42c000}, {0xbb42e000}, {0xbb430000}, {0xbb432000}, {0xbb434000}, {0xbb436000}, {0xbb438000}, {0xbb43a000}, {0xbb43c000}, {0xbb43e000}, {0xbb440000}, {0xbb442000}, {0xbb444000}, {0xbb446000}, {0xbb448000}, {0xbb44a000}, {0xbb44c000}, {0xbb44e000}, {0xbb450000}, {0xbb452000}, {0xbb454000}, {0xbb456000}, {0xbb458000}, {0xbb45a000}, {0xbb45c000}, {0xbb45e000}, {0xbb460000}, {0xbb462000}, {0xbb464000}, {0xbb466000}, {0xbb468000}, {0xbb46a000}, {0xbb46c000}, {0xbb46e000}, {0xbb470000}, {0xbb472000}, {0xbb474000}, {0xbb476000}, {0xbb478000}, {0xbb47a000}, {0xbb47c000}, {0xbb47e000}, {0xbb480000}, {0xbb482000}, {0xbb484000}, {0xbb486000}, {0xbb488000}, {0xbb48a000}, {0xbb48c000}, {0xbb48e000}, {0xbb490000}, {0xbb492000}, {0xbb494000}, {0xbb496000}, {0xbb498000}, {0xbb49a000}, {0xbb49c000}, {0xbb49e000}, {0xbb4a0000}, {0xbb4a2000}, {0xbb4a4000}, {0xbb4a6000}, {0xbb4a8000}, {0xbb4aa000}, {0xbb4ac000}, {0xbb4ae000}, {0xbb4b0000}, {0xbb4b2000}, {0xbb4b4000}, {0xbb4b6000}, {0xbb4b8000}, {0xbb4ba000}, {0xbb4bc000}, {0xbb4be000}, {0xbb4c0000}, {0xbb4c2000}, {0xbb4c4000}, {0xbb4c6000}, {0xbb4c8000}, {0xbb4ca000}, {0xbb4cc000}, {0xbb4ce000}, {0xbb4d0000}, {0xbb4d2000}, {0xbb4d4000}, {0xbb4d6000}, {0xbb4d8000}, {0xbb4da000}, {0xbb4dc000}, {0xbb4de000}, {0xbb4e0000}, {0xbb4e2000}, {0xbb4e4000}, {0xbb4e6000}, {0xbb4e8000}, {0xbb4ea000}, {0xbb4ec000}, {0xbb4ee000}, {0xbb4f0000}, {0xbb4f2000}, {0xbb4f4000}, {0xbb4f6000}, {0xbb4f8000}, {0xbb4fa000}, {0xbb4fc000}, {0xbb4fe000}, {0xbb500000}, {0xbb502000}, {0xbb504000}, {0xbb506000}, {0xbb508000}, {0xbb50a000}, {0xbb50c000}, {0xbb50e000}, {0xbb510000}, {0xbb512000}, {0xbb514000}, {0xbb516000}, {0xbb518000}, {0xbb51a000}, {0xbb51c000}, {0xbb51e000}, {0xbb520000}, {0xbb522000}, {0xbb524000}, {0xbb526000}, {0xbb528000}, {0xbb52a000}, {0xbb52c000}, {0xbb52e000}, {0xbb530000}, {0xbb532000}, {0xbb534000}, {0xbb536000}, {0xbb538000}, {0xbb53a000}, {0xbb53c000}, {0xbb53e000}, {0xbb540000}, {0xbb542000}, {0xbb544000}, {0xbb546000}, {0xbb548000}, {0xbb54a000}, {0xbb54c000}, {0xbb54e000}, {0xbb550000}, {0xbb552000}, {0xbb554000}, {0xbb556000}, {0xbb558000}, {0xbb55a000}, {0xbb55c000}, {0xbb55e000}, {0xbb560000}, {0xbb562000}, {0xbb564000}, {0xbb566000}, {0xbb568000}, {0xbb56a000}, {0xbb56c000}, {0xbb56e000}, {0xbb570000}, {0xbb572000}, {0xbb574000}, {0xbb576000}, {0xbb578000}, {0xbb57a000}, {0xbb57c000}, {0xbb57e000}, {0xbb580000}, {0xbb582000}, {0xbb584000}, {0xbb586000}, {0xbb588000}, {0xbb58a000}, {0xbb58c000}, {0xbb58e000}, {0xbb590000}, {0xbb592000}, {0xbb594000}, {0xbb596000}, {0xbb598000}, {0xbb59a000}, {0xbb59c000}, {0xbb59e000}, {0xbb5a0000}, {0xbb5a2000}, {0xbb5a4000}, {0xbb5a6000}, {0xbb5a8000}, {0xbb5aa000}, {0xbb5ac000}, {0xbb5ae000}, {0xbb5b0000}, {0xbb5b2000}, {0xbb5b4000}, {0xbb5b6000}, {0xbb5b8000}, {0xbb5ba000}, {0xbb5bc000}, {0xbb5be000}, {0xbb5c0000}, {0xbb5c2000}, {0xbb5c4000}, {0xbb5c6000}, {0xbb5c8000}, {0xbb5ca000}, {0xbb5cc000}, {0xbb5ce000}, {0xbb5d0000}, {0xbb5d2000}, {0xbb5d4000}, {0xbb5d6000}, {0xbb5d8000}, {0xbb5da000}, {0xbb5dc000}, {0xbb5de000}, {0xbb5e0000}, {0xbb5e2000}, {0xbb5e4000}, {0xbb5e6000}, {0xbb5e8000}, {0xbb5ea000}, {0xbb5ec000}, {0xbb5ee000}, {0xbb5f0000}, {0xbb5f2000}, {0xbb5f4000}, {0xbb5f6000}, {0xbb5f8000}, {0xbb5fa000}, {0xbb5fc000}, {0xbb5fe000}, {0xbb600000}, {0xbb602000}, {0xbb604000}, {0xbb606000}, {0xbb608000}, {0xbb60a000}, {0xbb60c000}, {0xbb60e000}, {0xbb610000}, {0xbb612000}, {0xbb614000}, {0xbb616000}, {0xbb618000}, {0xbb61a000}, {0xbb61c000}, {0xbb61e000}, {0xbb620000}, {0xbb622000}, {0xbb624000}, {0xbb626000}, {0xbb628000}, {0xbb62a000}, {0xbb62c000}, {0xbb62e000}, {0xbb630000}, {0xbb632000}, {0xbb634000}, {0xbb636000}, {0xbb638000}, {0xbb63a000}, {0xbb63c000}, {0xbb63e000}, {0xbb640000}, {0xbb642000}, {0xbb644000}, {0xbb646000}, {0xbb648000}, {0xbb64a000}, {0xbb64c000}, {0xbb64e000}, {0xbb650000}, {0xbb652000}, {0xbb654000}, {0xbb656000}, {0xbb658000}, {0xbb65a000}, {0xbb65c000}, {0xbb65e000}, {0xbb660000}, {0xbb662000}, {0xbb664000}, {0xbb666000}, {0xbb668000}, {0xbb66a000}, {0xbb66c000}, {0xbb66e000}, {0xbb670000}, {0xbb672000}, {0xbb674000}, {0xbb676000}, {0xbb678000}, {0xbb67a000}, {0xbb67c000}, {0xbb67e000}, {0xbb680000}, {0xbb682000}, {0xbb684000}, {0xbb686000}, {0xbb688000}, {0xbb68a000}, {0xbb68c000}, {0xbb68e000}, {0xbb690000}, {0xbb692000}, {0xbb694000}, {0xbb696000}, {0xbb698000}, {0xbb69a000}, {0xbb69c000}, {0xbb69e000}, {0xbb6a0000}, {0xbb6a2000}, {0xbb6a4000}, {0xbb6a6000}, {0xbb6a8000}, {0xbb6aa000}, {0xbb6ac000}, {0xbb6ae000}, {0xbb6b0000}, {0xbb6b2000}, {0xbb6b4000}, {0xbb6b6000}, {0xbb6b8000}, {0xbb6ba000}, {0xbb6bc000}, {0xbb6be000}, {0xbb6c0000}, {0xbb6c2000}, {0xbb6c4000}, {0xbb6c6000}, {0xbb6c8000}, {0xbb6ca000}, {0xbb6cc000}, {0xbb6ce000}, {0xbb6d0000}, {0xbb6d2000}, {0xbb6d4000}, {0xbb6d6000}, {0xbb6d8000}, {0xbb6da000}, {0xbb6dc000}, {0xbb6de000}, {0xbb6e0000}, {0xbb6e2000}, {0xbb6e4000}, {0xbb6e6000}, {0xbb6e8000}, {0xbb6ea000}, {0xbb6ec000}, {0xbb6ee000}, {0xbb6f0000}, {0xbb6f2000}, {0xbb6f4000}, {0xbb6f6000}, {0xbb6f8000}, {0xbb6fa000}, {0xbb6fc000}, {0xbb6fe000}, {0xbb700000}, {0xbb702000}, {0xbb704000}, {0xbb706000}, {0xbb708000}, {0xbb70a000}, {0xbb70c000}, {0xbb70e000}, {0xbb710000}, {0xbb712000}, {0xbb714000}, {0xbb716000}, {0xbb718000}, {0xbb71a000}, {0xbb71c000}, {0xbb71e000}, {0xbb720000}, {0xbb722000}, {0xbb724000}, {0xbb726000}, {0xbb728000}, {0xbb72a000}, {0xbb72c000}, {0xbb72e000}, {0xbb730000}, {0xbb732000}, {0xbb734000}, {0xbb736000}, {0xbb738000}, {0xbb73a000}, {0xbb73c000}, {0xbb73e000}, {0xbb740000}, {0xbb742000}, {0xbb744000}, {0xbb746000}, {0xbb748000}, {0xbb74a000}, {0xbb74c000}, {0xbb74e000}, {0xbb750000}, {0xbb752000}, {0xbb754000}, {0xbb756000}, {0xbb758000}, {0xbb75a000}, {0xbb75c000}, {0xbb75e000}, {0xbb760000}, {0xbb762000}, {0xbb764000}, {0xbb766000}, {0xbb768000}, {0xbb76a000}, {0xbb76c000}, {0xbb76e000}, {0xbb770000}, {0xbb772000}, {0xbb774000}, {0xbb776000}, {0xbb778000}, {0xbb77a000}, {0xbb77c000}, {0xbb77e000}, {0xbb780000}, {0xbb782000}, {0xbb784000}, {0xbb786000}, {0xbb788000}, {0xbb78a000}, {0xbb78c000}, {0xbb78e000}, {0xbb790000}, {0xbb792000}, {0xbb794000}, {0xbb796000}, {0xbb798000}, {0xbb79a000}, {0xbb79c000}, {0xbb79e000}, {0xbb7a0000}, {0xbb7a2000}, {0xbb7a4000}, {0xbb7a6000}, {0xbb7a8000}, {0xbb7aa000}, {0xbb7ac000}, {0xbb7ae000}, {0xbb7b0000}, {0xbb7b2000}, {0xbb7b4000}, {0xbb7b6000}, {0xbb7b8000}, {0xbb7ba000}, {0xbb7bc000}, {0xbb7be000}, {0xbb7c0000}, {0xbb7c2000}, {0xbb7c4000}, {0xbb7c6000}, {0xbb7c8000}, {0xbb7ca000}, {0xbb7cc000}, {0xbb7ce000}, {0xbb7d0000}, {0xbb7d2000}, {0xbb7d4000}, {0xbb7d6000}, {0xbb7d8000}, {0xbb7da000}, {0xbb7dc000}, {0xbb7de000}, {0xbb7e0000}, {0xbb7e2000}, {0xbb7e4000}, {0xbb7e6000}, {0xbb7e8000}, {0xbb7ea000}, {0xbb7ec000}, {0xbb7ee000}, {0xbb7f0000}, {0xbb7f2000}, {0xbb7f4000}, {0xbb7f6000}, {0xbb7f8000}, {0xbb7fa000}, {0xbb7fc000}, {0xbb7fe000}, {0xbb800000}, {0xbb802000}, {0xbb804000}, {0xbb806000}, {0xbb808000}, {0xbb80a000}, {0xbb80c000}, {0xbb80e000}, {0xbb810000}, {0xbb812000}, {0xbb814000}, {0xbb816000}, {0xbb818000}, {0xbb81a000}, {0xbb81c000}, {0xbb81e000}, {0xbb820000}, {0xbb822000}, {0xbb824000}, {0xbb826000}, {0xbb828000}, {0xbb82a000}, {0xbb82c000}, {0xbb82e000}, {0xbb830000}, {0xbb832000}, {0xbb834000}, {0xbb836000}, {0xbb838000}, {0xbb83a000}, {0xbb83c000}, {0xbb83e000}, {0xbb840000}, {0xbb842000}, {0xbb844000}, {0xbb846000}, {0xbb848000}, {0xbb84a000}, {0xbb84c000}, {0xbb84e000}, {0xbb850000}, {0xbb852000}, {0xbb854000}, {0xbb856000}, {0xbb858000}, {0xbb85a000}, {0xbb85c000}, {0xbb85e000}, {0xbb860000}, {0xbb862000}, {0xbb864000}, {0xbb866000}, {0xbb868000}, {0xbb86a000}, {0xbb86c000}, {0xbb86e000}, {0xbb870000}, {0xbb872000}, {0xbb874000}, {0xbb876000}, {0xbb878000}, {0xbb87a000}, {0xbb87c000}, {0xbb87e000}, {0xbb880000}, {0xbb882000}, {0xbb884000}, {0xbb886000}, {0xbb888000}, {0xbb88a000}, {0xbb88c000}, {0xbb88e000}, {0xbb890000}, {0xbb892000}, {0xbb894000}, {0xbb896000}, {0xbb898000}, {0xbb89a000}, {0xbb89c000}, {0xbb89e000}, {0xbb8a0000}, {0xbb8a2000}, {0xbb8a4000}, {0xbb8a6000}, {0xbb8a8000}, {0xbb8aa000}, {0xbb8ac000}, {0xbb8ae000}, {0xbb8b0000}, {0xbb8b2000}, {0xbb8b4000}, {0xbb8b6000}, {0xbb8b8000}, {0xbb8ba000}, {0xbb8bc000}, {0xbb8be000}, {0xbb8c0000}, {0xbb8c2000}, {0xbb8c4000}, {0xbb8c6000}, {0xbb8c8000}, {0xbb8ca000}, {0xbb8cc000}, {0xbb8ce000}, {0xbb8d0000}, {0xbb8d2000}, {0xbb8d4000}, {0xbb8d6000}, {0xbb8d8000}, {0xbb8da000}, {0xbb8dc000}, {0xbb8de000}, {0xbb8e0000}, {0xbb8e2000}, {0xbb8e4000}, {0xbb8e6000}, {0xbb8e8000}, {0xbb8ea000}, {0xbb8ec000}, {0xbb8ee000}, {0xbb8f0000}, {0xbb8f2000}, {0xbb8f4000}, {0xbb8f6000}, {0xbb8f8000}, {0xbb8fa000}, {0xbb8fc000}, {0xbb8fe000}, {0xbb900000}, {0xbb902000}, {0xbb904000}, {0xbb906000}, {0xbb908000}, {0xbb90a000}, {0xbb90c000}, {0xbb90e000}, {0xbb910000}, {0xbb912000}, {0xbb914000}, {0xbb916000}, {0xbb918000}, {0xbb91a000}, {0xbb91c000}, {0xbb91e000}, {0xbb920000}, {0xbb922000}, {0xbb924000}, {0xbb926000}, {0xbb928000}, {0xbb92a000}, {0xbb92c000}, {0xbb92e000}, {0xbb930000}, {0xbb932000}, {0xbb934000}, {0xbb936000}, {0xbb938000}, {0xbb93a000}, {0xbb93c000}, {0xbb93e000}, {0xbb940000}, {0xbb942000}, {0xbb944000}, {0xbb946000}, {0xbb948000}, {0xbb94a000}, {0xbb94c000}, {0xbb94e000}, {0xbb950000}, {0xbb952000}, {0xbb954000}, {0xbb956000}, {0xbb958000}, {0xbb95a000}, {0xbb95c000}, {0xbb95e000}, {0xbb960000}, {0xbb962000}, {0xbb964000}, {0xbb966000}, {0xbb968000}, {0xbb96a000}, {0xbb96c000}, {0xbb96e000}, {0xbb970000}, {0xbb972000}, {0xbb974000}, {0xbb976000}, {0xbb978000}, {0xbb97a000}, {0xbb97c000}, {0xbb97e000}, {0xbb980000}, {0xbb982000}, {0xbb984000}, {0xbb986000}, {0xbb988000}, {0xbb98a000}, {0xbb98c000}, {0xbb98e000}, {0xbb990000}, {0xbb992000}, {0xbb994000}, {0xbb996000}, {0xbb998000}, {0xbb99a000}, {0xbb99c000}, {0xbb99e000}, {0xbb9a0000}, {0xbb9a2000}, {0xbb9a4000}, {0xbb9a6000}, {0xbb9a8000}, {0xbb9aa000}, {0xbb9ac000}, {0xbb9ae000}, {0xbb9b0000}, {0xbb9b2000}, {0xbb9b4000}, {0xbb9b6000}, {0xbb9b8000}, {0xbb9ba000}, {0xbb9bc000}, {0xbb9be000}, {0xbb9c0000}, {0xbb9c2000}, {0xbb9c4000}, {0xbb9c6000}, {0xbb9c8000}, {0xbb9ca000}, {0xbb9cc000}, {0xbb9ce000}, {0xbb9d0000}, {0xbb9d2000}, {0xbb9d4000}, {0xbb9d6000}, {0xbb9d8000}, {0xbb9da000}, {0xbb9dc000}, {0xbb9de000}, {0xbb9e0000}, {0xbb9e2000}, {0xbb9e4000}, {0xbb9e6000}, {0xbb9e8000}, {0xbb9ea000}, {0xbb9ec000}, {0xbb9ee000}, {0xbb9f0000}, {0xbb9f2000}, {0xbb9f4000}, {0xbb9f6000}, {0xbb9f8000}, {0xbb9fa000}, {0xbb9fc000}, {0xbb9fe000}, {0xbba00000}, {0xbba02000}, {0xbba04000}, {0xbba06000}, {0xbba08000}, {0xbba0a000}, {0xbba0c000}, {0xbba0e000}, {0xbba10000}, {0xbba12000}, {0xbba14000}, {0xbba16000}, {0xbba18000}, {0xbba1a000}, {0xbba1c000}, {0xbba1e000}, {0xbba20000}, {0xbba22000}, {0xbba24000}, {0xbba26000}, {0xbba28000}, {0xbba2a000}, {0xbba2c000}, {0xbba2e000}, {0xbba30000}, {0xbba32000}, {0xbba34000}, {0xbba36000}, {0xbba38000}, {0xbba3a000}, {0xbba3c000}, {0xbba3e000}, {0xbba40000}, {0xbba42000}, {0xbba44000}, {0xbba46000}, {0xbba48000}, {0xbba4a000}, {0xbba4c000}, {0xbba4e000}, {0xbba50000}, {0xbba52000}, {0xbba54000}, {0xbba56000}, {0xbba58000}, {0xbba5a000}, {0xbba5c000}, {0xbba5e000}, {0xbba60000}, {0xbba62000}, {0xbba64000}, {0xbba66000}, {0xbba68000}, {0xbba6a000}, {0xbba6c000}, {0xbba6e000}, {0xbba70000}, {0xbba72000}, {0xbba74000}, {0xbba76000}, {0xbba78000}, {0xbba7a000}, {0xbba7c000}, {0xbba7e000}, {0xbba80000}, {0xbba82000}, {0xbba84000}, {0xbba86000}, {0xbba88000}, {0xbba8a000}, {0xbba8c000}, {0xbba8e000}, {0xbba90000}, {0xbba92000}, {0xbba94000}, {0xbba96000}, {0xbba98000}, {0xbba9a000}, {0xbba9c000}, {0xbba9e000}, {0xbbaa0000}, {0xbbaa2000}, {0xbbaa4000}, {0xbbaa6000}, {0xbbaa8000}, {0xbbaaa000}, {0xbbaac000}, {0xbbaae000}, {0xbbab0000}, {0xbbab2000}, {0xbbab4000}, {0xbbab6000}, {0xbbab8000}, {0xbbaba000}, {0xbbabc000}, {0xbbabe000}, {0xbbac0000}, {0xbbac2000}, {0xbbac4000}, {0xbbac6000}, {0xbbac8000}, {0xbbaca000}, {0xbbacc000}, {0xbbace000}, {0xbbad0000}, {0xbbad2000}, {0xbbad4000}, {0xbbad6000}, {0xbbad8000}, {0xbbada000}, {0xbbadc000}, {0xbbade000}, {0xbbae0000}, {0xbbae2000}, {0xbbae4000}, {0xbbae6000}, {0xbbae8000}, {0xbbaea000}, {0xbbaec000}, {0xbbaee000}, {0xbbaf0000}, {0xbbaf2000}, {0xbbaf4000}, {0xbbaf6000}, {0xbbaf8000}, {0xbbafa000}, {0xbbafc000}, {0xbbafe000}, {0xbbb00000}, {0xbbb02000}, {0xbbb04000}, {0xbbb06000}, {0xbbb08000}, {0xbbb0a000}, {0xbbb0c000}, {0xbbb0e000}, {0xbbb10000}, {0xbbb12000}, {0xbbb14000}, {0xbbb16000}, {0xbbb18000}, {0xbbb1a000}, {0xbbb1c000}, {0xbbb1e000}, {0xbbb20000}, {0xbbb22000}, {0xbbb24000}, {0xbbb26000}, {0xbbb28000}, {0xbbb2a000}, {0xbbb2c000}, {0xbbb2e000}, {0xbbb30000}, {0xbbb32000}, {0xbbb34000}, {0xbbb36000}, {0xbbb38000}, {0xbbb3a000}, {0xbbb3c000}, {0xbbb3e000}, {0xbbb40000}, {0xbbb42000}, {0xbbb44000}, {0xbbb46000}, {0xbbb48000}, {0xbbb4a000}, {0xbbb4c000}, {0xbbb4e000}, {0xbbb50000}, {0xbbb52000}, {0xbbb54000}, {0xbbb56000}, {0xbbb58000}, {0xbbb5a000}, {0xbbb5c000}, {0xbbb5e000}, {0xbbb60000}, {0xbbb62000}, {0xbbb64000}, {0xbbb66000}, {0xbbb68000}, {0xbbb6a000}, {0xbbb6c000}, {0xbbb6e000}, {0xbbb70000}, {0xbbb72000}, {0xbbb74000}, {0xbbb76000}, {0xbbb78000}, {0xbbb7a000}, {0xbbb7c000}, {0xbbb7e000}, {0xbbb80000}, {0xbbb82000}, {0xbbb84000}, {0xbbb86000}, {0xbbb88000}, {0xbbb8a000}, {0xbbb8c000}, {0xbbb8e000}, {0xbbb90000}, {0xbbb92000}, {0xbbb94000}, {0xbbb96000}, {0xbbb98000}, {0xbbb9a000}, {0xbbb9c000}, {0xbbb9e000}, {0xbbba0000}, {0xbbba2000}, {0xbbba4000}, {0xbbba6000}, {0xbbba8000}, {0xbbbaa000}, {0xbbbac000}, {0xbbbae000}, {0xbbbb0000}, {0xbbbb2000}, {0xbbbb4000}, {0xbbbb6000}, {0xbbbb8000}, {0xbbbba000}, {0xbbbbc000}, {0xbbbbe000}, {0xbbbc0000}, {0xbbbc2000}, {0xbbbc4000}, {0xbbbc6000}, {0xbbbc8000}, {0xbbbca000}, {0xbbbcc000}, {0xbbbce000}, {0xbbbd0000}, {0xbbbd2000}, {0xbbbd4000}, {0xbbbd6000}, {0xbbbd8000}, {0xbbbda000}, {0xbbbdc000}, {0xbbbde000}, {0xbbbe0000}, {0xbbbe2000}, {0xbbbe4000}, {0xbbbe6000}, {0xbbbe8000}, {0xbbbea000}, {0xbbbec000}, {0xbbbee000}, {0xbbbf0000}, {0xbbbf2000}, {0xbbbf4000}, {0xbbbf6000}, {0xbbbf8000}, {0xbbbfa000}, {0xbbbfc000}, {0xbbbfe000}, {0xbbc00000}, {0xbbc02000}, {0xbbc04000}, {0xbbc06000}, {0xbbc08000}, {0xbbc0a000}, {0xbbc0c000}, {0xbbc0e000}, {0xbbc10000}, {0xbbc12000}, {0xbbc14000}, {0xbbc16000}, {0xbbc18000}, {0xbbc1a000}, {0xbbc1c000}, {0xbbc1e000}, {0xbbc20000}, {0xbbc22000}, {0xbbc24000}, {0xbbc26000}, {0xbbc28000}, {0xbbc2a000}, {0xbbc2c000}, {0xbbc2e000}, {0xbbc30000}, {0xbbc32000}, {0xbbc34000}, {0xbbc36000}, {0xbbc38000}, {0xbbc3a000}, {0xbbc3c000}, {0xbbc3e000}, {0xbbc40000}, {0xbbc42000}, {0xbbc44000}, {0xbbc46000}, {0xbbc48000}, {0xbbc4a000}, {0xbbc4c000}, {0xbbc4e000}, {0xbbc50000}, {0xbbc52000}, {0xbbc54000}, {0xbbc56000}, {0xbbc58000}, {0xbbc5a000}, {0xbbc5c000}, {0xbbc5e000}, {0xbbc60000}, {0xbbc62000}, {0xbbc64000}, {0xbbc66000}, {0xbbc68000}, {0xbbc6a000}, {0xbbc6c000}, {0xbbc6e000}, {0xbbc70000}, {0xbbc72000}, {0xbbc74000}, {0xbbc76000}, {0xbbc78000}, {0xbbc7a000}, {0xbbc7c000}, {0xbbc7e000}, {0xbbc80000}, {0xbbc82000}, {0xbbc84000}, {0xbbc86000}, {0xbbc88000}, {0xbbc8a000}, {0xbbc8c000}, {0xbbc8e000}, {0xbbc90000}, {0xbbc92000}, {0xbbc94000}, {0xbbc96000}, {0xbbc98000}, {0xbbc9a000}, {0xbbc9c000}, {0xbbc9e000}, {0xbbca0000}, {0xbbca2000}, {0xbbca4000}, {0xbbca6000}, {0xbbca8000}, {0xbbcaa000}, {0xbbcac000}, {0xbbcae000}, {0xbbcb0000}, {0xbbcb2000}, {0xbbcb4000}, {0xbbcb6000}, {0xbbcb8000}, {0xbbcba000}, {0xbbcbc000}, {0xbbcbe000}, {0xbbcc0000}, {0xbbcc2000}, {0xbbcc4000}, {0xbbcc6000}, {0xbbcc8000}, {0xbbcca000}, {0xbbccc000}, {0xbbcce000}, {0xbbcd0000}, {0xbbcd2000}, {0xbbcd4000}, {0xbbcd6000}, {0xbbcd8000}, {0xbbcda000}, {0xbbcdc000}, {0xbbcde000}, {0xbbce0000}, {0xbbce2000}, {0xbbce4000}, {0xbbce6000}, {0xbbce8000}, {0xbbcea000}, {0xbbcec000}, {0xbbcee000}, {0xbbcf0000}, {0xbbcf2000}, {0xbbcf4000}, {0xbbcf6000}, {0xbbcf8000}, {0xbbcfa000}, {0xbbcfc000}, {0xbbcfe000}, {0xbbd00000}, {0xbbd02000}, {0xbbd04000}, {0xbbd06000}, {0xbbd08000}, {0xbbd0a000}, {0xbbd0c000}, {0xbbd0e000}, {0xbbd10000}, {0xbbd12000}, {0xbbd14000}, {0xbbd16000}, {0xbbd18000}, {0xbbd1a000}, {0xbbd1c000}, {0xbbd1e000}, {0xbbd20000}, {0xbbd22000}, {0xbbd24000}, {0xbbd26000}, {0xbbd28000}, {0xbbd2a000}, {0xbbd2c000}, {0xbbd2e000}, {0xbbd30000}, {0xbbd32000}, {0xbbd34000}, {0xbbd36000}, {0xbbd38000}, {0xbbd3a000}, {0xbbd3c000}, {0xbbd3e000}, {0xbbd40000}, {0xbbd42000}, {0xbbd44000}, {0xbbd46000}, {0xbbd48000}, {0xbbd4a000}, {0xbbd4c000}, {0xbbd4e000}, {0xbbd50000}, {0xbbd52000}, {0xbbd54000}, {0xbbd56000}, {0xbbd58000}, {0xbbd5a000}, {0xbbd5c000}, {0xbbd5e000}, {0xbbd60000}, {0xbbd62000}, {0xbbd64000}, {0xbbd66000}, {0xbbd68000}, {0xbbd6a000}, {0xbbd6c000}, {0xbbd6e000}, {0xbbd70000}, {0xbbd72000}, {0xbbd74000}, {0xbbd76000}, {0xbbd78000}, {0xbbd7a000}, {0xbbd7c000}, {0xbbd7e000}, {0xbbd80000}, {0xbbd82000}, {0xbbd84000}, {0xbbd86000}, {0xbbd88000}, {0xbbd8a000}, {0xbbd8c000}, {0xbbd8e000}, {0xbbd90000}, {0xbbd92000}, {0xbbd94000}, {0xbbd96000}, {0xbbd98000}, {0xbbd9a000}, {0xbbd9c000}, {0xbbd9e000}, {0xbbda0000}, {0xbbda2000}, {0xbbda4000}, {0xbbda6000}, {0xbbda8000}, {0xbbdaa000}, {0xbbdac000}, {0xbbdae000}, {0xbbdb0000}, {0xbbdb2000}, {0xbbdb4000}, {0xbbdb6000}, {0xbbdb8000}, {0xbbdba000}, {0xbbdbc000}, {0xbbdbe000}, {0xbbdc0000}, {0xbbdc2000}, {0xbbdc4000}, {0xbbdc6000}, {0xbbdc8000}, {0xbbdca000}, {0xbbdcc000}, {0xbbdce000}, {0xbbdd0000}, {0xbbdd2000}, {0xbbdd4000}, {0xbbdd6000}, {0xbbdd8000}, {0xbbdda000}, {0xbbddc000}, {0xbbdde000}, {0xbbde0000}, {0xbbde2000}, {0xbbde4000}, {0xbbde6000}, {0xbbde8000}, {0xbbdea000}, {0xbbdec000}, {0xbbdee000}, {0xbbdf0000}, {0xbbdf2000}, {0xbbdf4000}, {0xbbdf6000}, {0xbbdf8000}, {0xbbdfa000}, {0xbbdfc000}, {0xbbdfe000}, {0xbbe00000}, {0xbbe02000}, {0xbbe04000}, {0xbbe06000}, {0xbbe08000}, {0xbbe0a000}, {0xbbe0c000}, {0xbbe0e000}, {0xbbe10000}, {0xbbe12000}, {0xbbe14000}, {0xbbe16000}, {0xbbe18000}, {0xbbe1a000}, {0xbbe1c000}, {0xbbe1e000}, {0xbbe20000}, {0xbbe22000}, {0xbbe24000}, {0xbbe26000}, {0xbbe28000}, {0xbbe2a000}, {0xbbe2c000}, {0xbbe2e000}, {0xbbe30000}, {0xbbe32000}, {0xbbe34000}, {0xbbe36000}, {0xbbe38000}, {0xbbe3a000}, {0xbbe3c000}, {0xbbe3e000}, {0xbbe40000}, {0xbbe42000}, {0xbbe44000}, {0xbbe46000}, {0xbbe48000}, {0xbbe4a000}, {0xbbe4c000}, {0xbbe4e000}, {0xbbe50000}, {0xbbe52000}, {0xbbe54000}, {0xbbe56000}, {0xbbe58000}, {0xbbe5a000}, {0xbbe5c000}, {0xbbe5e000}, {0xbbe60000}, {0xbbe62000}, {0xbbe64000}, {0xbbe66000}, {0xbbe68000}, {0xbbe6a000}, {0xbbe6c000}, {0xbbe6e000}, {0xbbe70000}, {0xbbe72000}, {0xbbe74000}, {0xbbe76000}, {0xbbe78000}, {0xbbe7a000}, {0xbbe7c000}, {0xbbe7e000}, {0xbbe80000}, {0xbbe82000}, {0xbbe84000}, {0xbbe86000}, {0xbbe88000}, {0xbbe8a000}, {0xbbe8c000}, {0xbbe8e000}, {0xbbe90000}, {0xbbe92000}, {0xbbe94000}, {0xbbe96000}, {0xbbe98000}, {0xbbe9a000}, {0xbbe9c000}, {0xbbe9e000}, {0xbbea0000}, {0xbbea2000}, {0xbbea4000}, {0xbbea6000}, {0xbbea8000}, {0xbbeaa000}, {0xbbeac000}, {0xbbeae000}, {0xbbeb0000}, {0xbbeb2000}, {0xbbeb4000}, {0xbbeb6000}, {0xbbeb8000}, {0xbbeba000}, {0xbbebc000}, {0xbbebe000}, {0xbbec0000}, {0xbbec2000}, {0xbbec4000}, {0xbbec6000}, {0xbbec8000}, {0xbbeca000}, {0xbbecc000}, {0xbbece000}, {0xbbed0000}, {0xbbed2000}, {0xbbed4000}, {0xbbed6000}, {0xbbed8000}, {0xbbeda000}, {0xbbedc000}, {0xbbede000}, {0xbbee0000}, {0xbbee2000}, {0xbbee4000}, {0xbbee6000}, {0xbbee8000}, {0xbbeea000}, {0xbbeec000}, {0xbbeee000}, {0xbbef0000}, {0xbbef2000}, {0xbbef4000}, {0xbbef6000}, {0xbbef8000}, {0xbbefa000}, {0xbbefc000}, {0xbbefe000}, {0xbbf00000}, {0xbbf02000}, {0xbbf04000}, {0xbbf06000}, {0xbbf08000}, {0xbbf0a000}, {0xbbf0c000}, {0xbbf0e000}, {0xbbf10000}, {0xbbf12000}, {0xbbf14000}, {0xbbf16000}, {0xbbf18000}, {0xbbf1a000}, {0xbbf1c000}, {0xbbf1e000}, {0xbbf20000}, {0xbbf22000}, {0xbbf24000}, {0xbbf26000}, {0xbbf28000}, {0xbbf2a000}, {0xbbf2c000}, {0xbbf2e000}, {0xbbf30000}, {0xbbf32000}, {0xbbf34000}, {0xbbf36000}, {0xbbf38000}, {0xbbf3a000}, {0xbbf3c000}, {0xbbf3e000}, {0xbbf40000}, {0xbbf42000}, {0xbbf44000}, {0xbbf46000}, {0xbbf48000}, {0xbbf4a000}, {0xbbf4c000}, {0xbbf4e000}, {0xbbf50000}, {0xbbf52000}, {0xbbf54000}, {0xbbf56000}, {0xbbf58000}, {0xbbf5a000}, {0xbbf5c000}, {0xbbf5e000}, {0xbbf60000}, {0xbbf62000}, {0xbbf64000}, {0xbbf66000}, {0xbbf68000}, {0xbbf6a000}, {0xbbf6c000}, {0xbbf6e000}, {0xbbf70000}, {0xbbf72000}, {0xbbf74000}, {0xbbf76000}, {0xbbf78000}, {0xbbf7a000}, {0xbbf7c000}, {0xbbf7e000}, {0xbbf80000}, {0xbbf82000}, {0xbbf84000}, {0xbbf86000}, {0xbbf88000}, {0xbbf8a000}, {0xbbf8c000}, {0xbbf8e000}, {0xbbf90000}, {0xbbf92000}, {0xbbf94000}, {0xbbf96000}, {0xbbf98000}, {0xbbf9a000}, {0xbbf9c000}, {0xbbf9e000}, {0xbbfa0000}, {0xbbfa2000}, {0xbbfa4000}, {0xbbfa6000}, {0xbbfa8000}, {0xbbfaa000}, {0xbbfac000}, {0xbbfae000}, {0xbbfb0000}, {0xbbfb2000}, {0xbbfb4000}, {0xbbfb6000}, {0xbbfb8000}, {0xbbfba000}, {0xbbfbc000}, {0xbbfbe000}, {0xbbfc0000}, {0xbbfc2000}, {0xbbfc4000}, {0xbbfc6000}, {0xbbfc8000}, {0xbbfca000}, {0xbbfcc000}, {0xbbfce000}, {0xbbfd0000}, {0xbbfd2000}, {0xbbfd4000}, {0xbbfd6000}, {0xbbfd8000}, {0xbbfda000}, {0xbbfdc000}, {0xbbfde000}, {0xbbfe0000}, {0xbbfe2000}, {0xbbfe4000}, {0xbbfe6000}, {0xbbfe8000}, {0xbbfea000}, {0xbbfec000}, {0xbbfee000}, {0xbbff0000}, {0xbbff2000}, {0xbbff4000}, {0xbbff6000}, {0xbbff8000}, {0xbbffa000}, {0xbbffc000}, {0xbbffe000}, {0xbc000000}, {0xbc002000}, {0xbc004000}, {0xbc006000}, {0xbc008000}, {0xbc00a000}, {0xbc00c000}, {0xbc00e000}, {0xbc010000}, {0xbc012000}, {0xbc014000}, {0xbc016000}, {0xbc018000}, {0xbc01a000}, {0xbc01c000}, {0xbc01e000}, {0xbc020000}, {0xbc022000}, {0xbc024000}, {0xbc026000}, {0xbc028000}, {0xbc02a000}, {0xbc02c000}, {0xbc02e000}, {0xbc030000}, {0xbc032000}, {0xbc034000}, {0xbc036000}, {0xbc038000}, {0xbc03a000}, {0xbc03c000}, {0xbc03e000}, {0xbc040000}, {0xbc042000}, {0xbc044000}, {0xbc046000}, {0xbc048000}, {0xbc04a000}, {0xbc04c000}, {0xbc04e000}, {0xbc050000}, {0xbc052000}, {0xbc054000}, {0xbc056000}, {0xbc058000}, {0xbc05a000}, {0xbc05c000}, {0xbc05e000}, {0xbc060000}, {0xbc062000}, {0xbc064000}, {0xbc066000}, {0xbc068000}, {0xbc06a000}, {0xbc06c000}, {0xbc06e000}, {0xbc070000}, {0xbc072000}, {0xbc074000}, {0xbc076000}, {0xbc078000}, {0xbc07a000}, {0xbc07c000}, {0xbc07e000}, {0xbc080000}, {0xbc082000}, {0xbc084000}, {0xbc086000}, {0xbc088000}, {0xbc08a000}, {0xbc08c000}, {0xbc08e000}, {0xbc090000}, {0xbc092000}, {0xbc094000}, {0xbc096000}, {0xbc098000}, {0xbc09a000}, {0xbc09c000}, {0xbc09e000}, {0xbc0a0000}, {0xbc0a2000}, {0xbc0a4000}, {0xbc0a6000}, {0xbc0a8000}, {0xbc0aa000}, {0xbc0ac000}, {0xbc0ae000}, {0xbc0b0000}, {0xbc0b2000}, {0xbc0b4000}, {0xbc0b6000}, {0xbc0b8000}, {0xbc0ba000}, {0xbc0bc000}, {0xbc0be000}, {0xbc0c0000}, {0xbc0c2000}, {0xbc0c4000}, {0xbc0c6000}, {0xbc0c8000}, {0xbc0ca000}, {0xbc0cc000}, {0xbc0ce000}, {0xbc0d0000}, {0xbc0d2000}, {0xbc0d4000}, {0xbc0d6000}, {0xbc0d8000}, {0xbc0da000}, {0xbc0dc000}, {0xbc0de000}, {0xbc0e0000}, {0xbc0e2000}, {0xbc0e4000}, {0xbc0e6000}, {0xbc0e8000}, {0xbc0ea000}, {0xbc0ec000}, {0xbc0ee000}, {0xbc0f0000}, {0xbc0f2000}, {0xbc0f4000}, {0xbc0f6000}, {0xbc0f8000}, {0xbc0fa000}, {0xbc0fc000}, {0xbc0fe000}, {0xbc100000}, {0xbc102000}, {0xbc104000}, {0xbc106000}, {0xbc108000}, {0xbc10a000}, {0xbc10c000}, {0xbc10e000}, {0xbc110000}, {0xbc112000}, {0xbc114000}, {0xbc116000}, {0xbc118000}, {0xbc11a000}, {0xbc11c000}, {0xbc11e000}, {0xbc120000}, {0xbc122000}, {0xbc124000}, {0xbc126000}, {0xbc128000}, {0xbc12a000}, {0xbc12c000}, {0xbc12e000}, {0xbc130000}, {0xbc132000}, {0xbc134000}, {0xbc136000}, {0xbc138000}, {0xbc13a000}, {0xbc13c000}, {0xbc13e000}, {0xbc140000}, {0xbc142000}, {0xbc144000}, {0xbc146000}, {0xbc148000}, {0xbc14a000}, {0xbc14c000}, {0xbc14e000}, {0xbc150000}, {0xbc152000}, {0xbc154000}, {0xbc156000}, {0xbc158000}, {0xbc15a000}, {0xbc15c000}, {0xbc15e000}, {0xbc160000}, {0xbc162000}, {0xbc164000}, {0xbc166000}, {0xbc168000}, {0xbc16a000}, {0xbc16c000}, {0xbc16e000}, {0xbc170000}, {0xbc172000}, {0xbc174000}, {0xbc176000}, {0xbc178000}, {0xbc17a000}, {0xbc17c000}, {0xbc17e000}, {0xbc180000}, {0xbc182000}, {0xbc184000}, {0xbc186000}, {0xbc188000}, {0xbc18a000}, {0xbc18c000}, {0xbc18e000}, {0xbc190000}, {0xbc192000}, {0xbc194000}, {0xbc196000}, {0xbc198000}, {0xbc19a000}, {0xbc19c000}, {0xbc19e000}, {0xbc1a0000}, {0xbc1a2000}, {0xbc1a4000}, {0xbc1a6000}, {0xbc1a8000}, {0xbc1aa000}, {0xbc1ac000}, {0xbc1ae000}, {0xbc1b0000}, {0xbc1b2000}, {0xbc1b4000}, {0xbc1b6000}, {0xbc1b8000}, {0xbc1ba000}, {0xbc1bc000}, {0xbc1be000}, {0xbc1c0000}, {0xbc1c2000}, {0xbc1c4000}, {0xbc1c6000}, {0xbc1c8000}, {0xbc1ca000}, {0xbc1cc000}, {0xbc1ce000}, {0xbc1d0000}, {0xbc1d2000}, {0xbc1d4000}, {0xbc1d6000}, {0xbc1d8000}, {0xbc1da000}, {0xbc1dc000}, {0xbc1de000}, {0xbc1e0000}, {0xbc1e2000}, {0xbc1e4000}, {0xbc1e6000}, {0xbc1e8000}, {0xbc1ea000}, {0xbc1ec000}, {0xbc1ee000}, {0xbc1f0000}, {0xbc1f2000}, {0xbc1f4000}, {0xbc1f6000}, {0xbc1f8000}, {0xbc1fa000}, {0xbc1fc000}, {0xbc1fe000}, {0xbc200000}, {0xbc202000}, {0xbc204000}, {0xbc206000}, {0xbc208000}, {0xbc20a000}, {0xbc20c000}, {0xbc20e000}, {0xbc210000}, {0xbc212000}, {0xbc214000}, {0xbc216000}, {0xbc218000}, {0xbc21a000}, {0xbc21c000}, {0xbc21e000}, {0xbc220000}, {0xbc222000}, {0xbc224000}, {0xbc226000}, {0xbc228000}, {0xbc22a000}, {0xbc22c000}, {0xbc22e000}, {0xbc230000}, {0xbc232000}, {0xbc234000}, {0xbc236000}, {0xbc238000}, {0xbc23a000}, {0xbc23c000}, {0xbc23e000}, {0xbc240000}, {0xbc242000}, {0xbc244000}, {0xbc246000}, {0xbc248000}, {0xbc24a000}, {0xbc24c000}, {0xbc24e000}, {0xbc250000}, {0xbc252000}, {0xbc254000}, {0xbc256000}, {0xbc258000}, {0xbc25a000}, {0xbc25c000}, {0xbc25e000}, {0xbc260000}, {0xbc262000}, {0xbc264000}, {0xbc266000}, {0xbc268000}, {0xbc26a000}, {0xbc26c000}, {0xbc26e000}, {0xbc270000}, {0xbc272000}, {0xbc274000}, {0xbc276000}, {0xbc278000}, {0xbc27a000}, {0xbc27c000}, {0xbc27e000}, {0xbc280000}, {0xbc282000}, {0xbc284000}, {0xbc286000}, {0xbc288000}, {0xbc28a000}, {0xbc28c000}, {0xbc28e000}, {0xbc290000}, {0xbc292000}, {0xbc294000}, {0xbc296000}, {0xbc298000}, {0xbc29a000}, {0xbc29c000}, {0xbc29e000}, {0xbc2a0000}, {0xbc2a2000}, {0xbc2a4000}, {0xbc2a6000}, {0xbc2a8000}, {0xbc2aa000}, {0xbc2ac000}, {0xbc2ae000}, {0xbc2b0000}, {0xbc2b2000}, {0xbc2b4000}, {0xbc2b6000}, {0xbc2b8000}, {0xbc2ba000}, {0xbc2bc000}, {0xbc2be000}, {0xbc2c0000}, {0xbc2c2000}, {0xbc2c4000}, {0xbc2c6000}, {0xbc2c8000}, {0xbc2ca000}, {0xbc2cc000}, {0xbc2ce000}, {0xbc2d0000}, {0xbc2d2000}, {0xbc2d4000}, {0xbc2d6000}, {0xbc2d8000}, {0xbc2da000}, {0xbc2dc000}, {0xbc2de000}, {0xbc2e0000}, {0xbc2e2000}, {0xbc2e4000}, {0xbc2e6000}, {0xbc2e8000}, {0xbc2ea000}, {0xbc2ec000}, {0xbc2ee000}, {0xbc2f0000}, {0xbc2f2000}, {0xbc2f4000}, {0xbc2f6000}, {0xbc2f8000}, {0xbc2fa000}, {0xbc2fc000}, {0xbc2fe000}, {0xbc300000}, {0xbc302000}, {0xbc304000}, {0xbc306000}, {0xbc308000}, {0xbc30a000}, {0xbc30c000}, {0xbc30e000}, {0xbc310000}, {0xbc312000}, {0xbc314000}, {0xbc316000}, {0xbc318000}, {0xbc31a000}, {0xbc31c000}, {0xbc31e000}, {0xbc320000}, {0xbc322000}, {0xbc324000}, {0xbc326000}, {0xbc328000}, {0xbc32a000}, {0xbc32c000}, {0xbc32e000}, {0xbc330000}, {0xbc332000}, {0xbc334000}, {0xbc336000}, {0xbc338000}, {0xbc33a000}, {0xbc33c000}, {0xbc33e000}, {0xbc340000}, {0xbc342000}, {0xbc344000}, {0xbc346000}, {0xbc348000}, {0xbc34a000}, {0xbc34c000}, {0xbc34e000}, {0xbc350000}, {0xbc352000}, {0xbc354000}, {0xbc356000}, {0xbc358000}, {0xbc35a000}, {0xbc35c000}, {0xbc35e000}, {0xbc360000}, {0xbc362000}, {0xbc364000}, {0xbc366000}, {0xbc368000}, {0xbc36a000}, {0xbc36c000}, {0xbc36e000}, {0xbc370000}, {0xbc372000}, {0xbc374000}, {0xbc376000}, {0xbc378000}, {0xbc37a000}, {0xbc37c000}, {0xbc37e000}, {0xbc380000}, {0xbc382000}, {0xbc384000}, {0xbc386000}, {0xbc388000}, {0xbc38a000}, {0xbc38c000}, {0xbc38e000}, {0xbc390000}, {0xbc392000}, {0xbc394000}, {0xbc396000}, {0xbc398000}, {0xbc39a000}, {0xbc39c000}, {0xbc39e000}, {0xbc3a0000}, {0xbc3a2000}, {0xbc3a4000}, {0xbc3a6000}, {0xbc3a8000}, {0xbc3aa000}, {0xbc3ac000}, {0xbc3ae000}, {0xbc3b0000}, {0xbc3b2000}, {0xbc3b4000}, {0xbc3b6000}, {0xbc3b8000}, {0xbc3ba000}, {0xbc3bc000}, {0xbc3be000}, {0xbc3c0000}, {0xbc3c2000}, {0xbc3c4000}, {0xbc3c6000}, {0xbc3c8000}, {0xbc3ca000}, {0xbc3cc000}, {0xbc3ce000}, {0xbc3d0000}, {0xbc3d2000}, {0xbc3d4000}, {0xbc3d6000}, {0xbc3d8000}, {0xbc3da000}, {0xbc3dc000}, {0xbc3de000}, {0xbc3e0000}, {0xbc3e2000}, {0xbc3e4000}, {0xbc3e6000}, {0xbc3e8000}, {0xbc3ea000}, {0xbc3ec000}, {0xbc3ee000}, {0xbc3f0000}, {0xbc3f2000}, {0xbc3f4000}, {0xbc3f6000}, {0xbc3f8000}, {0xbc3fa000}, {0xbc3fc000}, {0xbc3fe000}, {0xbc400000}, {0xbc402000}, {0xbc404000}, {0xbc406000}, {0xbc408000}, {0xbc40a000}, {0xbc40c000}, {0xbc40e000}, {0xbc410000}, {0xbc412000}, {0xbc414000}, {0xbc416000}, {0xbc418000}, {0xbc41a000}, {0xbc41c000}, {0xbc41e000}, {0xbc420000}, {0xbc422000}, {0xbc424000}, {0xbc426000}, {0xbc428000}, {0xbc42a000}, {0xbc42c000}, {0xbc42e000}, {0xbc430000}, {0xbc432000}, {0xbc434000}, {0xbc436000}, {0xbc438000}, {0xbc43a000}, {0xbc43c000}, {0xbc43e000}, {0xbc440000}, {0xbc442000}, {0xbc444000}, {0xbc446000}, {0xbc448000}, {0xbc44a000}, {0xbc44c000}, {0xbc44e000}, {0xbc450000}, {0xbc452000}, {0xbc454000}, {0xbc456000}, {0xbc458000}, {0xbc45a000}, {0xbc45c000}, {0xbc45e000}, {0xbc460000}, {0xbc462000}, {0xbc464000}, {0xbc466000}, {0xbc468000}, {0xbc46a000}, {0xbc46c000}, {0xbc46e000}, {0xbc470000}, {0xbc472000}, {0xbc474000}, {0xbc476000}, {0xbc478000}, {0xbc47a000}, {0xbc47c000}, {0xbc47e000}, {0xbc480000}, {0xbc482000}, {0xbc484000}, {0xbc486000}, {0xbc488000}, {0xbc48a000}, {0xbc48c000}, {0xbc48e000}, {0xbc490000}, {0xbc492000}, {0xbc494000}, {0xbc496000}, {0xbc498000}, {0xbc49a000}, {0xbc49c000}, {0xbc49e000}, {0xbc4a0000}, {0xbc4a2000}, {0xbc4a4000}, {0xbc4a6000}, {0xbc4a8000}, {0xbc4aa000}, {0xbc4ac000}, {0xbc4ae000}, {0xbc4b0000}, {0xbc4b2000}, {0xbc4b4000}, {0xbc4b6000}, {0xbc4b8000}, {0xbc4ba000}, {0xbc4bc000}, {0xbc4be000}, {0xbc4c0000}, {0xbc4c2000}, {0xbc4c4000}, {0xbc4c6000}, {0xbc4c8000}, {0xbc4ca000}, {0xbc4cc000}, {0xbc4ce000}, {0xbc4d0000}, {0xbc4d2000}, {0xbc4d4000}, {0xbc4d6000}, {0xbc4d8000}, {0xbc4da000}, {0xbc4dc000}, {0xbc4de000}, {0xbc4e0000}, {0xbc4e2000}, {0xbc4e4000}, {0xbc4e6000}, {0xbc4e8000}, {0xbc4ea000}, {0xbc4ec000}, {0xbc4ee000}, {0xbc4f0000}, {0xbc4f2000}, {0xbc4f4000}, {0xbc4f6000}, {0xbc4f8000}, {0xbc4fa000}, {0xbc4fc000}, {0xbc4fe000}, {0xbc500000}, {0xbc502000}, {0xbc504000}, {0xbc506000}, {0xbc508000}, {0xbc50a000}, {0xbc50c000}, {0xbc50e000}, {0xbc510000}, {0xbc512000}, {0xbc514000}, {0xbc516000}, {0xbc518000}, {0xbc51a000}, {0xbc51c000}, {0xbc51e000}, {0xbc520000}, {0xbc522000}, {0xbc524000}, {0xbc526000}, {0xbc528000}, {0xbc52a000}, {0xbc52c000}, {0xbc52e000}, {0xbc530000}, {0xbc532000}, {0xbc534000}, {0xbc536000}, {0xbc538000}, {0xbc53a000}, {0xbc53c000}, {0xbc53e000}, {0xbc540000}, {0xbc542000}, {0xbc544000}, {0xbc546000}, {0xbc548000}, {0xbc54a000}, {0xbc54c000}, {0xbc54e000}, {0xbc550000}, {0xbc552000}, {0xbc554000}, {0xbc556000}, {0xbc558000}, {0xbc55a000}, {0xbc55c000}, {0xbc55e000}, {0xbc560000}, {0xbc562000}, {0xbc564000}, {0xbc566000}, {0xbc568000}, {0xbc56a000}, {0xbc56c000}, {0xbc56e000}, {0xbc570000}, {0xbc572000}, {0xbc574000}, {0xbc576000}, {0xbc578000}, {0xbc57a000}, {0xbc57c000}, {0xbc57e000}, {0xbc580000}, {0xbc582000}, {0xbc584000}, {0xbc586000}, {0xbc588000}, {0xbc58a000}, {0xbc58c000}, {0xbc58e000}, {0xbc590000}, {0xbc592000}, {0xbc594000}, {0xbc596000}, {0xbc598000}, {0xbc59a000}, {0xbc59c000}, {0xbc59e000}, {0xbc5a0000}, {0xbc5a2000}, {0xbc5a4000}, {0xbc5a6000}, {0xbc5a8000}, {0xbc5aa000}, {0xbc5ac000}, {0xbc5ae000}, {0xbc5b0000}, {0xbc5b2000}, {0xbc5b4000}, {0xbc5b6000}, {0xbc5b8000}, {0xbc5ba000}, {0xbc5bc000}, {0xbc5be000}, {0xbc5c0000}, {0xbc5c2000}, {0xbc5c4000}, {0xbc5c6000}, {0xbc5c8000}, {0xbc5ca000}, {0xbc5cc000}, {0xbc5ce000}, {0xbc5d0000}, {0xbc5d2000}, {0xbc5d4000}, {0xbc5d6000}, {0xbc5d8000}, {0xbc5da000}, {0xbc5dc000}, {0xbc5de000}, {0xbc5e0000}, {0xbc5e2000}, {0xbc5e4000}, {0xbc5e6000}, {0xbc5e8000}, {0xbc5ea000}, {0xbc5ec000}, {0xbc5ee000}, {0xbc5f0000}, {0xbc5f2000}, {0xbc5f4000}, {0xbc5f6000}, {0xbc5f8000}, {0xbc5fa000}, {0xbc5fc000}, {0xbc5fe000}, {0xbc600000}, {0xbc602000}, {0xbc604000}, {0xbc606000}, {0xbc608000}, {0xbc60a000}, {0xbc60c000}, {0xbc60e000}, {0xbc610000}, {0xbc612000}, {0xbc614000}, {0xbc616000}, {0xbc618000}, {0xbc61a000}, {0xbc61c000}, {0xbc61e000}, {0xbc620000}, {0xbc622000}, {0xbc624000}, {0xbc626000}, {0xbc628000}, {0xbc62a000}, {0xbc62c000}, {0xbc62e000}, {0xbc630000}, {0xbc632000}, {0xbc634000}, {0xbc636000}, {0xbc638000}, {0xbc63a000}, {0xbc63c000}, {0xbc63e000}, {0xbc640000}, {0xbc642000}, {0xbc644000}, {0xbc646000}, {0xbc648000}, {0xbc64a000}, {0xbc64c000}, {0xbc64e000}, {0xbc650000}, {0xbc652000}, {0xbc654000}, {0xbc656000}, {0xbc658000}, {0xbc65a000}, {0xbc65c000}, {0xbc65e000}, {0xbc660000}, {0xbc662000}, {0xbc664000}, {0xbc666000}, {0xbc668000}, {0xbc66a000}, {0xbc66c000}, {0xbc66e000}, {0xbc670000}, {0xbc672000}, {0xbc674000}, {0xbc676000}, {0xbc678000}, {0xbc67a000}, {0xbc67c000}, {0xbc67e000}, {0xbc680000}, {0xbc682000}, {0xbc684000}, {0xbc686000}, {0xbc688000}, {0xbc68a000}, {0xbc68c000}, {0xbc68e000}, {0xbc690000}, {0xbc692000}, {0xbc694000}, {0xbc696000}, {0xbc698000}, {0xbc69a000}, {0xbc69c000}, {0xbc69e000}, {0xbc6a0000}, {0xbc6a2000}, {0xbc6a4000}, {0xbc6a6000}, {0xbc6a8000}, {0xbc6aa000}, {0xbc6ac000}, {0xbc6ae000}, {0xbc6b0000}, {0xbc6b2000}, {0xbc6b4000}, {0xbc6b6000}, {0xbc6b8000}, {0xbc6ba000}, {0xbc6bc000}, {0xbc6be000}, {0xbc6c0000}, {0xbc6c2000}, {0xbc6c4000}, {0xbc6c6000}, {0xbc6c8000}, {0xbc6ca000}, {0xbc6cc000}, {0xbc6ce000}, {0xbc6d0000}, {0xbc6d2000}, {0xbc6d4000}, {0xbc6d6000}, {0xbc6d8000}, {0xbc6da000}, {0xbc6dc000}, {0xbc6de000}, {0xbc6e0000}, {0xbc6e2000}, {0xbc6e4000}, {0xbc6e6000}, {0xbc6e8000}, {0xbc6ea000}, {0xbc6ec000}, {0xbc6ee000}, {0xbc6f0000}, {0xbc6f2000}, {0xbc6f4000}, {0xbc6f6000}, {0xbc6f8000}, {0xbc6fa000}, {0xbc6fc000}, {0xbc6fe000}, {0xbc700000}, {0xbc702000}, {0xbc704000}, {0xbc706000}, {0xbc708000}, {0xbc70a000}, {0xbc70c000}, {0xbc70e000}, {0xbc710000}, {0xbc712000}, {0xbc714000}, {0xbc716000}, {0xbc718000}, {0xbc71a000}, {0xbc71c000}, {0xbc71e000}, {0xbc720000}, {0xbc722000}, {0xbc724000}, {0xbc726000}, {0xbc728000}, {0xbc72a000}, {0xbc72c000}, {0xbc72e000}, {0xbc730000}, {0xbc732000}, {0xbc734000}, {0xbc736000}, {0xbc738000}, {0xbc73a000}, {0xbc73c000}, {0xbc73e000}, {0xbc740000}, {0xbc742000}, {0xbc744000}, {0xbc746000}, {0xbc748000}, {0xbc74a000}, {0xbc74c000}, {0xbc74e000}, {0xbc750000}, {0xbc752000}, {0xbc754000}, {0xbc756000}, {0xbc758000}, {0xbc75a000}, {0xbc75c000}, {0xbc75e000}, {0xbc760000}, {0xbc762000}, {0xbc764000}, {0xbc766000}, {0xbc768000}, {0xbc76a000}, {0xbc76c000}, {0xbc76e000}, {0xbc770000}, {0xbc772000}, {0xbc774000}, {0xbc776000}, {0xbc778000}, {0xbc77a000}, {0xbc77c000}, {0xbc77e000}, {0xbc780000}, {0xbc782000}, {0xbc784000}, {0xbc786000}, {0xbc788000}, {0xbc78a000}, {0xbc78c000}, {0xbc78e000}, {0xbc790000}, {0xbc792000}, {0xbc794000}, {0xbc796000}, {0xbc798000}, {0xbc79a000}, {0xbc79c000}, {0xbc79e000}, {0xbc7a0000}, {0xbc7a2000}, {0xbc7a4000}, {0xbc7a6000}, {0xbc7a8000}, {0xbc7aa000}, {0xbc7ac000}, {0xbc7ae000}, {0xbc7b0000}, {0xbc7b2000}, {0xbc7b4000}, {0xbc7b6000}, {0xbc7b8000}, {0xbc7ba000}, {0xbc7bc000}, {0xbc7be000}, {0xbc7c0000}, {0xbc7c2000}, {0xbc7c4000}, {0xbc7c6000}, {0xbc7c8000}, {0xbc7ca000}, {0xbc7cc000}, {0xbc7ce000}, {0xbc7d0000}, {0xbc7d2000}, {0xbc7d4000}, {0xbc7d6000}, {0xbc7d8000}, {0xbc7da000}, {0xbc7dc000}, {0xbc7de000}, {0xbc7e0000}, {0xbc7e2000}, {0xbc7e4000}, {0xbc7e6000}, {0xbc7e8000}, {0xbc7ea000}, {0xbc7ec000}, {0xbc7ee000}, {0xbc7f0000}, {0xbc7f2000}, {0xbc7f4000}, {0xbc7f6000}, {0xbc7f8000}, {0xbc7fa000}, {0xbc7fc000}, {0xbc7fe000}, {0xbc800000}, {0xbc802000}, {0xbc804000}, {0xbc806000}, {0xbc808000}, {0xbc80a000}, {0xbc80c000}, {0xbc80e000}, {0xbc810000}, {0xbc812000}, {0xbc814000}, {0xbc816000}, {0xbc818000}, {0xbc81a000}, {0xbc81c000}, {0xbc81e000}, {0xbc820000}, {0xbc822000}, {0xbc824000}, {0xbc826000}, {0xbc828000}, {0xbc82a000}, {0xbc82c000}, {0xbc82e000}, {0xbc830000}, {0xbc832000}, {0xbc834000}, {0xbc836000}, {0xbc838000}, {0xbc83a000}, {0xbc83c000}, {0xbc83e000}, {0xbc840000}, {0xbc842000}, {0xbc844000}, {0xbc846000}, {0xbc848000}, {0xbc84a000}, {0xbc84c000}, {0xbc84e000}, {0xbc850000}, {0xbc852000}, {0xbc854000}, {0xbc856000}, {0xbc858000}, {0xbc85a000}, {0xbc85c000}, {0xbc85e000}, {0xbc860000}, {0xbc862000}, {0xbc864000}, {0xbc866000}, {0xbc868000}, {0xbc86a000}, {0xbc86c000}, {0xbc86e000}, {0xbc870000}, {0xbc872000}, {0xbc874000}, {0xbc876000}, {0xbc878000}, {0xbc87a000}, {0xbc87c000}, {0xbc87e000}, {0xbc880000}, {0xbc882000}, {0xbc884000}, {0xbc886000}, {0xbc888000}, {0xbc88a000}, {0xbc88c000}, {0xbc88e000}, {0xbc890000}, {0xbc892000}, {0xbc894000}, {0xbc896000}, {0xbc898000}, {0xbc89a000}, {0xbc89c000}, {0xbc89e000}, {0xbc8a0000}, {0xbc8a2000}, {0xbc8a4000}, {0xbc8a6000}, {0xbc8a8000}, {0xbc8aa000}, {0xbc8ac000}, {0xbc8ae000}, {0xbc8b0000}, {0xbc8b2000}, {0xbc8b4000}, {0xbc8b6000}, {0xbc8b8000}, {0xbc8ba000}, {0xbc8bc000}, {0xbc8be000}, {0xbc8c0000}, {0xbc8c2000}, {0xbc8c4000}, {0xbc8c6000}, {0xbc8c8000}, {0xbc8ca000}, {0xbc8cc000}, {0xbc8ce000}, {0xbc8d0000}, {0xbc8d2000}, {0xbc8d4000}, {0xbc8d6000}, {0xbc8d8000}, {0xbc8da000}, {0xbc8dc000}, {0xbc8de000}, {0xbc8e0000}, {0xbc8e2000}, {0xbc8e4000}, {0xbc8e6000}, {0xbc8e8000}, {0xbc8ea000}, {0xbc8ec000}, {0xbc8ee000}, {0xbc8f0000}, {0xbc8f2000}, {0xbc8f4000}, {0xbc8f6000}, {0xbc8f8000}, {0xbc8fa000}, {0xbc8fc000}, {0xbc8fe000}, {0xbc900000}, {0xbc902000}, {0xbc904000}, {0xbc906000}, {0xbc908000}, {0xbc90a000}, {0xbc90c000}, {0xbc90e000}, {0xbc910000}, {0xbc912000}, {0xbc914000}, {0xbc916000}, {0xbc918000}, {0xbc91a000}, {0xbc91c000}, {0xbc91e000}, {0xbc920000}, {0xbc922000}, {0xbc924000}, {0xbc926000}, {0xbc928000}, {0xbc92a000}, {0xbc92c000}, {0xbc92e000}, {0xbc930000}, {0xbc932000}, {0xbc934000}, {0xbc936000}, {0xbc938000}, {0xbc93a000}, {0xbc93c000}, {0xbc93e000}, {0xbc940000}, {0xbc942000}, {0xbc944000}, {0xbc946000}, {0xbc948000}, {0xbc94a000}, {0xbc94c000}, {0xbc94e000}, {0xbc950000}, {0xbc952000}, {0xbc954000}, {0xbc956000}, {0xbc958000}, {0xbc95a000}, {0xbc95c000}, {0xbc95e000}, {0xbc960000}, {0xbc962000}, {0xbc964000}, {0xbc966000}, {0xbc968000}, {0xbc96a000}, {0xbc96c000}, {0xbc96e000}, {0xbc970000}, {0xbc972000}, {0xbc974000}, {0xbc976000}, {0xbc978000}, {0xbc97a000}, {0xbc97c000}, {0xbc97e000}, {0xbc980000}, {0xbc982000}, {0xbc984000}, {0xbc986000}, {0xbc988000}, {0xbc98a000}, {0xbc98c000}, {0xbc98e000}, {0xbc990000}, {0xbc992000}, {0xbc994000}, {0xbc996000}, {0xbc998000}, {0xbc99a000}, {0xbc99c000}, {0xbc99e000}, {0xbc9a0000}, {0xbc9a2000}, {0xbc9a4000}, {0xbc9a6000}, {0xbc9a8000}, {0xbc9aa000}, {0xbc9ac000}, {0xbc9ae000}, {0xbc9b0000}, {0xbc9b2000}, {0xbc9b4000}, {0xbc9b6000}, {0xbc9b8000}, {0xbc9ba000}, {0xbc9bc000}, {0xbc9be000}, {0xbc9c0000}, {0xbc9c2000}, {0xbc9c4000}, {0xbc9c6000}, {0xbc9c8000}, {0xbc9ca000}, {0xbc9cc000}, {0xbc9ce000}, {0xbc9d0000}, {0xbc9d2000}, {0xbc9d4000}, {0xbc9d6000}, {0xbc9d8000}, {0xbc9da000}, {0xbc9dc000}, {0xbc9de000}, {0xbc9e0000}, {0xbc9e2000}, {0xbc9e4000}, {0xbc9e6000}, {0xbc9e8000}, {0xbc9ea000}, {0xbc9ec000}, {0xbc9ee000}, {0xbc9f0000}, {0xbc9f2000}, {0xbc9f4000}, {0xbc9f6000}, {0xbc9f8000}, {0xbc9fa000}, {0xbc9fc000}, {0xbc9fe000}, {0xbca00000}, {0xbca02000}, {0xbca04000}, {0xbca06000}, {0xbca08000}, {0xbca0a000}, {0xbca0c000}, {0xbca0e000}, {0xbca10000}, {0xbca12000}, {0xbca14000}, {0xbca16000}, {0xbca18000}, {0xbca1a000}, {0xbca1c000}, {0xbca1e000}, {0xbca20000}, {0xbca22000}, {0xbca24000}, {0xbca26000}, {0xbca28000}, {0xbca2a000}, {0xbca2c000}, {0xbca2e000}, {0xbca30000}, {0xbca32000}, {0xbca34000}, {0xbca36000}, {0xbca38000}, {0xbca3a000}, {0xbca3c000}, {0xbca3e000}, {0xbca40000}, {0xbca42000}, {0xbca44000}, {0xbca46000}, {0xbca48000}, {0xbca4a000}, {0xbca4c000}, {0xbca4e000}, {0xbca50000}, {0xbca52000}, {0xbca54000}, {0xbca56000}, {0xbca58000}, {0xbca5a000}, {0xbca5c000}, {0xbca5e000}, {0xbca60000}, {0xbca62000}, {0xbca64000}, {0xbca66000}, {0xbca68000}, {0xbca6a000}, {0xbca6c000}, {0xbca6e000}, {0xbca70000}, {0xbca72000}, {0xbca74000}, {0xbca76000}, {0xbca78000}, {0xbca7a000}, {0xbca7c000}, {0xbca7e000}, {0xbca80000}, {0xbca82000}, {0xbca84000}, {0xbca86000}, {0xbca88000}, {0xbca8a000}, {0xbca8c000}, {0xbca8e000}, {0xbca90000}, {0xbca92000}, {0xbca94000}, {0xbca96000}, {0xbca98000}, {0xbca9a000}, {0xbca9c000}, {0xbca9e000}, {0xbcaa0000}, {0xbcaa2000}, {0xbcaa4000}, {0xbcaa6000}, {0xbcaa8000}, {0xbcaaa000}, {0xbcaac000}, {0xbcaae000}, {0xbcab0000}, {0xbcab2000}, {0xbcab4000}, {0xbcab6000}, {0xbcab8000}, {0xbcaba000}, {0xbcabc000}, {0xbcabe000}, {0xbcac0000}, {0xbcac2000}, {0xbcac4000}, {0xbcac6000}, {0xbcac8000}, {0xbcaca000}, {0xbcacc000}, {0xbcace000}, {0xbcad0000}, {0xbcad2000}, {0xbcad4000}, {0xbcad6000}, {0xbcad8000}, {0xbcada000}, {0xbcadc000}, {0xbcade000}, {0xbcae0000}, {0xbcae2000}, {0xbcae4000}, {0xbcae6000}, {0xbcae8000}, {0xbcaea000}, {0xbcaec000}, {0xbcaee000}, {0xbcaf0000}, {0xbcaf2000}, {0xbcaf4000}, {0xbcaf6000}, {0xbcaf8000}, {0xbcafa000}, {0xbcafc000}, {0xbcafe000}, {0xbcb00000}, {0xbcb02000}, {0xbcb04000}, {0xbcb06000}, {0xbcb08000}, {0xbcb0a000}, {0xbcb0c000}, {0xbcb0e000}, {0xbcb10000}, {0xbcb12000}, {0xbcb14000}, {0xbcb16000}, {0xbcb18000}, {0xbcb1a000}, {0xbcb1c000}, {0xbcb1e000}, {0xbcb20000}, {0xbcb22000}, {0xbcb24000}, {0xbcb26000}, {0xbcb28000}, {0xbcb2a000}, {0xbcb2c000}, {0xbcb2e000}, {0xbcb30000}, {0xbcb32000}, {0xbcb34000}, {0xbcb36000}, {0xbcb38000}, {0xbcb3a000}, {0xbcb3c000}, {0xbcb3e000}, {0xbcb40000}, {0xbcb42000}, {0xbcb44000}, {0xbcb46000}, {0xbcb48000}, {0xbcb4a000}, {0xbcb4c000}, {0xbcb4e000}, {0xbcb50000}, {0xbcb52000}, {0xbcb54000}, {0xbcb56000}, {0xbcb58000}, {0xbcb5a000}, {0xbcb5c000}, {0xbcb5e000}, {0xbcb60000}, {0xbcb62000}, {0xbcb64000}, {0xbcb66000}, {0xbcb68000}, {0xbcb6a000}, {0xbcb6c000}, {0xbcb6e000}, {0xbcb70000}, {0xbcb72000}, {0xbcb74000}, {0xbcb76000}, {0xbcb78000}, {0xbcb7a000}, {0xbcb7c000}, {0xbcb7e000}, {0xbcb80000}, {0xbcb82000}, {0xbcb84000}, {0xbcb86000}, {0xbcb88000}, {0xbcb8a000}, {0xbcb8c000}, {0xbcb8e000}, {0xbcb90000}, {0xbcb92000}, {0xbcb94000}, {0xbcb96000}, {0xbcb98000}, {0xbcb9a000}, {0xbcb9c000}, {0xbcb9e000}, {0xbcba0000}, {0xbcba2000}, {0xbcba4000}, {0xbcba6000}, {0xbcba8000}, {0xbcbaa000}, {0xbcbac000}, {0xbcbae000}, {0xbcbb0000}, {0xbcbb2000}, {0xbcbb4000}, {0xbcbb6000}, {0xbcbb8000}, {0xbcbba000}, {0xbcbbc000}, {0xbcbbe000}, {0xbcbc0000}, {0xbcbc2000}, {0xbcbc4000}, {0xbcbc6000}, {0xbcbc8000}, {0xbcbca000}, {0xbcbcc000}, {0xbcbce000}, {0xbcbd0000}, {0xbcbd2000}, {0xbcbd4000}, {0xbcbd6000}, {0xbcbd8000}, {0xbcbda000}, {0xbcbdc000}, {0xbcbde000}, {0xbcbe0000}, {0xbcbe2000}, {0xbcbe4000}, {0xbcbe6000}, {0xbcbe8000}, {0xbcbea000}, {0xbcbec000}, {0xbcbee000}, {0xbcbf0000}, {0xbcbf2000}, {0xbcbf4000}, {0xbcbf6000}, {0xbcbf8000}, {0xbcbfa000}, {0xbcbfc000}, {0xbcbfe000}, {0xbcc00000}, {0xbcc02000}, {0xbcc04000}, {0xbcc06000}, {0xbcc08000}, {0xbcc0a000}, {0xbcc0c000}, {0xbcc0e000}, {0xbcc10000}, {0xbcc12000}, {0xbcc14000}, {0xbcc16000}, {0xbcc18000}, {0xbcc1a000}, {0xbcc1c000}, {0xbcc1e000}, {0xbcc20000}, {0xbcc22000}, {0xbcc24000}, {0xbcc26000}, {0xbcc28000}, {0xbcc2a000}, {0xbcc2c000}, {0xbcc2e000}, {0xbcc30000}, {0xbcc32000}, {0xbcc34000}, {0xbcc36000}, {0xbcc38000}, {0xbcc3a000}, {0xbcc3c000}, {0xbcc3e000}, {0xbcc40000}, {0xbcc42000}, {0xbcc44000}, {0xbcc46000}, {0xbcc48000}, {0xbcc4a000}, {0xbcc4c000}, {0xbcc4e000}, {0xbcc50000}, {0xbcc52000}, {0xbcc54000}, {0xbcc56000}, {0xbcc58000}, {0xbcc5a000}, {0xbcc5c000}, {0xbcc5e000}, {0xbcc60000}, {0xbcc62000}, {0xbcc64000}, {0xbcc66000}, {0xbcc68000}, {0xbcc6a000}, {0xbcc6c000}, {0xbcc6e000}, {0xbcc70000}, {0xbcc72000}, {0xbcc74000}, {0xbcc76000}, {0xbcc78000}, {0xbcc7a000}, {0xbcc7c000}, {0xbcc7e000}, {0xbcc80000}, {0xbcc82000}, {0xbcc84000}, {0xbcc86000}, {0xbcc88000}, {0xbcc8a000}, {0xbcc8c000}, {0xbcc8e000}, {0xbcc90000}, {0xbcc92000}, {0xbcc94000}, {0xbcc96000}, {0xbcc98000}, {0xbcc9a000}, {0xbcc9c000}, {0xbcc9e000}, {0xbcca0000}, {0xbcca2000}, {0xbcca4000}, {0xbcca6000}, {0xbcca8000}, {0xbccaa000}, {0xbccac000}, {0xbccae000}, {0xbccb0000}, {0xbccb2000}, {0xbccb4000}, {0xbccb6000}, {0xbccb8000}, {0xbccba000}, {0xbccbc000}, {0xbccbe000}, {0xbccc0000}, {0xbccc2000}, {0xbccc4000}, {0xbccc6000}, {0xbccc8000}, {0xbccca000}, {0xbcccc000}, {0xbccce000}, {0xbccd0000}, {0xbccd2000}, {0xbccd4000}, {0xbccd6000}, {0xbccd8000}, {0xbccda000}, {0xbccdc000}, {0xbccde000}, {0xbcce0000}, {0xbcce2000}, {0xbcce4000}, {0xbcce6000}, {0xbcce8000}, {0xbccea000}, {0xbccec000}, {0xbccee000}, {0xbccf0000}, {0xbccf2000}, {0xbccf4000}, {0xbccf6000}, {0xbccf8000}, {0xbccfa000}, {0xbccfc000}, {0xbccfe000}, {0xbcd00000}, {0xbcd02000}, {0xbcd04000}, {0xbcd06000}, {0xbcd08000}, {0xbcd0a000}, {0xbcd0c000}, {0xbcd0e000}, {0xbcd10000}, {0xbcd12000}, {0xbcd14000}, {0xbcd16000}, {0xbcd18000}, {0xbcd1a000}, {0xbcd1c000}, {0xbcd1e000}, {0xbcd20000}, {0xbcd22000}, {0xbcd24000}, {0xbcd26000}, {0xbcd28000}, {0xbcd2a000}, {0xbcd2c000}, {0xbcd2e000}, {0xbcd30000}, {0xbcd32000}, {0xbcd34000}, {0xbcd36000}, {0xbcd38000}, {0xbcd3a000}, {0xbcd3c000}, {0xbcd3e000}, {0xbcd40000}, {0xbcd42000}, {0xbcd44000}, {0xbcd46000}, {0xbcd48000}, {0xbcd4a000}, {0xbcd4c000}, {0xbcd4e000}, {0xbcd50000}, {0xbcd52000}, {0xbcd54000}, {0xbcd56000}, {0xbcd58000}, {0xbcd5a000}, {0xbcd5c000}, {0xbcd5e000}, {0xbcd60000}, {0xbcd62000}, {0xbcd64000}, {0xbcd66000}, {0xbcd68000}, {0xbcd6a000}, {0xbcd6c000}, {0xbcd6e000}, {0xbcd70000}, {0xbcd72000}, {0xbcd74000}, {0xbcd76000}, {0xbcd78000}, {0xbcd7a000}, {0xbcd7c000}, {0xbcd7e000}, {0xbcd80000}, {0xbcd82000}, {0xbcd84000}, {0xbcd86000}, {0xbcd88000}, {0xbcd8a000}, {0xbcd8c000}, {0xbcd8e000}, {0xbcd90000}, {0xbcd92000}, {0xbcd94000}, {0xbcd96000}, {0xbcd98000}, {0xbcd9a000}, {0xbcd9c000}, {0xbcd9e000}, {0xbcda0000}, {0xbcda2000}, {0xbcda4000}, {0xbcda6000}, {0xbcda8000}, {0xbcdaa000}, {0xbcdac000}, {0xbcdae000}, {0xbcdb0000}, {0xbcdb2000}, {0xbcdb4000}, {0xbcdb6000}, {0xbcdb8000}, {0xbcdba000}, {0xbcdbc000}, {0xbcdbe000}, {0xbcdc0000}, {0xbcdc2000}, {0xbcdc4000}, {0xbcdc6000}, {0xbcdc8000}, {0xbcdca000}, {0xbcdcc000}, {0xbcdce000}, {0xbcdd0000}, {0xbcdd2000}, {0xbcdd4000}, {0xbcdd6000}, {0xbcdd8000}, {0xbcdda000}, {0xbcddc000}, {0xbcdde000}, {0xbcde0000}, {0xbcde2000}, {0xbcde4000}, {0xbcde6000}, {0xbcde8000}, {0xbcdea000}, {0xbcdec000}, {0xbcdee000}, {0xbcdf0000}, {0xbcdf2000}, {0xbcdf4000}, {0xbcdf6000}, {0xbcdf8000}, {0xbcdfa000}, {0xbcdfc000}, {0xbcdfe000}, {0xbce00000}, {0xbce02000}, {0xbce04000}, {0xbce06000}, {0xbce08000}, {0xbce0a000}, {0xbce0c000}, {0xbce0e000}, {0xbce10000}, {0xbce12000}, {0xbce14000}, {0xbce16000}, {0xbce18000}, {0xbce1a000}, {0xbce1c000}, {0xbce1e000}, {0xbce20000}, {0xbce22000}, {0xbce24000}, {0xbce26000}, {0xbce28000}, {0xbce2a000}, {0xbce2c000}, {0xbce2e000}, {0xbce30000}, {0xbce32000}, {0xbce34000}, {0xbce36000}, {0xbce38000}, {0xbce3a000}, {0xbce3c000}, {0xbce3e000}, {0xbce40000}, {0xbce42000}, {0xbce44000}, {0xbce46000}, {0xbce48000}, {0xbce4a000}, {0xbce4c000}, {0xbce4e000}, {0xbce50000}, {0xbce52000}, {0xbce54000}, {0xbce56000}, {0xbce58000}, {0xbce5a000}, {0xbce5c000}, {0xbce5e000}, {0xbce60000}, {0xbce62000}, {0xbce64000}, {0xbce66000}, {0xbce68000}, {0xbce6a000}, {0xbce6c000}, {0xbce6e000}, {0xbce70000}, {0xbce72000}, {0xbce74000}, {0xbce76000}, {0xbce78000}, {0xbce7a000}, {0xbce7c000}, {0xbce7e000}, {0xbce80000}, {0xbce82000}, {0xbce84000}, {0xbce86000}, {0xbce88000}, {0xbce8a000}, {0xbce8c000}, {0xbce8e000}, {0xbce90000}, {0xbce92000}, {0xbce94000}, {0xbce96000}, {0xbce98000}, {0xbce9a000}, {0xbce9c000}, {0xbce9e000}, {0xbcea0000}, {0xbcea2000}, {0xbcea4000}, {0xbcea6000}, {0xbcea8000}, {0xbceaa000}, {0xbceac000}, {0xbceae000}, {0xbceb0000}, {0xbceb2000}, {0xbceb4000}, {0xbceb6000}, {0xbceb8000}, {0xbceba000}, {0xbcebc000}, {0xbcebe000}, {0xbcec0000}, {0xbcec2000}, {0xbcec4000}, {0xbcec6000}, {0xbcec8000}, {0xbceca000}, {0xbcecc000}, {0xbcece000}, {0xbced0000}, {0xbced2000}, {0xbced4000}, {0xbced6000}, {0xbced8000}, {0xbceda000}, {0xbcedc000}, {0xbcede000}, {0xbcee0000}, {0xbcee2000}, {0xbcee4000}, {0xbcee6000}, {0xbcee8000}, {0xbceea000}, {0xbceec000}, {0xbceee000}, {0xbcef0000}, {0xbcef2000}, {0xbcef4000}, {0xbcef6000}, {0xbcef8000}, {0xbcefa000}, {0xbcefc000}, {0xbcefe000}, {0xbcf00000}, {0xbcf02000}, {0xbcf04000}, {0xbcf06000}, {0xbcf08000}, {0xbcf0a000}, {0xbcf0c000}, {0xbcf0e000}, {0xbcf10000}, {0xbcf12000}, {0xbcf14000}, {0xbcf16000}, {0xbcf18000}, {0xbcf1a000}, {0xbcf1c000}, {0xbcf1e000}, {0xbcf20000}, {0xbcf22000}, {0xbcf24000}, {0xbcf26000}, {0xbcf28000}, {0xbcf2a000}, {0xbcf2c000}, {0xbcf2e000}, {0xbcf30000}, {0xbcf32000}, {0xbcf34000}, {0xbcf36000}, {0xbcf38000}, {0xbcf3a000}, {0xbcf3c000}, {0xbcf3e000}, {0xbcf40000}, {0xbcf42000}, {0xbcf44000}, {0xbcf46000}, {0xbcf48000}, {0xbcf4a000}, {0xbcf4c000}, {0xbcf4e000}, {0xbcf50000}, {0xbcf52000}, {0xbcf54000}, {0xbcf56000}, {0xbcf58000}, {0xbcf5a000}, {0xbcf5c000}, {0xbcf5e000}, {0xbcf60000}, {0xbcf62000}, {0xbcf64000}, {0xbcf66000}, {0xbcf68000}, {0xbcf6a000}, {0xbcf6c000}, {0xbcf6e000}, {0xbcf70000}, {0xbcf72000}, {0xbcf74000}, {0xbcf76000}, {0xbcf78000}, {0xbcf7a000}, {0xbcf7c000}, {0xbcf7e000}, {0xbcf80000}, {0xbcf82000}, {0xbcf84000}, {0xbcf86000}, {0xbcf88000}, {0xbcf8a000}, {0xbcf8c000}, {0xbcf8e000}, {0xbcf90000}, {0xbcf92000}, {0xbcf94000}, {0xbcf96000}, {0xbcf98000}, {0xbcf9a000}, {0xbcf9c000}, {0xbcf9e000}, {0xbcfa0000}, {0xbcfa2000}, {0xbcfa4000}, {0xbcfa6000}, {0xbcfa8000}, {0xbcfaa000}, {0xbcfac000}, {0xbcfae000}, {0xbcfb0000}, {0xbcfb2000}, {0xbcfb4000}, {0xbcfb6000}, {0xbcfb8000}, {0xbcfba000}, {0xbcfbc000}, {0xbcfbe000}, {0xbcfc0000}, {0xbcfc2000}, {0xbcfc4000}, {0xbcfc6000}, {0xbcfc8000}, {0xbcfca000}, {0xbcfcc000}, {0xbcfce000}, {0xbcfd0000}, {0xbcfd2000}, {0xbcfd4000}, {0xbcfd6000}, {0xbcfd8000}, {0xbcfda000}, {0xbcfdc000}, {0xbcfde000}, {0xbcfe0000}, {0xbcfe2000}, {0xbcfe4000}, {0xbcfe6000}, {0xbcfe8000}, {0xbcfea000}, {0xbcfec000}, {0xbcfee000}, {0xbcff0000}, {0xbcff2000}, {0xbcff4000}, {0xbcff6000}, {0xbcff8000}, {0xbcffa000}, {0xbcffc000}, {0xbcffe000}, {0xbd000000}, {0xbd002000}, {0xbd004000}, {0xbd006000}, {0xbd008000}, {0xbd00a000}, {0xbd00c000}, {0xbd00e000}, {0xbd010000}, {0xbd012000}, {0xbd014000}, {0xbd016000}, {0xbd018000}, {0xbd01a000}, {0xbd01c000}, {0xbd01e000}, {0xbd020000}, {0xbd022000}, {0xbd024000}, {0xbd026000}, {0xbd028000}, {0xbd02a000}, {0xbd02c000}, {0xbd02e000}, {0xbd030000}, {0xbd032000}, {0xbd034000}, {0xbd036000}, {0xbd038000}, {0xbd03a000}, {0xbd03c000}, {0xbd03e000}, {0xbd040000}, {0xbd042000}, {0xbd044000}, {0xbd046000}, {0xbd048000}, {0xbd04a000}, {0xbd04c000}, {0xbd04e000}, {0xbd050000}, {0xbd052000}, {0xbd054000}, {0xbd056000}, {0xbd058000}, {0xbd05a000}, {0xbd05c000}, {0xbd05e000}, {0xbd060000}, {0xbd062000}, {0xbd064000}, {0xbd066000}, {0xbd068000}, {0xbd06a000}, {0xbd06c000}, {0xbd06e000}, {0xbd070000}, {0xbd072000}, {0xbd074000}, {0xbd076000}, {0xbd078000}, {0xbd07a000}, {0xbd07c000}, {0xbd07e000}, {0xbd080000}, {0xbd082000}, {0xbd084000}, {0xbd086000}, {0xbd088000}, {0xbd08a000}, {0xbd08c000}, {0xbd08e000}, {0xbd090000}, {0xbd092000}, {0xbd094000}, {0xbd096000}, {0xbd098000}, {0xbd09a000}, {0xbd09c000}, {0xbd09e000}, {0xbd0a0000}, {0xbd0a2000}, {0xbd0a4000}, {0xbd0a6000}, {0xbd0a8000}, {0xbd0aa000}, {0xbd0ac000}, {0xbd0ae000}, {0xbd0b0000}, {0xbd0b2000}, {0xbd0b4000}, {0xbd0b6000}, {0xbd0b8000}, {0xbd0ba000}, {0xbd0bc000}, {0xbd0be000}, {0xbd0c0000}, {0xbd0c2000}, {0xbd0c4000}, {0xbd0c6000}, {0xbd0c8000}, {0xbd0ca000}, {0xbd0cc000}, {0xbd0ce000}, {0xbd0d0000}, {0xbd0d2000}, {0xbd0d4000}, {0xbd0d6000}, {0xbd0d8000}, {0xbd0da000}, {0xbd0dc000}, {0xbd0de000}, {0xbd0e0000}, {0xbd0e2000}, {0xbd0e4000}, {0xbd0e6000}, {0xbd0e8000}, {0xbd0ea000}, {0xbd0ec000}, {0xbd0ee000}, {0xbd0f0000}, {0xbd0f2000}, {0xbd0f4000}, {0xbd0f6000}, {0xbd0f8000}, {0xbd0fa000}, {0xbd0fc000}, {0xbd0fe000}, {0xbd100000}, {0xbd102000}, {0xbd104000}, {0xbd106000}, {0xbd108000}, {0xbd10a000}, {0xbd10c000}, {0xbd10e000}, {0xbd110000}, {0xbd112000}, {0xbd114000}, {0xbd116000}, {0xbd118000}, {0xbd11a000}, {0xbd11c000}, {0xbd11e000}, {0xbd120000}, {0xbd122000}, {0xbd124000}, {0xbd126000}, {0xbd128000}, {0xbd12a000}, {0xbd12c000}, {0xbd12e000}, {0xbd130000}, {0xbd132000}, {0xbd134000}, {0xbd136000}, {0xbd138000}, {0xbd13a000}, {0xbd13c000}, {0xbd13e000}, {0xbd140000}, {0xbd142000}, {0xbd144000}, {0xbd146000}, {0xbd148000}, {0xbd14a000}, {0xbd14c000}, {0xbd14e000}, {0xbd150000}, {0xbd152000}, {0xbd154000}, {0xbd156000}, {0xbd158000}, {0xbd15a000}, {0xbd15c000}, {0xbd15e000}, {0xbd160000}, {0xbd162000}, {0xbd164000}, {0xbd166000}, {0xbd168000}, {0xbd16a000}, {0xbd16c000}, {0xbd16e000}, {0xbd170000}, {0xbd172000}, {0xbd174000}, {0xbd176000}, {0xbd178000}, {0xbd17a000}, {0xbd17c000}, {0xbd17e000}, {0xbd180000}, {0xbd182000}, {0xbd184000}, {0xbd186000}, {0xbd188000}, {0xbd18a000}, {0xbd18c000}, {0xbd18e000}, {0xbd190000}, {0xbd192000}, {0xbd194000}, {0xbd196000}, {0xbd198000}, {0xbd19a000}, {0xbd19c000}, {0xbd19e000}, {0xbd1a0000}, {0xbd1a2000}, {0xbd1a4000}, {0xbd1a6000}, {0xbd1a8000}, {0xbd1aa000}, {0xbd1ac000}, {0xbd1ae000}, {0xbd1b0000}, {0xbd1b2000}, {0xbd1b4000}, {0xbd1b6000}, {0xbd1b8000}, {0xbd1ba000}, {0xbd1bc000}, {0xbd1be000}, {0xbd1c0000}, {0xbd1c2000}, {0xbd1c4000}, {0xbd1c6000}, {0xbd1c8000}, {0xbd1ca000}, {0xbd1cc000}, {0xbd1ce000}, {0xbd1d0000}, {0xbd1d2000}, {0xbd1d4000}, {0xbd1d6000}, {0xbd1d8000}, {0xbd1da000}, {0xbd1dc000}, {0xbd1de000}, {0xbd1e0000}, {0xbd1e2000}, {0xbd1e4000}, {0xbd1e6000}, {0xbd1e8000}, {0xbd1ea000}, {0xbd1ec000}, {0xbd1ee000}, {0xbd1f0000}, {0xbd1f2000}, {0xbd1f4000}, {0xbd1f6000}, {0xbd1f8000}, {0xbd1fa000}, {0xbd1fc000}, {0xbd1fe000}, {0xbd200000}, {0xbd202000}, {0xbd204000}, {0xbd206000}, {0xbd208000}, {0xbd20a000}, {0xbd20c000}, {0xbd20e000}, {0xbd210000}, {0xbd212000}, {0xbd214000}, {0xbd216000}, {0xbd218000}, {0xbd21a000}, {0xbd21c000}, {0xbd21e000}, {0xbd220000}, {0xbd222000}, {0xbd224000}, {0xbd226000}, {0xbd228000}, {0xbd22a000}, {0xbd22c000}, {0xbd22e000}, {0xbd230000}, {0xbd232000}, {0xbd234000}, {0xbd236000}, {0xbd238000}, {0xbd23a000}, {0xbd23c000}, {0xbd23e000}, {0xbd240000}, {0xbd242000}, {0xbd244000}, {0xbd246000}, {0xbd248000}, {0xbd24a000}, {0xbd24c000}, {0xbd24e000}, {0xbd250000}, {0xbd252000}, {0xbd254000}, {0xbd256000}, {0xbd258000}, {0xbd25a000}, {0xbd25c000}, {0xbd25e000}, {0xbd260000}, {0xbd262000}, {0xbd264000}, {0xbd266000}, {0xbd268000}, {0xbd26a000}, {0xbd26c000}, {0xbd26e000}, {0xbd270000}, {0xbd272000}, {0xbd274000}, {0xbd276000}, {0xbd278000}, {0xbd27a000}, {0xbd27c000}, {0xbd27e000}, {0xbd280000}, {0xbd282000}, {0xbd284000}, {0xbd286000}, {0xbd288000}, {0xbd28a000}, {0xbd28c000}, {0xbd28e000}, {0xbd290000}, {0xbd292000}, {0xbd294000}, {0xbd296000}, {0xbd298000}, {0xbd29a000}, {0xbd29c000}, {0xbd29e000}, {0xbd2a0000}, {0xbd2a2000}, {0xbd2a4000}, {0xbd2a6000}, {0xbd2a8000}, {0xbd2aa000}, {0xbd2ac000}, {0xbd2ae000}, {0xbd2b0000}, {0xbd2b2000}, {0xbd2b4000}, {0xbd2b6000}, {0xbd2b8000}, {0xbd2ba000}, {0xbd2bc000}, {0xbd2be000}, {0xbd2c0000}, {0xbd2c2000}, {0xbd2c4000}, {0xbd2c6000}, {0xbd2c8000}, {0xbd2ca000}, {0xbd2cc000}, {0xbd2ce000}, {0xbd2d0000}, {0xbd2d2000}, {0xbd2d4000}, {0xbd2d6000}, {0xbd2d8000}, {0xbd2da000}, {0xbd2dc000}, {0xbd2de000}, {0xbd2e0000}, {0xbd2e2000}, {0xbd2e4000}, {0xbd2e6000}, {0xbd2e8000}, {0xbd2ea000}, {0xbd2ec000}, {0xbd2ee000}, {0xbd2f0000}, {0xbd2f2000}, {0xbd2f4000}, {0xbd2f6000}, {0xbd2f8000}, {0xbd2fa000}, {0xbd2fc000}, {0xbd2fe000}, {0xbd300000}, {0xbd302000}, {0xbd304000}, {0xbd306000}, {0xbd308000}, {0xbd30a000}, {0xbd30c000}, {0xbd30e000}, {0xbd310000}, {0xbd312000}, {0xbd314000}, {0xbd316000}, {0xbd318000}, {0xbd31a000}, {0xbd31c000}, {0xbd31e000}, {0xbd320000}, {0xbd322000}, {0xbd324000}, {0xbd326000}, {0xbd328000}, {0xbd32a000}, {0xbd32c000}, {0xbd32e000}, {0xbd330000}, {0xbd332000}, {0xbd334000}, {0xbd336000}, {0xbd338000}, {0xbd33a000}, {0xbd33c000}, {0xbd33e000}, {0xbd340000}, {0xbd342000}, {0xbd344000}, {0xbd346000}, {0xbd348000}, {0xbd34a000}, {0xbd34c000}, {0xbd34e000}, {0xbd350000}, {0xbd352000}, {0xbd354000}, {0xbd356000}, {0xbd358000}, {0xbd35a000}, {0xbd35c000}, {0xbd35e000}, {0xbd360000}, {0xbd362000}, {0xbd364000}, {0xbd366000}, {0xbd368000}, {0xbd36a000}, {0xbd36c000}, {0xbd36e000}, {0xbd370000}, {0xbd372000}, {0xbd374000}, {0xbd376000}, {0xbd378000}, {0xbd37a000}, {0xbd37c000}, {0xbd37e000}, {0xbd380000}, {0xbd382000}, {0xbd384000}, {0xbd386000}, {0xbd388000}, {0xbd38a000}, {0xbd38c000}, {0xbd38e000}, {0xbd390000}, {0xbd392000}, {0xbd394000}, {0xbd396000}, {0xbd398000}, {0xbd39a000}, {0xbd39c000}, {0xbd39e000}, {0xbd3a0000}, {0xbd3a2000}, {0xbd3a4000}, {0xbd3a6000}, {0xbd3a8000}, {0xbd3aa000}, {0xbd3ac000}, {0xbd3ae000}, {0xbd3b0000}, {0xbd3b2000}, {0xbd3b4000}, {0xbd3b6000}, {0xbd3b8000}, {0xbd3ba000}, {0xbd3bc000}, {0xbd3be000}, {0xbd3c0000}, {0xbd3c2000}, {0xbd3c4000}, {0xbd3c6000}, {0xbd3c8000}, {0xbd3ca000}, {0xbd3cc000}, {0xbd3ce000}, {0xbd3d0000}, {0xbd3d2000}, {0xbd3d4000}, {0xbd3d6000}, {0xbd3d8000}, {0xbd3da000}, {0xbd3dc000}, {0xbd3de000}, {0xbd3e0000}, {0xbd3e2000}, {0xbd3e4000}, {0xbd3e6000}, {0xbd3e8000}, {0xbd3ea000}, {0xbd3ec000}, {0xbd3ee000}, {0xbd3f0000}, {0xbd3f2000}, {0xbd3f4000}, {0xbd3f6000}, {0xbd3f8000}, {0xbd3fa000}, {0xbd3fc000}, {0xbd3fe000}, {0xbd400000}, {0xbd402000}, {0xbd404000}, {0xbd406000}, {0xbd408000}, {0xbd40a000}, {0xbd40c000}, {0xbd40e000}, {0xbd410000}, {0xbd412000}, {0xbd414000}, {0xbd416000}, {0xbd418000}, {0xbd41a000}, {0xbd41c000}, {0xbd41e000}, {0xbd420000}, {0xbd422000}, {0xbd424000}, {0xbd426000}, {0xbd428000}, {0xbd42a000}, {0xbd42c000}, {0xbd42e000}, {0xbd430000}, {0xbd432000}, {0xbd434000}, {0xbd436000}, {0xbd438000}, {0xbd43a000}, {0xbd43c000}, {0xbd43e000}, {0xbd440000}, {0xbd442000}, {0xbd444000}, {0xbd446000}, {0xbd448000}, {0xbd44a000}, {0xbd44c000}, {0xbd44e000}, {0xbd450000}, {0xbd452000}, {0xbd454000}, {0xbd456000}, {0xbd458000}, {0xbd45a000}, {0xbd45c000}, {0xbd45e000}, {0xbd460000}, {0xbd462000}, {0xbd464000}, {0xbd466000}, {0xbd468000}, {0xbd46a000}, {0xbd46c000}, {0xbd46e000}, {0xbd470000}, {0xbd472000}, {0xbd474000}, {0xbd476000}, {0xbd478000}, {0xbd47a000}, {0xbd47c000}, {0xbd47e000}, {0xbd480000}, {0xbd482000}, {0xbd484000}, {0xbd486000}, {0xbd488000}, {0xbd48a000}, {0xbd48c000}, {0xbd48e000}, {0xbd490000}, {0xbd492000}, {0xbd494000}, {0xbd496000}, {0xbd498000}, {0xbd49a000}, {0xbd49c000}, {0xbd49e000}, {0xbd4a0000}, {0xbd4a2000}, {0xbd4a4000}, {0xbd4a6000}, {0xbd4a8000}, {0xbd4aa000}, {0xbd4ac000}, {0xbd4ae000}, {0xbd4b0000}, {0xbd4b2000}, {0xbd4b4000}, {0xbd4b6000}, {0xbd4b8000}, {0xbd4ba000}, {0xbd4bc000}, {0xbd4be000}, {0xbd4c0000}, {0xbd4c2000}, {0xbd4c4000}, {0xbd4c6000}, {0xbd4c8000}, {0xbd4ca000}, {0xbd4cc000}, {0xbd4ce000}, {0xbd4d0000}, {0xbd4d2000}, {0xbd4d4000}, {0xbd4d6000}, {0xbd4d8000}, {0xbd4da000}, {0xbd4dc000}, {0xbd4de000}, {0xbd4e0000}, {0xbd4e2000}, {0xbd4e4000}, {0xbd4e6000}, {0xbd4e8000}, {0xbd4ea000}, {0xbd4ec000}, {0xbd4ee000}, {0xbd4f0000}, {0xbd4f2000}, {0xbd4f4000}, {0xbd4f6000}, {0xbd4f8000}, {0xbd4fa000}, {0xbd4fc000}, {0xbd4fe000}, {0xbd500000}, {0xbd502000}, {0xbd504000}, {0xbd506000}, {0xbd508000}, {0xbd50a000}, {0xbd50c000}, {0xbd50e000}, {0xbd510000}, {0xbd512000}, {0xbd514000}, {0xbd516000}, {0xbd518000}, {0xbd51a000}, {0xbd51c000}, {0xbd51e000}, {0xbd520000}, {0xbd522000}, {0xbd524000}, {0xbd526000}, {0xbd528000}, {0xbd52a000}, {0xbd52c000}, {0xbd52e000}, {0xbd530000}, {0xbd532000}, {0xbd534000}, {0xbd536000}, {0xbd538000}, {0xbd53a000}, {0xbd53c000}, {0xbd53e000}, {0xbd540000}, {0xbd542000}, {0xbd544000}, {0xbd546000}, {0xbd548000}, {0xbd54a000}, {0xbd54c000}, {0xbd54e000}, {0xbd550000}, {0xbd552000}, {0xbd554000}, {0xbd556000}, {0xbd558000}, {0xbd55a000}, {0xbd55c000}, {0xbd55e000}, {0xbd560000}, {0xbd562000}, {0xbd564000}, {0xbd566000}, {0xbd568000}, {0xbd56a000}, {0xbd56c000}, {0xbd56e000}, {0xbd570000}, {0xbd572000}, {0xbd574000}, {0xbd576000}, {0xbd578000}, {0xbd57a000}, {0xbd57c000}, {0xbd57e000}, {0xbd580000}, {0xbd582000}, {0xbd584000}, {0xbd586000}, {0xbd588000}, {0xbd58a000}, {0xbd58c000}, {0xbd58e000}, {0xbd590000}, {0xbd592000}, {0xbd594000}, {0xbd596000}, {0xbd598000}, {0xbd59a000}, {0xbd59c000}, {0xbd59e000}, {0xbd5a0000}, {0xbd5a2000}, {0xbd5a4000}, {0xbd5a6000}, {0xbd5a8000}, {0xbd5aa000}, {0xbd5ac000}, {0xbd5ae000}, {0xbd5b0000}, {0xbd5b2000}, {0xbd5b4000}, {0xbd5b6000}, {0xbd5b8000}, {0xbd5ba000}, {0xbd5bc000}, {0xbd5be000}, {0xbd5c0000}, {0xbd5c2000}, {0xbd5c4000}, {0xbd5c6000}, {0xbd5c8000}, {0xbd5ca000}, {0xbd5cc000}, {0xbd5ce000}, {0xbd5d0000}, {0xbd5d2000}, {0xbd5d4000}, {0xbd5d6000}, {0xbd5d8000}, {0xbd5da000}, {0xbd5dc000}, {0xbd5de000}, {0xbd5e0000}, {0xbd5e2000}, {0xbd5e4000}, {0xbd5e6000}, {0xbd5e8000}, {0xbd5ea000}, {0xbd5ec000}, {0xbd5ee000}, {0xbd5f0000}, {0xbd5f2000}, {0xbd5f4000}, {0xbd5f6000}, {0xbd5f8000}, {0xbd5fa000}, {0xbd5fc000}, {0xbd5fe000}, {0xbd600000}, {0xbd602000}, {0xbd604000}, {0xbd606000}, {0xbd608000}, {0xbd60a000}, {0xbd60c000}, {0xbd60e000}, {0xbd610000}, {0xbd612000}, {0xbd614000}, {0xbd616000}, {0xbd618000}, {0xbd61a000}, {0xbd61c000}, {0xbd61e000}, {0xbd620000}, {0xbd622000}, {0xbd624000}, {0xbd626000}, {0xbd628000}, {0xbd62a000}, {0xbd62c000}, {0xbd62e000}, {0xbd630000}, {0xbd632000}, {0xbd634000}, {0xbd636000}, {0xbd638000}, {0xbd63a000}, {0xbd63c000}, {0xbd63e000}, {0xbd640000}, {0xbd642000}, {0xbd644000}, {0xbd646000}, {0xbd648000}, {0xbd64a000}, {0xbd64c000}, {0xbd64e000}, {0xbd650000}, {0xbd652000}, {0xbd654000}, {0xbd656000}, {0xbd658000}, {0xbd65a000}, {0xbd65c000}, {0xbd65e000}, {0xbd660000}, {0xbd662000}, {0xbd664000}, {0xbd666000}, {0xbd668000}, {0xbd66a000}, {0xbd66c000}, {0xbd66e000}, {0xbd670000}, {0xbd672000}, {0xbd674000}, {0xbd676000}, {0xbd678000}, {0xbd67a000}, {0xbd67c000}, {0xbd67e000}, {0xbd680000}, {0xbd682000}, {0xbd684000}, {0xbd686000}, {0xbd688000}, {0xbd68a000}, {0xbd68c000}, {0xbd68e000}, {0xbd690000}, {0xbd692000}, {0xbd694000}, {0xbd696000}, {0xbd698000}, {0xbd69a000}, {0xbd69c000}, {0xbd69e000}, {0xbd6a0000}, {0xbd6a2000}, {0xbd6a4000}, {0xbd6a6000}, {0xbd6a8000}, {0xbd6aa000}, {0xbd6ac000}, {0xbd6ae000}, {0xbd6b0000}, {0xbd6b2000}, {0xbd6b4000}, {0xbd6b6000}, {0xbd6b8000}, {0xbd6ba000}, {0xbd6bc000}, {0xbd6be000}, {0xbd6c0000}, {0xbd6c2000}, {0xbd6c4000}, {0xbd6c6000}, {0xbd6c8000}, {0xbd6ca000}, {0xbd6cc000}, {0xbd6ce000}, {0xbd6d0000}, {0xbd6d2000}, {0xbd6d4000}, {0xbd6d6000}, {0xbd6d8000}, {0xbd6da000}, {0xbd6dc000}, {0xbd6de000}, {0xbd6e0000}, {0xbd6e2000}, {0xbd6e4000}, {0xbd6e6000}, {0xbd6e8000}, {0xbd6ea000}, {0xbd6ec000}, {0xbd6ee000}, {0xbd6f0000}, {0xbd6f2000}, {0xbd6f4000}, {0xbd6f6000}, {0xbd6f8000}, {0xbd6fa000}, {0xbd6fc000}, {0xbd6fe000}, {0xbd700000}, {0xbd702000}, {0xbd704000}, {0xbd706000}, {0xbd708000}, {0xbd70a000}, {0xbd70c000}, {0xbd70e000}, {0xbd710000}, {0xbd712000}, {0xbd714000}, {0xbd716000}, {0xbd718000}, {0xbd71a000}, {0xbd71c000}, {0xbd71e000}, {0xbd720000}, {0xbd722000}, {0xbd724000}, {0xbd726000}, {0xbd728000}, {0xbd72a000}, {0xbd72c000}, {0xbd72e000}, {0xbd730000}, {0xbd732000}, {0xbd734000}, {0xbd736000}, {0xbd738000}, {0xbd73a000}, {0xbd73c000}, {0xbd73e000}, {0xbd740000}, {0xbd742000}, {0xbd744000}, {0xbd746000}, {0xbd748000}, {0xbd74a000}, {0xbd74c000}, {0xbd74e000}, {0xbd750000}, {0xbd752000}, {0xbd754000}, {0xbd756000}, {0xbd758000}, {0xbd75a000}, {0xbd75c000}, {0xbd75e000}, {0xbd760000}, {0xbd762000}, {0xbd764000}, {0xbd766000}, {0xbd768000}, {0xbd76a000}, {0xbd76c000}, {0xbd76e000}, {0xbd770000}, {0xbd772000}, {0xbd774000}, {0xbd776000}, {0xbd778000}, {0xbd77a000}, {0xbd77c000}, {0xbd77e000}, {0xbd780000}, {0xbd782000}, {0xbd784000}, {0xbd786000}, {0xbd788000}, {0xbd78a000}, {0xbd78c000}, {0xbd78e000}, {0xbd790000}, {0xbd792000}, {0xbd794000}, {0xbd796000}, {0xbd798000}, {0xbd79a000}, {0xbd79c000}, {0xbd79e000}, {0xbd7a0000}, {0xbd7a2000}, {0xbd7a4000}, {0xbd7a6000}, {0xbd7a8000}, {0xbd7aa000}, {0xbd7ac000}, {0xbd7ae000}, {0xbd7b0000}, {0xbd7b2000}, {0xbd7b4000}, {0xbd7b6000}, {0xbd7b8000}, {0xbd7ba000}, {0xbd7bc000}, {0xbd7be000}, {0xbd7c0000}, {0xbd7c2000}, {0xbd7c4000}, {0xbd7c6000}, {0xbd7c8000}, {0xbd7ca000}, {0xbd7cc000}, {0xbd7ce000}, {0xbd7d0000}, {0xbd7d2000}, {0xbd7d4000}, {0xbd7d6000}, {0xbd7d8000}, {0xbd7da000}, {0xbd7dc000}, {0xbd7de000}, {0xbd7e0000}, {0xbd7e2000}, {0xbd7e4000}, {0xbd7e6000}, {0xbd7e8000}, {0xbd7ea000}, {0xbd7ec000}, {0xbd7ee000}, {0xbd7f0000}, {0xbd7f2000}, {0xbd7f4000}, {0xbd7f6000}, {0xbd7f8000}, {0xbd7fa000}, {0xbd7fc000}, {0xbd7fe000}, {0xbd800000}, {0xbd802000}, {0xbd804000}, {0xbd806000}, {0xbd808000}, {0xbd80a000}, {0xbd80c000}, {0xbd80e000}, {0xbd810000}, {0xbd812000}, {0xbd814000}, {0xbd816000}, {0xbd818000}, {0xbd81a000}, {0xbd81c000}, {0xbd81e000}, {0xbd820000}, {0xbd822000}, {0xbd824000}, {0xbd826000}, {0xbd828000}, {0xbd82a000}, {0xbd82c000}, {0xbd82e000}, {0xbd830000}, {0xbd832000}, {0xbd834000}, {0xbd836000}, {0xbd838000}, {0xbd83a000}, {0xbd83c000}, {0xbd83e000}, {0xbd840000}, {0xbd842000}, {0xbd844000}, {0xbd846000}, {0xbd848000}, {0xbd84a000}, {0xbd84c000}, {0xbd84e000}, {0xbd850000}, {0xbd852000}, {0xbd854000}, {0xbd856000}, {0xbd858000}, {0xbd85a000}, {0xbd85c000}, {0xbd85e000}, {0xbd860000}, {0xbd862000}, {0xbd864000}, {0xbd866000}, {0xbd868000}, {0xbd86a000}, {0xbd86c000}, {0xbd86e000}, {0xbd870000}, {0xbd872000}, {0xbd874000}, {0xbd876000}, {0xbd878000}, {0xbd87a000}, {0xbd87c000}, {0xbd87e000}, {0xbd880000}, {0xbd882000}, {0xbd884000}, {0xbd886000}, {0xbd888000}, {0xbd88a000}, {0xbd88c000}, {0xbd88e000}, {0xbd890000}, {0xbd892000}, {0xbd894000}, {0xbd896000}, {0xbd898000}, {0xbd89a000}, {0xbd89c000}, {0xbd89e000}, {0xbd8a0000}, {0xbd8a2000}, {0xbd8a4000}, {0xbd8a6000}, {0xbd8a8000}, {0xbd8aa000}, {0xbd8ac000}, {0xbd8ae000}, {0xbd8b0000}, {0xbd8b2000}, {0xbd8b4000}, {0xbd8b6000}, {0xbd8b8000}, {0xbd8ba000}, {0xbd8bc000}, {0xbd8be000}, {0xbd8c0000}, {0xbd8c2000}, {0xbd8c4000}, {0xbd8c6000}, {0xbd8c8000}, {0xbd8ca000}, {0xbd8cc000}, {0xbd8ce000}, {0xbd8d0000}, {0xbd8d2000}, {0xbd8d4000}, {0xbd8d6000}, {0xbd8d8000}, {0xbd8da000}, {0xbd8dc000}, {0xbd8de000}, {0xbd8e0000}, {0xbd8e2000}, {0xbd8e4000}, {0xbd8e6000}, {0xbd8e8000}, {0xbd8ea000}, {0xbd8ec000}, {0xbd8ee000}, {0xbd8f0000}, {0xbd8f2000}, {0xbd8f4000}, {0xbd8f6000}, {0xbd8f8000}, {0xbd8fa000}, {0xbd8fc000}, {0xbd8fe000}, {0xbd900000}, {0xbd902000}, {0xbd904000}, {0xbd906000}, {0xbd908000}, {0xbd90a000}, {0xbd90c000}, {0xbd90e000}, {0xbd910000}, {0xbd912000}, {0xbd914000}, {0xbd916000}, {0xbd918000}, {0xbd91a000}, {0xbd91c000}, {0xbd91e000}, {0xbd920000}, {0xbd922000}, {0xbd924000}, {0xbd926000}, {0xbd928000}, {0xbd92a000}, {0xbd92c000}, {0xbd92e000}, {0xbd930000}, {0xbd932000}, {0xbd934000}, {0xbd936000}, {0xbd938000}, {0xbd93a000}, {0xbd93c000}, {0xbd93e000}, {0xbd940000}, {0xbd942000}, {0xbd944000}, {0xbd946000}, {0xbd948000}, {0xbd94a000}, {0xbd94c000}, {0xbd94e000}, {0xbd950000}, {0xbd952000}, {0xbd954000}, {0xbd956000}, {0xbd958000}, {0xbd95a000}, {0xbd95c000}, {0xbd95e000}, {0xbd960000}, {0xbd962000}, {0xbd964000}, {0xbd966000}, {0xbd968000}, {0xbd96a000}, {0xbd96c000}, {0xbd96e000}, {0xbd970000}, {0xbd972000}, {0xbd974000}, {0xbd976000}, {0xbd978000}, {0xbd97a000}, {0xbd97c000}, {0xbd97e000}, {0xbd980000}, {0xbd982000}, {0xbd984000}, {0xbd986000}, {0xbd988000}, {0xbd98a000}, {0xbd98c000}, {0xbd98e000}, {0xbd990000}, {0xbd992000}, {0xbd994000}, {0xbd996000}, {0xbd998000}, {0xbd99a000}, {0xbd99c000}, {0xbd99e000}, {0xbd9a0000}, {0xbd9a2000}, {0xbd9a4000}, {0xbd9a6000}, {0xbd9a8000}, {0xbd9aa000}, {0xbd9ac000}, {0xbd9ae000}, {0xbd9b0000}, {0xbd9b2000}, {0xbd9b4000}, {0xbd9b6000}, {0xbd9b8000}, {0xbd9ba000}, {0xbd9bc000}, {0xbd9be000}, {0xbd9c0000}, {0xbd9c2000}, {0xbd9c4000}, {0xbd9c6000}, {0xbd9c8000}, {0xbd9ca000}, {0xbd9cc000}, {0xbd9ce000}, {0xbd9d0000}, {0xbd9d2000}, {0xbd9d4000}, {0xbd9d6000}, {0xbd9d8000}, {0xbd9da000}, {0xbd9dc000}, {0xbd9de000}, {0xbd9e0000}, {0xbd9e2000}, {0xbd9e4000}, {0xbd9e6000}, {0xbd9e8000}, {0xbd9ea000}, {0xbd9ec000}, {0xbd9ee000}, {0xbd9f0000}, {0xbd9f2000}, {0xbd9f4000}, {0xbd9f6000}, {0xbd9f8000}, {0xbd9fa000}, {0xbd9fc000}, {0xbd9fe000}, {0xbda00000}, {0xbda02000}, {0xbda04000}, {0xbda06000}, {0xbda08000}, {0xbda0a000}, {0xbda0c000}, {0xbda0e000}, {0xbda10000}, {0xbda12000}, {0xbda14000}, {0xbda16000}, {0xbda18000}, {0xbda1a000}, {0xbda1c000}, {0xbda1e000}, {0xbda20000}, {0xbda22000}, {0xbda24000}, {0xbda26000}, {0xbda28000}, {0xbda2a000}, {0xbda2c000}, {0xbda2e000}, {0xbda30000}, {0xbda32000}, {0xbda34000}, {0xbda36000}, {0xbda38000}, {0xbda3a000}, {0xbda3c000}, {0xbda3e000}, {0xbda40000}, {0xbda42000}, {0xbda44000}, {0xbda46000}, {0xbda48000}, {0xbda4a000}, {0xbda4c000}, {0xbda4e000}, {0xbda50000}, {0xbda52000}, {0xbda54000}, {0xbda56000}, {0xbda58000}, {0xbda5a000}, {0xbda5c000}, {0xbda5e000}, {0xbda60000}, {0xbda62000}, {0xbda64000}, {0xbda66000}, {0xbda68000}, {0xbda6a000}, {0xbda6c000}, {0xbda6e000}, {0xbda70000}, {0xbda72000}, {0xbda74000}, {0xbda76000}, {0xbda78000}, {0xbda7a000}, {0xbda7c000}, {0xbda7e000}, {0xbda80000}, {0xbda82000}, {0xbda84000}, {0xbda86000}, {0xbda88000}, {0xbda8a000}, {0xbda8c000}, {0xbda8e000}, {0xbda90000}, {0xbda92000}, {0xbda94000}, {0xbda96000}, {0xbda98000}, {0xbda9a000}, {0xbda9c000}, {0xbda9e000}, {0xbdaa0000}, {0xbdaa2000}, {0xbdaa4000}, {0xbdaa6000}, {0xbdaa8000}, {0xbdaaa000}, {0xbdaac000}, {0xbdaae000}, {0xbdab0000}, {0xbdab2000}, {0xbdab4000}, {0xbdab6000}, {0xbdab8000}, {0xbdaba000}, {0xbdabc000}, {0xbdabe000}, {0xbdac0000}, {0xbdac2000}, {0xbdac4000}, {0xbdac6000}, {0xbdac8000}, {0xbdaca000}, {0xbdacc000}, {0xbdace000}, {0xbdad0000}, {0xbdad2000}, {0xbdad4000}, {0xbdad6000}, {0xbdad8000}, {0xbdada000}, {0xbdadc000}, {0xbdade000}, {0xbdae0000}, {0xbdae2000}, {0xbdae4000}, {0xbdae6000}, {0xbdae8000}, {0xbdaea000}, {0xbdaec000}, {0xbdaee000}, {0xbdaf0000}, {0xbdaf2000}, {0xbdaf4000}, {0xbdaf6000}, {0xbdaf8000}, {0xbdafa000}, {0xbdafc000}, {0xbdafe000}, {0xbdb00000}, {0xbdb02000}, {0xbdb04000}, {0xbdb06000}, {0xbdb08000}, {0xbdb0a000}, {0xbdb0c000}, {0xbdb0e000}, {0xbdb10000}, {0xbdb12000}, {0xbdb14000}, {0xbdb16000}, {0xbdb18000}, {0xbdb1a000}, {0xbdb1c000}, {0xbdb1e000}, {0xbdb20000}, {0xbdb22000}, {0xbdb24000}, {0xbdb26000}, {0xbdb28000}, {0xbdb2a000}, {0xbdb2c000}, {0xbdb2e000}, {0xbdb30000}, {0xbdb32000}, {0xbdb34000}, {0xbdb36000}, {0xbdb38000}, {0xbdb3a000}, {0xbdb3c000}, {0xbdb3e000}, {0xbdb40000}, {0xbdb42000}, {0xbdb44000}, {0xbdb46000}, {0xbdb48000}, {0xbdb4a000}, {0xbdb4c000}, {0xbdb4e000}, {0xbdb50000}, {0xbdb52000}, {0xbdb54000}, {0xbdb56000}, {0xbdb58000}, {0xbdb5a000}, {0xbdb5c000}, {0xbdb5e000}, {0xbdb60000}, {0xbdb62000}, {0xbdb64000}, {0xbdb66000}, {0xbdb68000}, {0xbdb6a000}, {0xbdb6c000}, {0xbdb6e000}, {0xbdb70000}, {0xbdb72000}, {0xbdb74000}, {0xbdb76000}, {0xbdb78000}, {0xbdb7a000}, {0xbdb7c000}, {0xbdb7e000}, {0xbdb80000}, {0xbdb82000}, {0xbdb84000}, {0xbdb86000}, {0xbdb88000}, {0xbdb8a000}, {0xbdb8c000}, {0xbdb8e000}, {0xbdb90000}, {0xbdb92000}, {0xbdb94000}, {0xbdb96000}, {0xbdb98000}, {0xbdb9a000}, {0xbdb9c000}, {0xbdb9e000}, {0xbdba0000}, {0xbdba2000}, {0xbdba4000}, {0xbdba6000}, {0xbdba8000}, {0xbdbaa000}, {0xbdbac000}, {0xbdbae000}, {0xbdbb0000}, {0xbdbb2000}, {0xbdbb4000}, {0xbdbb6000}, {0xbdbb8000}, {0xbdbba000}, {0xbdbbc000}, {0xbdbbe000}, {0xbdbc0000}, {0xbdbc2000}, {0xbdbc4000}, {0xbdbc6000}, {0xbdbc8000}, {0xbdbca000}, {0xbdbcc000}, {0xbdbce000}, {0xbdbd0000}, {0xbdbd2000}, {0xbdbd4000}, {0xbdbd6000}, {0xbdbd8000}, {0xbdbda000}, {0xbdbdc000}, {0xbdbde000}, {0xbdbe0000}, {0xbdbe2000}, {0xbdbe4000}, {0xbdbe6000}, {0xbdbe8000}, {0xbdbea000}, {0xbdbec000}, {0xbdbee000}, {0xbdbf0000}, {0xbdbf2000}, {0xbdbf4000}, {0xbdbf6000}, {0xbdbf8000}, {0xbdbfa000}, {0xbdbfc000}, {0xbdbfe000}, {0xbdc00000}, {0xbdc02000}, {0xbdc04000}, {0xbdc06000}, {0xbdc08000}, {0xbdc0a000}, {0xbdc0c000}, {0xbdc0e000}, {0xbdc10000}, {0xbdc12000}, {0xbdc14000}, {0xbdc16000}, {0xbdc18000}, {0xbdc1a000}, {0xbdc1c000}, {0xbdc1e000}, {0xbdc20000}, {0xbdc22000}, {0xbdc24000}, {0xbdc26000}, {0xbdc28000}, {0xbdc2a000}, {0xbdc2c000}, {0xbdc2e000}, {0xbdc30000}, {0xbdc32000}, {0xbdc34000}, {0xbdc36000}, {0xbdc38000}, {0xbdc3a000}, {0xbdc3c000}, {0xbdc3e000}, {0xbdc40000}, {0xbdc42000}, {0xbdc44000}, {0xbdc46000}, {0xbdc48000}, {0xbdc4a000}, {0xbdc4c000}, {0xbdc4e000}, {0xbdc50000}, {0xbdc52000}, {0xbdc54000}, {0xbdc56000}, {0xbdc58000}, {0xbdc5a000}, {0xbdc5c000}, {0xbdc5e000}, {0xbdc60000}, {0xbdc62000}, {0xbdc64000}, {0xbdc66000}, {0xbdc68000}, {0xbdc6a000}, {0xbdc6c000}, {0xbdc6e000}, {0xbdc70000}, {0xbdc72000}, {0xbdc74000}, {0xbdc76000}, {0xbdc78000}, {0xbdc7a000}, {0xbdc7c000}, {0xbdc7e000}, {0xbdc80000}, {0xbdc82000}, {0xbdc84000}, {0xbdc86000}, {0xbdc88000}, {0xbdc8a000}, {0xbdc8c000}, {0xbdc8e000}, {0xbdc90000}, {0xbdc92000}, {0xbdc94000}, {0xbdc96000}, {0xbdc98000}, {0xbdc9a000}, {0xbdc9c000}, {0xbdc9e000}, {0xbdca0000}, {0xbdca2000}, {0xbdca4000}, {0xbdca6000}, {0xbdca8000}, {0xbdcaa000}, {0xbdcac000}, {0xbdcae000}, {0xbdcb0000}, {0xbdcb2000}, {0xbdcb4000}, {0xbdcb6000}, {0xbdcb8000}, {0xbdcba000}, {0xbdcbc000}, {0xbdcbe000}, {0xbdcc0000}, {0xbdcc2000}, {0xbdcc4000}, {0xbdcc6000}, {0xbdcc8000}, {0xbdcca000}, {0xbdccc000}, {0xbdcce000}, {0xbdcd0000}, {0xbdcd2000}, {0xbdcd4000}, {0xbdcd6000}, {0xbdcd8000}, {0xbdcda000}, {0xbdcdc000}, {0xbdcde000}, {0xbdce0000}, {0xbdce2000}, {0xbdce4000}, {0xbdce6000}, {0xbdce8000}, {0xbdcea000}, {0xbdcec000}, {0xbdcee000}, {0xbdcf0000}, {0xbdcf2000}, {0xbdcf4000}, {0xbdcf6000}, {0xbdcf8000}, {0xbdcfa000}, {0xbdcfc000}, {0xbdcfe000}, {0xbdd00000}, {0xbdd02000}, {0xbdd04000}, {0xbdd06000}, {0xbdd08000}, {0xbdd0a000}, {0xbdd0c000}, {0xbdd0e000}, {0xbdd10000}, {0xbdd12000}, {0xbdd14000}, {0xbdd16000}, {0xbdd18000}, {0xbdd1a000}, {0xbdd1c000}, {0xbdd1e000}, {0xbdd20000}, {0xbdd22000}, {0xbdd24000}, {0xbdd26000}, {0xbdd28000}, {0xbdd2a000}, {0xbdd2c000}, {0xbdd2e000}, {0xbdd30000}, {0xbdd32000}, {0xbdd34000}, {0xbdd36000}, {0xbdd38000}, {0xbdd3a000}, {0xbdd3c000}, {0xbdd3e000}, {0xbdd40000}, {0xbdd42000}, {0xbdd44000}, {0xbdd46000}, {0xbdd48000}, {0xbdd4a000}, {0xbdd4c000}, {0xbdd4e000}, {0xbdd50000}, {0xbdd52000}, {0xbdd54000}, {0xbdd56000}, {0xbdd58000}, {0xbdd5a000}, {0xbdd5c000}, {0xbdd5e000}, {0xbdd60000}, {0xbdd62000}, {0xbdd64000}, {0xbdd66000}, {0xbdd68000}, {0xbdd6a000}, {0xbdd6c000}, {0xbdd6e000}, {0xbdd70000}, {0xbdd72000}, {0xbdd74000}, {0xbdd76000}, {0xbdd78000}, {0xbdd7a000}, {0xbdd7c000}, {0xbdd7e000}, {0xbdd80000}, {0xbdd82000}, {0xbdd84000}, {0xbdd86000}, {0xbdd88000}, {0xbdd8a000}, {0xbdd8c000}, {0xbdd8e000}, {0xbdd90000}, {0xbdd92000}, {0xbdd94000}, {0xbdd96000}, {0xbdd98000}, {0xbdd9a000}, {0xbdd9c000}, {0xbdd9e000}, {0xbdda0000}, {0xbdda2000}, {0xbdda4000}, {0xbdda6000}, {0xbdda8000}, {0xbddaa000}, {0xbddac000}, {0xbddae000}, {0xbddb0000}, {0xbddb2000}, {0xbddb4000}, {0xbddb6000}, {0xbddb8000}, {0xbddba000}, {0xbddbc000}, {0xbddbe000}, {0xbddc0000}, {0xbddc2000}, {0xbddc4000}, {0xbddc6000}, {0xbddc8000}, {0xbddca000}, {0xbddcc000}, {0xbddce000}, {0xbddd0000}, {0xbddd2000}, {0xbddd4000}, {0xbddd6000}, {0xbddd8000}, {0xbddda000}, {0xbdddc000}, {0xbddde000}, {0xbdde0000}, {0xbdde2000}, {0xbdde4000}, {0xbdde6000}, {0xbdde8000}, {0xbddea000}, {0xbddec000}, {0xbddee000}, {0xbddf0000}, {0xbddf2000}, {0xbddf4000}, {0xbddf6000}, {0xbddf8000}, {0xbddfa000}, {0xbddfc000}, {0xbddfe000}, {0xbde00000}, {0xbde02000}, {0xbde04000}, {0xbde06000}, {0xbde08000}, {0xbde0a000}, {0xbde0c000}, {0xbde0e000}, {0xbde10000}, {0xbde12000}, {0xbde14000}, {0xbde16000}, {0xbde18000}, {0xbde1a000}, {0xbde1c000}, {0xbde1e000}, {0xbde20000}, {0xbde22000}, {0xbde24000}, {0xbde26000}, {0xbde28000}, {0xbde2a000}, {0xbde2c000}, {0xbde2e000}, {0xbde30000}, {0xbde32000}, {0xbde34000}, {0xbde36000}, {0xbde38000}, {0xbde3a000}, {0xbde3c000}, {0xbde3e000}, {0xbde40000}, {0xbde42000}, {0xbde44000}, {0xbde46000}, {0xbde48000}, {0xbde4a000}, {0xbde4c000}, {0xbde4e000}, {0xbde50000}, {0xbde52000}, {0xbde54000}, {0xbde56000}, {0xbde58000}, {0xbde5a000}, {0xbde5c000}, {0xbde5e000}, {0xbde60000}, {0xbde62000}, {0xbde64000}, {0xbde66000}, {0xbde68000}, {0xbde6a000}, {0xbde6c000}, {0xbde6e000}, {0xbde70000}, {0xbde72000}, {0xbde74000}, {0xbde76000}, {0xbde78000}, {0xbde7a000}, {0xbde7c000}, {0xbde7e000}, {0xbde80000}, {0xbde82000}, {0xbde84000}, {0xbde86000}, {0xbde88000}, {0xbde8a000}, {0xbde8c000}, {0xbde8e000}, {0xbde90000}, {0xbde92000}, {0xbde94000}, {0xbde96000}, {0xbde98000}, {0xbde9a000}, {0xbde9c000}, {0xbde9e000}, {0xbdea0000}, {0xbdea2000}, {0xbdea4000}, {0xbdea6000}, {0xbdea8000}, {0xbdeaa000}, {0xbdeac000}, {0xbdeae000}, {0xbdeb0000}, {0xbdeb2000}, {0xbdeb4000}, {0xbdeb6000}, {0xbdeb8000}, {0xbdeba000}, {0xbdebc000}, {0xbdebe000}, {0xbdec0000}, {0xbdec2000}, {0xbdec4000}, {0xbdec6000}, {0xbdec8000}, {0xbdeca000}, {0xbdecc000}, {0xbdece000}, {0xbded0000}, {0xbded2000}, {0xbded4000}, {0xbded6000}, {0xbded8000}, {0xbdeda000}, {0xbdedc000}, {0xbdede000}, {0xbdee0000}, {0xbdee2000}, {0xbdee4000}, {0xbdee6000}, {0xbdee8000}, {0xbdeea000}, {0xbdeec000}, {0xbdeee000}, {0xbdef0000}, {0xbdef2000}, {0xbdef4000}, {0xbdef6000}, {0xbdef8000}, {0xbdefa000}, {0xbdefc000}, {0xbdefe000}, {0xbdf00000}, {0xbdf02000}, {0xbdf04000}, {0xbdf06000}, {0xbdf08000}, {0xbdf0a000}, {0xbdf0c000}, {0xbdf0e000}, {0xbdf10000}, {0xbdf12000}, {0xbdf14000}, {0xbdf16000}, {0xbdf18000}, {0xbdf1a000}, {0xbdf1c000}, {0xbdf1e000}, {0xbdf20000}, {0xbdf22000}, {0xbdf24000}, {0xbdf26000}, {0xbdf28000}, {0xbdf2a000}, {0xbdf2c000}, {0xbdf2e000}, {0xbdf30000}, {0xbdf32000}, {0xbdf34000}, {0xbdf36000}, {0xbdf38000}, {0xbdf3a000}, {0xbdf3c000}, {0xbdf3e000}, {0xbdf40000}, {0xbdf42000}, {0xbdf44000}, {0xbdf46000}, {0xbdf48000}, {0xbdf4a000}, {0xbdf4c000}, {0xbdf4e000}, {0xbdf50000}, {0xbdf52000}, {0xbdf54000}, {0xbdf56000}, {0xbdf58000}, {0xbdf5a000}, {0xbdf5c000}, {0xbdf5e000}, {0xbdf60000}, {0xbdf62000}, {0xbdf64000}, {0xbdf66000}, {0xbdf68000}, {0xbdf6a000}, {0xbdf6c000}, {0xbdf6e000}, {0xbdf70000}, {0xbdf72000}, {0xbdf74000}, {0xbdf76000}, {0xbdf78000}, {0xbdf7a000}, {0xbdf7c000}, {0xbdf7e000}, {0xbdf80000}, {0xbdf82000}, {0xbdf84000}, {0xbdf86000}, {0xbdf88000}, {0xbdf8a000}, {0xbdf8c000}, {0xbdf8e000}, {0xbdf90000}, {0xbdf92000}, {0xbdf94000}, {0xbdf96000}, {0xbdf98000}, {0xbdf9a000}, {0xbdf9c000}, {0xbdf9e000}, {0xbdfa0000}, {0xbdfa2000}, {0xbdfa4000}, {0xbdfa6000}, {0xbdfa8000}, {0xbdfaa000}, {0xbdfac000}, {0xbdfae000}, {0xbdfb0000}, {0xbdfb2000}, {0xbdfb4000}, {0xbdfb6000}, {0xbdfb8000}, {0xbdfba000}, {0xbdfbc000}, {0xbdfbe000}, {0xbdfc0000}, {0xbdfc2000}, {0xbdfc4000}, {0xbdfc6000}, {0xbdfc8000}, {0xbdfca000}, {0xbdfcc000}, {0xbdfce000}, {0xbdfd0000}, {0xbdfd2000}, {0xbdfd4000}, {0xbdfd6000}, {0xbdfd8000}, {0xbdfda000}, {0xbdfdc000}, {0xbdfde000}, {0xbdfe0000}, {0xbdfe2000}, {0xbdfe4000}, {0xbdfe6000}, {0xbdfe8000}, {0xbdfea000}, {0xbdfec000}, {0xbdfee000}, {0xbdff0000}, {0xbdff2000}, {0xbdff4000}, {0xbdff6000}, {0xbdff8000}, {0xbdffa000}, {0xbdffc000}, {0xbdffe000}, {0xbe000000}, {0xbe002000}, {0xbe004000}, {0xbe006000}, {0xbe008000}, {0xbe00a000}, {0xbe00c000}, {0xbe00e000}, {0xbe010000}, {0xbe012000}, {0xbe014000}, {0xbe016000}, {0xbe018000}, {0xbe01a000}, {0xbe01c000}, {0xbe01e000}, {0xbe020000}, {0xbe022000}, {0xbe024000}, {0xbe026000}, {0xbe028000}, {0xbe02a000}, {0xbe02c000}, {0xbe02e000}, {0xbe030000}, {0xbe032000}, {0xbe034000}, {0xbe036000}, {0xbe038000}, {0xbe03a000}, {0xbe03c000}, {0xbe03e000}, {0xbe040000}, {0xbe042000}, {0xbe044000}, {0xbe046000}, {0xbe048000}, {0xbe04a000}, {0xbe04c000}, {0xbe04e000}, {0xbe050000}, {0xbe052000}, {0xbe054000}, {0xbe056000}, {0xbe058000}, {0xbe05a000}, {0xbe05c000}, {0xbe05e000}, {0xbe060000}, {0xbe062000}, {0xbe064000}, {0xbe066000}, {0xbe068000}, {0xbe06a000}, {0xbe06c000}, {0xbe06e000}, {0xbe070000}, {0xbe072000}, {0xbe074000}, {0xbe076000}, {0xbe078000}, {0xbe07a000}, {0xbe07c000}, {0xbe07e000}, {0xbe080000}, {0xbe082000}, {0xbe084000}, {0xbe086000}, {0xbe088000}, {0xbe08a000}, {0xbe08c000}, {0xbe08e000}, {0xbe090000}, {0xbe092000}, {0xbe094000}, {0xbe096000}, {0xbe098000}, {0xbe09a000}, {0xbe09c000}, {0xbe09e000}, {0xbe0a0000}, {0xbe0a2000}, {0xbe0a4000}, {0xbe0a6000}, {0xbe0a8000}, {0xbe0aa000}, {0xbe0ac000}, {0xbe0ae000}, {0xbe0b0000}, {0xbe0b2000}, {0xbe0b4000}, {0xbe0b6000}, {0xbe0b8000}, {0xbe0ba000}, {0xbe0bc000}, {0xbe0be000}, {0xbe0c0000}, {0xbe0c2000}, {0xbe0c4000}, {0xbe0c6000}, {0xbe0c8000}, {0xbe0ca000}, {0xbe0cc000}, {0xbe0ce000}, {0xbe0d0000}, {0xbe0d2000}, {0xbe0d4000}, {0xbe0d6000}, {0xbe0d8000}, {0xbe0da000}, {0xbe0dc000}, {0xbe0de000}, {0xbe0e0000}, {0xbe0e2000}, {0xbe0e4000}, {0xbe0e6000}, {0xbe0e8000}, {0xbe0ea000}, {0xbe0ec000}, {0xbe0ee000}, {0xbe0f0000}, {0xbe0f2000}, {0xbe0f4000}, {0xbe0f6000}, {0xbe0f8000}, {0xbe0fa000}, {0xbe0fc000}, {0xbe0fe000}, {0xbe100000}, {0xbe102000}, {0xbe104000}, {0xbe106000}, {0xbe108000}, {0xbe10a000}, {0xbe10c000}, {0xbe10e000}, {0xbe110000}, {0xbe112000}, {0xbe114000}, {0xbe116000}, {0xbe118000}, {0xbe11a000}, {0xbe11c000}, {0xbe11e000}, {0xbe120000}, {0xbe122000}, {0xbe124000}, {0xbe126000}, {0xbe128000}, {0xbe12a000}, {0xbe12c000}, {0xbe12e000}, {0xbe130000}, {0xbe132000}, {0xbe134000}, {0xbe136000}, {0xbe138000}, {0xbe13a000}, {0xbe13c000}, {0xbe13e000}, {0xbe140000}, {0xbe142000}, {0xbe144000}, {0xbe146000}, {0xbe148000}, {0xbe14a000}, {0xbe14c000}, {0xbe14e000}, {0xbe150000}, {0xbe152000}, {0xbe154000}, {0xbe156000}, {0xbe158000}, {0xbe15a000}, {0xbe15c000}, {0xbe15e000}, {0xbe160000}, {0xbe162000}, {0xbe164000}, {0xbe166000}, {0xbe168000}, {0xbe16a000}, {0xbe16c000}, {0xbe16e000}, {0xbe170000}, {0xbe172000}, {0xbe174000}, {0xbe176000}, {0xbe178000}, {0xbe17a000}, {0xbe17c000}, {0xbe17e000}, {0xbe180000}, {0xbe182000}, {0xbe184000}, {0xbe186000}, {0xbe188000}, {0xbe18a000}, {0xbe18c000}, {0xbe18e000}, {0xbe190000}, {0xbe192000}, {0xbe194000}, {0xbe196000}, {0xbe198000}, {0xbe19a000}, {0xbe19c000}, {0xbe19e000}, {0xbe1a0000}, {0xbe1a2000}, {0xbe1a4000}, {0xbe1a6000}, {0xbe1a8000}, {0xbe1aa000}, {0xbe1ac000}, {0xbe1ae000}, {0xbe1b0000}, {0xbe1b2000}, {0xbe1b4000}, {0xbe1b6000}, {0xbe1b8000}, {0xbe1ba000}, {0xbe1bc000}, {0xbe1be000}, {0xbe1c0000}, {0xbe1c2000}, {0xbe1c4000}, {0xbe1c6000}, {0xbe1c8000}, {0xbe1ca000}, {0xbe1cc000}, {0xbe1ce000}, {0xbe1d0000}, {0xbe1d2000}, {0xbe1d4000}, {0xbe1d6000}, {0xbe1d8000}, {0xbe1da000}, {0xbe1dc000}, {0xbe1de000}, {0xbe1e0000}, {0xbe1e2000}, {0xbe1e4000}, {0xbe1e6000}, {0xbe1e8000}, {0xbe1ea000}, {0xbe1ec000}, {0xbe1ee000}, {0xbe1f0000}, {0xbe1f2000}, {0xbe1f4000}, {0xbe1f6000}, {0xbe1f8000}, {0xbe1fa000}, {0xbe1fc000}, {0xbe1fe000}, {0xbe200000}, {0xbe202000}, {0xbe204000}, {0xbe206000}, {0xbe208000}, {0xbe20a000}, {0xbe20c000}, {0xbe20e000}, {0xbe210000}, {0xbe212000}, {0xbe214000}, {0xbe216000}, {0xbe218000}, {0xbe21a000}, {0xbe21c000}, {0xbe21e000}, {0xbe220000}, {0xbe222000}, {0xbe224000}, {0xbe226000}, {0xbe228000}, {0xbe22a000}, {0xbe22c000}, {0xbe22e000}, {0xbe230000}, {0xbe232000}, {0xbe234000}, {0xbe236000}, {0xbe238000}, {0xbe23a000}, {0xbe23c000}, {0xbe23e000}, {0xbe240000}, {0xbe242000}, {0xbe244000}, {0xbe246000}, {0xbe248000}, {0xbe24a000}, {0xbe24c000}, {0xbe24e000}, {0xbe250000}, {0xbe252000}, {0xbe254000}, {0xbe256000}, {0xbe258000}, {0xbe25a000}, {0xbe25c000}, {0xbe25e000}, {0xbe260000}, {0xbe262000}, {0xbe264000}, {0xbe266000}, {0xbe268000}, {0xbe26a000}, {0xbe26c000}, {0xbe26e000}, {0xbe270000}, {0xbe272000}, {0xbe274000}, {0xbe276000}, {0xbe278000}, {0xbe27a000}, {0xbe27c000}, {0xbe27e000}, {0xbe280000}, {0xbe282000}, {0xbe284000}, {0xbe286000}, {0xbe288000}, {0xbe28a000}, {0xbe28c000}, {0xbe28e000}, {0xbe290000}, {0xbe292000}, {0xbe294000}, {0xbe296000}, {0xbe298000}, {0xbe29a000}, {0xbe29c000}, {0xbe29e000}, {0xbe2a0000}, {0xbe2a2000}, {0xbe2a4000}, {0xbe2a6000}, {0xbe2a8000}, {0xbe2aa000}, {0xbe2ac000}, {0xbe2ae000}, {0xbe2b0000}, {0xbe2b2000}, {0xbe2b4000}, {0xbe2b6000}, {0xbe2b8000}, {0xbe2ba000}, {0xbe2bc000}, {0xbe2be000}, {0xbe2c0000}, {0xbe2c2000}, {0xbe2c4000}, {0xbe2c6000}, {0xbe2c8000}, {0xbe2ca000}, {0xbe2cc000}, {0xbe2ce000}, {0xbe2d0000}, {0xbe2d2000}, {0xbe2d4000}, {0xbe2d6000}, {0xbe2d8000}, {0xbe2da000}, {0xbe2dc000}, {0xbe2de000}, {0xbe2e0000}, {0xbe2e2000}, {0xbe2e4000}, {0xbe2e6000}, {0xbe2e8000}, {0xbe2ea000}, {0xbe2ec000}, {0xbe2ee000}, {0xbe2f0000}, {0xbe2f2000}, {0xbe2f4000}, {0xbe2f6000}, {0xbe2f8000}, {0xbe2fa000}, {0xbe2fc000}, {0xbe2fe000}, {0xbe300000}, {0xbe302000}, {0xbe304000}, {0xbe306000}, {0xbe308000}, {0xbe30a000}, {0xbe30c000}, {0xbe30e000}, {0xbe310000}, {0xbe312000}, {0xbe314000}, {0xbe316000}, {0xbe318000}, {0xbe31a000}, {0xbe31c000}, {0xbe31e000}, {0xbe320000}, {0xbe322000}, {0xbe324000}, {0xbe326000}, {0xbe328000}, {0xbe32a000}, {0xbe32c000}, {0xbe32e000}, {0xbe330000}, {0xbe332000}, {0xbe334000}, {0xbe336000}, {0xbe338000}, {0xbe33a000}, {0xbe33c000}, {0xbe33e000}, {0xbe340000}, {0xbe342000}, {0xbe344000}, {0xbe346000}, {0xbe348000}, {0xbe34a000}, {0xbe34c000}, {0xbe34e000}, {0xbe350000}, {0xbe352000}, {0xbe354000}, {0xbe356000}, {0xbe358000}, {0xbe35a000}, {0xbe35c000}, {0xbe35e000}, {0xbe360000}, {0xbe362000}, {0xbe364000}, {0xbe366000}, {0xbe368000}, {0xbe36a000}, {0xbe36c000}, {0xbe36e000}, {0xbe370000}, {0xbe372000}, {0xbe374000}, {0xbe376000}, {0xbe378000}, {0xbe37a000}, {0xbe37c000}, {0xbe37e000}, {0xbe380000}, {0xbe382000}, {0xbe384000}, {0xbe386000}, {0xbe388000}, {0xbe38a000}, {0xbe38c000}, {0xbe38e000}, {0xbe390000}, {0xbe392000}, {0xbe394000}, {0xbe396000}, {0xbe398000}, {0xbe39a000}, {0xbe39c000}, {0xbe39e000}, {0xbe3a0000}, {0xbe3a2000}, {0xbe3a4000}, {0xbe3a6000}, {0xbe3a8000}, {0xbe3aa000}, {0xbe3ac000}, {0xbe3ae000}, {0xbe3b0000}, {0xbe3b2000}, {0xbe3b4000}, {0xbe3b6000}, {0xbe3b8000}, {0xbe3ba000}, {0xbe3bc000}, {0xbe3be000}, {0xbe3c0000}, {0xbe3c2000}, {0xbe3c4000}, {0xbe3c6000}, {0xbe3c8000}, {0xbe3ca000}, {0xbe3cc000}, {0xbe3ce000}, {0xbe3d0000}, {0xbe3d2000}, {0xbe3d4000}, {0xbe3d6000}, {0xbe3d8000}, {0xbe3da000}, {0xbe3dc000}, {0xbe3de000}, {0xbe3e0000}, {0xbe3e2000}, {0xbe3e4000}, {0xbe3e6000}, {0xbe3e8000}, {0xbe3ea000}, {0xbe3ec000}, {0xbe3ee000}, {0xbe3f0000}, {0xbe3f2000}, {0xbe3f4000}, {0xbe3f6000}, {0xbe3f8000}, {0xbe3fa000}, {0xbe3fc000}, {0xbe3fe000}, {0xbe400000}, {0xbe402000}, {0xbe404000}, {0xbe406000}, {0xbe408000}, {0xbe40a000}, {0xbe40c000}, {0xbe40e000}, {0xbe410000}, {0xbe412000}, {0xbe414000}, {0xbe416000}, {0xbe418000}, {0xbe41a000}, {0xbe41c000}, {0xbe41e000}, {0xbe420000}, {0xbe422000}, {0xbe424000}, {0xbe426000}, {0xbe428000}, {0xbe42a000}, {0xbe42c000}, {0xbe42e000}, {0xbe430000}, {0xbe432000}, {0xbe434000}, {0xbe436000}, {0xbe438000}, {0xbe43a000}, {0xbe43c000}, {0xbe43e000}, {0xbe440000}, {0xbe442000}, {0xbe444000}, {0xbe446000}, {0xbe448000}, {0xbe44a000}, {0xbe44c000}, {0xbe44e000}, {0xbe450000}, {0xbe452000}, {0xbe454000}, {0xbe456000}, {0xbe458000}, {0xbe45a000}, {0xbe45c000}, {0xbe45e000}, {0xbe460000}, {0xbe462000}, {0xbe464000}, {0xbe466000}, {0xbe468000}, {0xbe46a000}, {0xbe46c000}, {0xbe46e000}, {0xbe470000}, {0xbe472000}, {0xbe474000}, {0xbe476000}, {0xbe478000}, {0xbe47a000}, {0xbe47c000}, {0xbe47e000}, {0xbe480000}, {0xbe482000}, {0xbe484000}, {0xbe486000}, {0xbe488000}, {0xbe48a000}, {0xbe48c000}, {0xbe48e000}, {0xbe490000}, {0xbe492000}, {0xbe494000}, {0xbe496000}, {0xbe498000}, {0xbe49a000}, {0xbe49c000}, {0xbe49e000}, {0xbe4a0000}, {0xbe4a2000}, {0xbe4a4000}, {0xbe4a6000}, {0xbe4a8000}, {0xbe4aa000}, {0xbe4ac000}, {0xbe4ae000}, {0xbe4b0000}, {0xbe4b2000}, {0xbe4b4000}, {0xbe4b6000}, {0xbe4b8000}, {0xbe4ba000}, {0xbe4bc000}, {0xbe4be000}, {0xbe4c0000}, {0xbe4c2000}, {0xbe4c4000}, {0xbe4c6000}, {0xbe4c8000}, {0xbe4ca000}, {0xbe4cc000}, {0xbe4ce000}, {0xbe4d0000}, {0xbe4d2000}, {0xbe4d4000}, {0xbe4d6000}, {0xbe4d8000}, {0xbe4da000}, {0xbe4dc000}, {0xbe4de000}, {0xbe4e0000}, {0xbe4e2000}, {0xbe4e4000}, {0xbe4e6000}, {0xbe4e8000}, {0xbe4ea000}, {0xbe4ec000}, {0xbe4ee000}, {0xbe4f0000}, {0xbe4f2000}, {0xbe4f4000}, {0xbe4f6000}, {0xbe4f8000}, {0xbe4fa000}, {0xbe4fc000}, {0xbe4fe000}, {0xbe500000}, {0xbe502000}, {0xbe504000}, {0xbe506000}, {0xbe508000}, {0xbe50a000}, {0xbe50c000}, {0xbe50e000}, {0xbe510000}, {0xbe512000}, {0xbe514000}, {0xbe516000}, {0xbe518000}, {0xbe51a000}, {0xbe51c000}, {0xbe51e000}, {0xbe520000}, {0xbe522000}, {0xbe524000}, {0xbe526000}, {0xbe528000}, {0xbe52a000}, {0xbe52c000}, {0xbe52e000}, {0xbe530000}, {0xbe532000}, {0xbe534000}, {0xbe536000}, {0xbe538000}, {0xbe53a000}, {0xbe53c000}, {0xbe53e000}, {0xbe540000}, {0xbe542000}, {0xbe544000}, {0xbe546000}, {0xbe548000}, {0xbe54a000}, {0xbe54c000}, {0xbe54e000}, {0xbe550000}, {0xbe552000}, {0xbe554000}, {0xbe556000}, {0xbe558000}, {0xbe55a000}, {0xbe55c000}, {0xbe55e000}, {0xbe560000}, {0xbe562000}, {0xbe564000}, {0xbe566000}, {0xbe568000}, {0xbe56a000}, {0xbe56c000}, {0xbe56e000}, {0xbe570000}, {0xbe572000}, {0xbe574000}, {0xbe576000}, {0xbe578000}, {0xbe57a000}, {0xbe57c000}, {0xbe57e000}, {0xbe580000}, {0xbe582000}, {0xbe584000}, {0xbe586000}, {0xbe588000}, {0xbe58a000}, {0xbe58c000}, {0xbe58e000}, {0xbe590000}, {0xbe592000}, {0xbe594000}, {0xbe596000}, {0xbe598000}, {0xbe59a000}, {0xbe59c000}, {0xbe59e000}, {0xbe5a0000}, {0xbe5a2000}, {0xbe5a4000}, {0xbe5a6000}, {0xbe5a8000}, {0xbe5aa000}, {0xbe5ac000}, {0xbe5ae000}, {0xbe5b0000}, {0xbe5b2000}, {0xbe5b4000}, {0xbe5b6000}, {0xbe5b8000}, {0xbe5ba000}, {0xbe5bc000}, {0xbe5be000}, {0xbe5c0000}, {0xbe5c2000}, {0xbe5c4000}, {0xbe5c6000}, {0xbe5c8000}, {0xbe5ca000}, {0xbe5cc000}, {0xbe5ce000}, {0xbe5d0000}, {0xbe5d2000}, {0xbe5d4000}, {0xbe5d6000}, {0xbe5d8000}, {0xbe5da000}, {0xbe5dc000}, {0xbe5de000}, {0xbe5e0000}, {0xbe5e2000}, {0xbe5e4000}, {0xbe5e6000}, {0xbe5e8000}, {0xbe5ea000}, {0xbe5ec000}, {0xbe5ee000}, {0xbe5f0000}, {0xbe5f2000}, {0xbe5f4000}, {0xbe5f6000}, {0xbe5f8000}, {0xbe5fa000}, {0xbe5fc000}, {0xbe5fe000}, {0xbe600000}, {0xbe602000}, {0xbe604000}, {0xbe606000}, {0xbe608000}, {0xbe60a000}, {0xbe60c000}, {0xbe60e000}, {0xbe610000}, {0xbe612000}, {0xbe614000}, {0xbe616000}, {0xbe618000}, {0xbe61a000}, {0xbe61c000}, {0xbe61e000}, {0xbe620000}, {0xbe622000}, {0xbe624000}, {0xbe626000}, {0xbe628000}, {0xbe62a000}, {0xbe62c000}, {0xbe62e000}, {0xbe630000}, {0xbe632000}, {0xbe634000}, {0xbe636000}, {0xbe638000}, {0xbe63a000}, {0xbe63c000}, {0xbe63e000}, {0xbe640000}, {0xbe642000}, {0xbe644000}, {0xbe646000}, {0xbe648000}, {0xbe64a000}, {0xbe64c000}, {0xbe64e000}, {0xbe650000}, {0xbe652000}, {0xbe654000}, {0xbe656000}, {0xbe658000}, {0xbe65a000}, {0xbe65c000}, {0xbe65e000}, {0xbe660000}, {0xbe662000}, {0xbe664000}, {0xbe666000}, {0xbe668000}, {0xbe66a000}, {0xbe66c000}, {0xbe66e000}, {0xbe670000}, {0xbe672000}, {0xbe674000}, {0xbe676000}, {0xbe678000}, {0xbe67a000}, {0xbe67c000}, {0xbe67e000}, {0xbe680000}, {0xbe682000}, {0xbe684000}, {0xbe686000}, {0xbe688000}, {0xbe68a000}, {0xbe68c000}, {0xbe68e000}, {0xbe690000}, {0xbe692000}, {0xbe694000}, {0xbe696000}, {0xbe698000}, {0xbe69a000}, {0xbe69c000}, {0xbe69e000}, {0xbe6a0000}, {0xbe6a2000}, {0xbe6a4000}, {0xbe6a6000}, {0xbe6a8000}, {0xbe6aa000}, {0xbe6ac000}, {0xbe6ae000}, {0xbe6b0000}, {0xbe6b2000}, {0xbe6b4000}, {0xbe6b6000}, {0xbe6b8000}, {0xbe6ba000}, {0xbe6bc000}, {0xbe6be000}, {0xbe6c0000}, {0xbe6c2000}, {0xbe6c4000}, {0xbe6c6000}, {0xbe6c8000}, {0xbe6ca000}, {0xbe6cc000}, {0xbe6ce000}, {0xbe6d0000}, {0xbe6d2000}, {0xbe6d4000}, {0xbe6d6000}, {0xbe6d8000}, {0xbe6da000}, {0xbe6dc000}, {0xbe6de000}, {0xbe6e0000}, {0xbe6e2000}, {0xbe6e4000}, {0xbe6e6000}, {0xbe6e8000}, {0xbe6ea000}, {0xbe6ec000}, {0xbe6ee000}, {0xbe6f0000}, {0xbe6f2000}, {0xbe6f4000}, {0xbe6f6000}, {0xbe6f8000}, {0xbe6fa000}, {0xbe6fc000}, {0xbe6fe000}, {0xbe700000}, {0xbe702000}, {0xbe704000}, {0xbe706000}, {0xbe708000}, {0xbe70a000}, {0xbe70c000}, {0xbe70e000}, {0xbe710000}, {0xbe712000}, {0xbe714000}, {0xbe716000}, {0xbe718000}, {0xbe71a000}, {0xbe71c000}, {0xbe71e000}, {0xbe720000}, {0xbe722000}, {0xbe724000}, {0xbe726000}, {0xbe728000}, {0xbe72a000}, {0xbe72c000}, {0xbe72e000}, {0xbe730000}, {0xbe732000}, {0xbe734000}, {0xbe736000}, {0xbe738000}, {0xbe73a000}, {0xbe73c000}, {0xbe73e000}, {0xbe740000}, {0xbe742000}, {0xbe744000}, {0xbe746000}, {0xbe748000}, {0xbe74a000}, {0xbe74c000}, {0xbe74e000}, {0xbe750000}, {0xbe752000}, {0xbe754000}, {0xbe756000}, {0xbe758000}, {0xbe75a000}, {0xbe75c000}, {0xbe75e000}, {0xbe760000}, {0xbe762000}, {0xbe764000}, {0xbe766000}, {0xbe768000}, {0xbe76a000}, {0xbe76c000}, {0xbe76e000}, {0xbe770000}, {0xbe772000}, {0xbe774000}, {0xbe776000}, {0xbe778000}, {0xbe77a000}, {0xbe77c000}, {0xbe77e000}, {0xbe780000}, {0xbe782000}, {0xbe784000}, {0xbe786000}, {0xbe788000}, {0xbe78a000}, {0xbe78c000}, {0xbe78e000}, {0xbe790000}, {0xbe792000}, {0xbe794000}, {0xbe796000}, {0xbe798000}, {0xbe79a000}, {0xbe79c000}, {0xbe79e000}, {0xbe7a0000}, {0xbe7a2000}, {0xbe7a4000}, {0xbe7a6000}, {0xbe7a8000}, {0xbe7aa000}, {0xbe7ac000}, {0xbe7ae000}, {0xbe7b0000}, {0xbe7b2000}, {0xbe7b4000}, {0xbe7b6000}, {0xbe7b8000}, {0xbe7ba000}, {0xbe7bc000}, {0xbe7be000}, {0xbe7c0000}, {0xbe7c2000}, {0xbe7c4000}, {0xbe7c6000}, {0xbe7c8000}, {0xbe7ca000}, {0xbe7cc000}, {0xbe7ce000}, {0xbe7d0000}, {0xbe7d2000}, {0xbe7d4000}, {0xbe7d6000}, {0xbe7d8000}, {0xbe7da000}, {0xbe7dc000}, {0xbe7de000}, {0xbe7e0000}, {0xbe7e2000}, {0xbe7e4000}, {0xbe7e6000}, {0xbe7e8000}, {0xbe7ea000}, {0xbe7ec000}, {0xbe7ee000}, {0xbe7f0000}, {0xbe7f2000}, {0xbe7f4000}, {0xbe7f6000}, {0xbe7f8000}, {0xbe7fa000}, {0xbe7fc000}, {0xbe7fe000}, {0xbe800000}, {0xbe802000}, {0xbe804000}, {0xbe806000}, {0xbe808000}, {0xbe80a000}, {0xbe80c000}, {0xbe80e000}, {0xbe810000}, {0xbe812000}, {0xbe814000}, {0xbe816000}, {0xbe818000}, {0xbe81a000}, {0xbe81c000}, {0xbe81e000}, {0xbe820000}, {0xbe822000}, {0xbe824000}, {0xbe826000}, {0xbe828000}, {0xbe82a000}, {0xbe82c000}, {0xbe82e000}, {0xbe830000}, {0xbe832000}, {0xbe834000}, {0xbe836000}, {0xbe838000}, {0xbe83a000}, {0xbe83c000}, {0xbe83e000}, {0xbe840000}, {0xbe842000}, {0xbe844000}, {0xbe846000}, {0xbe848000}, {0xbe84a000}, {0xbe84c000}, {0xbe84e000}, {0xbe850000}, {0xbe852000}, {0xbe854000}, {0xbe856000}, {0xbe858000}, {0xbe85a000}, {0xbe85c000}, {0xbe85e000}, {0xbe860000}, {0xbe862000}, {0xbe864000}, {0xbe866000}, {0xbe868000}, {0xbe86a000}, {0xbe86c000}, {0xbe86e000}, {0xbe870000}, {0xbe872000}, {0xbe874000}, {0xbe876000}, {0xbe878000}, {0xbe87a000}, {0xbe87c000}, {0xbe87e000}, {0xbe880000}, {0xbe882000}, {0xbe884000}, {0xbe886000}, {0xbe888000}, {0xbe88a000}, {0xbe88c000}, {0xbe88e000}, {0xbe890000}, {0xbe892000}, {0xbe894000}, {0xbe896000}, {0xbe898000}, {0xbe89a000}, {0xbe89c000}, {0xbe89e000}, {0xbe8a0000}, {0xbe8a2000}, {0xbe8a4000}, {0xbe8a6000}, {0xbe8a8000}, {0xbe8aa000}, {0xbe8ac000}, {0xbe8ae000}, {0xbe8b0000}, {0xbe8b2000}, {0xbe8b4000}, {0xbe8b6000}, {0xbe8b8000}, {0xbe8ba000}, {0xbe8bc000}, {0xbe8be000}, {0xbe8c0000}, {0xbe8c2000}, {0xbe8c4000}, {0xbe8c6000}, {0xbe8c8000}, {0xbe8ca000}, {0xbe8cc000}, {0xbe8ce000}, {0xbe8d0000}, {0xbe8d2000}, {0xbe8d4000}, {0xbe8d6000}, {0xbe8d8000}, {0xbe8da000}, {0xbe8dc000}, {0xbe8de000}, {0xbe8e0000}, {0xbe8e2000}, {0xbe8e4000}, {0xbe8e6000}, {0xbe8e8000}, {0xbe8ea000}, {0xbe8ec000}, {0xbe8ee000}, {0xbe8f0000}, {0xbe8f2000}, {0xbe8f4000}, {0xbe8f6000}, {0xbe8f8000}, {0xbe8fa000}, {0xbe8fc000}, {0xbe8fe000}, {0xbe900000}, {0xbe902000}, {0xbe904000}, {0xbe906000}, {0xbe908000}, {0xbe90a000}, {0xbe90c000}, {0xbe90e000}, {0xbe910000}, {0xbe912000}, {0xbe914000}, {0xbe916000}, {0xbe918000}, {0xbe91a000}, {0xbe91c000}, {0xbe91e000}, {0xbe920000}, {0xbe922000}, {0xbe924000}, {0xbe926000}, {0xbe928000}, {0xbe92a000}, {0xbe92c000}, {0xbe92e000}, {0xbe930000}, {0xbe932000}, {0xbe934000}, {0xbe936000}, {0xbe938000}, {0xbe93a000}, {0xbe93c000}, {0xbe93e000}, {0xbe940000}, {0xbe942000}, {0xbe944000}, {0xbe946000}, {0xbe948000}, {0xbe94a000}, {0xbe94c000}, {0xbe94e000}, {0xbe950000}, {0xbe952000}, {0xbe954000}, {0xbe956000}, {0xbe958000}, {0xbe95a000}, {0xbe95c000}, {0xbe95e000}, {0xbe960000}, {0xbe962000}, {0xbe964000}, {0xbe966000}, {0xbe968000}, {0xbe96a000}, {0xbe96c000}, {0xbe96e000}, {0xbe970000}, {0xbe972000}, {0xbe974000}, {0xbe976000}, {0xbe978000}, {0xbe97a000}, {0xbe97c000}, {0xbe97e000}, {0xbe980000}, {0xbe982000}, {0xbe984000}, {0xbe986000}, {0xbe988000}, {0xbe98a000}, {0xbe98c000}, {0xbe98e000}, {0xbe990000}, {0xbe992000}, {0xbe994000}, {0xbe996000}, {0xbe998000}, {0xbe99a000}, {0xbe99c000}, {0xbe99e000}, {0xbe9a0000}, {0xbe9a2000}, {0xbe9a4000}, {0xbe9a6000}, {0xbe9a8000}, {0xbe9aa000}, {0xbe9ac000}, {0xbe9ae000}, {0xbe9b0000}, {0xbe9b2000}, {0xbe9b4000}, {0xbe9b6000}, {0xbe9b8000}, {0xbe9ba000}, {0xbe9bc000}, {0xbe9be000}, {0xbe9c0000}, {0xbe9c2000}, {0xbe9c4000}, {0xbe9c6000}, {0xbe9c8000}, {0xbe9ca000}, {0xbe9cc000}, {0xbe9ce000}, {0xbe9d0000}, {0xbe9d2000}, {0xbe9d4000}, {0xbe9d6000}, {0xbe9d8000}, {0xbe9da000}, {0xbe9dc000}, {0xbe9de000}, {0xbe9e0000}, {0xbe9e2000}, {0xbe9e4000}, {0xbe9e6000}, {0xbe9e8000}, {0xbe9ea000}, {0xbe9ec000}, {0xbe9ee000}, {0xbe9f0000}, {0xbe9f2000}, {0xbe9f4000}, {0xbe9f6000}, {0xbe9f8000}, {0xbe9fa000}, {0xbe9fc000}, {0xbe9fe000}, {0xbea00000}, {0xbea02000}, {0xbea04000}, {0xbea06000}, {0xbea08000}, {0xbea0a000}, {0xbea0c000}, {0xbea0e000}, {0xbea10000}, {0xbea12000}, {0xbea14000}, {0xbea16000}, {0xbea18000}, {0xbea1a000}, {0xbea1c000}, {0xbea1e000}, {0xbea20000}, {0xbea22000}, {0xbea24000}, {0xbea26000}, {0xbea28000}, {0xbea2a000}, {0xbea2c000}, {0xbea2e000}, {0xbea30000}, {0xbea32000}, {0xbea34000}, {0xbea36000}, {0xbea38000}, {0xbea3a000}, {0xbea3c000}, {0xbea3e000}, {0xbea40000}, {0xbea42000}, {0xbea44000}, {0xbea46000}, {0xbea48000}, {0xbea4a000}, {0xbea4c000}, {0xbea4e000}, {0xbea50000}, {0xbea52000}, {0xbea54000}, {0xbea56000}, {0xbea58000}, {0xbea5a000}, {0xbea5c000}, {0xbea5e000}, {0xbea60000}, {0xbea62000}, {0xbea64000}, {0xbea66000}, {0xbea68000}, {0xbea6a000}, {0xbea6c000}, {0xbea6e000}, {0xbea70000}, {0xbea72000}, {0xbea74000}, {0xbea76000}, {0xbea78000}, {0xbea7a000}, {0xbea7c000}, {0xbea7e000}, {0xbea80000}, {0xbea82000}, {0xbea84000}, {0xbea86000}, {0xbea88000}, {0xbea8a000}, {0xbea8c000}, {0xbea8e000}, {0xbea90000}, {0xbea92000}, {0xbea94000}, {0xbea96000}, {0xbea98000}, {0xbea9a000}, {0xbea9c000}, {0xbea9e000}, {0xbeaa0000}, {0xbeaa2000}, {0xbeaa4000}, {0xbeaa6000}, {0xbeaa8000}, {0xbeaaa000}, {0xbeaac000}, {0xbeaae000}, {0xbeab0000}, {0xbeab2000}, {0xbeab4000}, {0xbeab6000}, {0xbeab8000}, {0xbeaba000}, {0xbeabc000}, {0xbeabe000}, {0xbeac0000}, {0xbeac2000}, {0xbeac4000}, {0xbeac6000}, {0xbeac8000}, {0xbeaca000}, {0xbeacc000}, {0xbeace000}, {0xbead0000}, {0xbead2000}, {0xbead4000}, {0xbead6000}, {0xbead8000}, {0xbeada000}, {0xbeadc000}, {0xbeade000}, {0xbeae0000}, {0xbeae2000}, {0xbeae4000}, {0xbeae6000}, {0xbeae8000}, {0xbeaea000}, {0xbeaec000}, {0xbeaee000}, {0xbeaf0000}, {0xbeaf2000}, {0xbeaf4000}, {0xbeaf6000}, {0xbeaf8000}, {0xbeafa000}, {0xbeafc000}, {0xbeafe000}, {0xbeb00000}, {0xbeb02000}, {0xbeb04000}, {0xbeb06000}, {0xbeb08000}, {0xbeb0a000}, {0xbeb0c000}, {0xbeb0e000}, {0xbeb10000}, {0xbeb12000}, {0xbeb14000}, {0xbeb16000}, {0xbeb18000}, {0xbeb1a000}, {0xbeb1c000}, {0xbeb1e000}, {0xbeb20000}, {0xbeb22000}, {0xbeb24000}, {0xbeb26000}, {0xbeb28000}, {0xbeb2a000}, {0xbeb2c000}, {0xbeb2e000}, {0xbeb30000}, {0xbeb32000}, {0xbeb34000}, {0xbeb36000}, {0xbeb38000}, {0xbeb3a000}, {0xbeb3c000}, {0xbeb3e000}, {0xbeb40000}, {0xbeb42000}, {0xbeb44000}, {0xbeb46000}, {0xbeb48000}, {0xbeb4a000}, {0xbeb4c000}, {0xbeb4e000}, {0xbeb50000}, {0xbeb52000}, {0xbeb54000}, {0xbeb56000}, {0xbeb58000}, {0xbeb5a000}, {0xbeb5c000}, {0xbeb5e000}, {0xbeb60000}, {0xbeb62000}, {0xbeb64000}, {0xbeb66000}, {0xbeb68000}, {0xbeb6a000}, {0xbeb6c000}, {0xbeb6e000}, {0xbeb70000}, {0xbeb72000}, {0xbeb74000}, {0xbeb76000}, {0xbeb78000}, {0xbeb7a000}, {0xbeb7c000}, {0xbeb7e000}, {0xbeb80000}, {0xbeb82000}, {0xbeb84000}, {0xbeb86000}, {0xbeb88000}, {0xbeb8a000}, {0xbeb8c000}, {0xbeb8e000}, {0xbeb90000}, {0xbeb92000}, {0xbeb94000}, {0xbeb96000}, {0xbeb98000}, {0xbeb9a000}, {0xbeb9c000}, {0xbeb9e000}, {0xbeba0000}, {0xbeba2000}, {0xbeba4000}, {0xbeba6000}, {0xbeba8000}, {0xbebaa000}, {0xbebac000}, {0xbebae000}, {0xbebb0000}, {0xbebb2000}, {0xbebb4000}, {0xbebb6000}, {0xbebb8000}, {0xbebba000}, {0xbebbc000}, {0xbebbe000}, {0xbebc0000}, {0xbebc2000}, {0xbebc4000}, {0xbebc6000}, {0xbebc8000}, {0xbebca000}, {0xbebcc000}, {0xbebce000}, {0xbebd0000}, {0xbebd2000}, {0xbebd4000}, {0xbebd6000}, {0xbebd8000}, {0xbebda000}, {0xbebdc000}, {0xbebde000}, {0xbebe0000}, {0xbebe2000}, {0xbebe4000}, {0xbebe6000}, {0xbebe8000}, {0xbebea000}, {0xbebec000}, {0xbebee000}, {0xbebf0000}, {0xbebf2000}, {0xbebf4000}, {0xbebf6000}, {0xbebf8000}, {0xbebfa000}, {0xbebfc000}, {0xbebfe000}, {0xbec00000}, {0xbec02000}, {0xbec04000}, {0xbec06000}, {0xbec08000}, {0xbec0a000}, {0xbec0c000}, {0xbec0e000}, {0xbec10000}, {0xbec12000}, {0xbec14000}, {0xbec16000}, {0xbec18000}, {0xbec1a000}, {0xbec1c000}, {0xbec1e000}, {0xbec20000}, {0xbec22000}, {0xbec24000}, {0xbec26000}, {0xbec28000}, {0xbec2a000}, {0xbec2c000}, {0xbec2e000}, {0xbec30000}, {0xbec32000}, {0xbec34000}, {0xbec36000}, {0xbec38000}, {0xbec3a000}, {0xbec3c000}, {0xbec3e000}, {0xbec40000}, {0xbec42000}, {0xbec44000}, {0xbec46000}, {0xbec48000}, {0xbec4a000}, {0xbec4c000}, {0xbec4e000}, {0xbec50000}, {0xbec52000}, {0xbec54000}, {0xbec56000}, {0xbec58000}, {0xbec5a000}, {0xbec5c000}, {0xbec5e000}, {0xbec60000}, {0xbec62000}, {0xbec64000}, {0xbec66000}, {0xbec68000}, {0xbec6a000}, {0xbec6c000}, {0xbec6e000}, {0xbec70000}, {0xbec72000}, {0xbec74000}, {0xbec76000}, {0xbec78000}, {0xbec7a000}, {0xbec7c000}, {0xbec7e000}, {0xbec80000}, {0xbec82000}, {0xbec84000}, {0xbec86000}, {0xbec88000}, {0xbec8a000}, {0xbec8c000}, {0xbec8e000}, {0xbec90000}, {0xbec92000}, {0xbec94000}, {0xbec96000}, {0xbec98000}, {0xbec9a000}, {0xbec9c000}, {0xbec9e000}, {0xbeca0000}, {0xbeca2000}, {0xbeca4000}, {0xbeca6000}, {0xbeca8000}, {0xbecaa000}, {0xbecac000}, {0xbecae000}, {0xbecb0000}, {0xbecb2000}, {0xbecb4000}, {0xbecb6000}, {0xbecb8000}, {0xbecba000}, {0xbecbc000}, {0xbecbe000}, {0xbecc0000}, {0xbecc2000}, {0xbecc4000}, {0xbecc6000}, {0xbecc8000}, {0xbecca000}, {0xbeccc000}, {0xbecce000}, {0xbecd0000}, {0xbecd2000}, {0xbecd4000}, {0xbecd6000}, {0xbecd8000}, {0xbecda000}, {0xbecdc000}, {0xbecde000}, {0xbece0000}, {0xbece2000}, {0xbece4000}, {0xbece6000}, {0xbece8000}, {0xbecea000}, {0xbecec000}, {0xbecee000}, {0xbecf0000}, {0xbecf2000}, {0xbecf4000}, {0xbecf6000}, {0xbecf8000}, {0xbecfa000}, {0xbecfc000}, {0xbecfe000}, {0xbed00000}, {0xbed02000}, {0xbed04000}, {0xbed06000}, {0xbed08000}, {0xbed0a000}, {0xbed0c000}, {0xbed0e000}, {0xbed10000}, {0xbed12000}, {0xbed14000}, {0xbed16000}, {0xbed18000}, {0xbed1a000}, {0xbed1c000}, {0xbed1e000}, {0xbed20000}, {0xbed22000}, {0xbed24000}, {0xbed26000}, {0xbed28000}, {0xbed2a000}, {0xbed2c000}, {0xbed2e000}, {0xbed30000}, {0xbed32000}, {0xbed34000}, {0xbed36000}, {0xbed38000}, {0xbed3a000}, {0xbed3c000}, {0xbed3e000}, {0xbed40000}, {0xbed42000}, {0xbed44000}, {0xbed46000}, {0xbed48000}, {0xbed4a000}, {0xbed4c000}, {0xbed4e000}, {0xbed50000}, {0xbed52000}, {0xbed54000}, {0xbed56000}, {0xbed58000}, {0xbed5a000}, {0xbed5c000}, {0xbed5e000}, {0xbed60000}, {0xbed62000}, {0xbed64000}, {0xbed66000}, {0xbed68000}, {0xbed6a000}, {0xbed6c000}, {0xbed6e000}, {0xbed70000}, {0xbed72000}, {0xbed74000}, {0xbed76000}, {0xbed78000}, {0xbed7a000}, {0xbed7c000}, {0xbed7e000}, {0xbed80000}, {0xbed82000}, {0xbed84000}, {0xbed86000}, {0xbed88000}, {0xbed8a000}, {0xbed8c000}, {0xbed8e000}, {0xbed90000}, {0xbed92000}, {0xbed94000}, {0xbed96000}, {0xbed98000}, {0xbed9a000}, {0xbed9c000}, {0xbed9e000}, {0xbeda0000}, {0xbeda2000}, {0xbeda4000}, {0xbeda6000}, {0xbeda8000}, {0xbedaa000}, {0xbedac000}, {0xbedae000}, {0xbedb0000}, {0xbedb2000}, {0xbedb4000}, {0xbedb6000}, {0xbedb8000}, {0xbedba000}, {0xbedbc000}, {0xbedbe000}, {0xbedc0000}, {0xbedc2000}, {0xbedc4000}, {0xbedc6000}, {0xbedc8000}, {0xbedca000}, {0xbedcc000}, {0xbedce000}, {0xbedd0000}, {0xbedd2000}, {0xbedd4000}, {0xbedd6000}, {0xbedd8000}, {0xbedda000}, {0xbeddc000}, {0xbedde000}, {0xbede0000}, {0xbede2000}, {0xbede4000}, {0xbede6000}, {0xbede8000}, {0xbedea000}, {0xbedec000}, {0xbedee000}, {0xbedf0000}, {0xbedf2000}, {0xbedf4000}, {0xbedf6000}, {0xbedf8000}, {0xbedfa000}, {0xbedfc000}, {0xbedfe000}, {0xbee00000}, {0xbee02000}, {0xbee04000}, {0xbee06000}, {0xbee08000}, {0xbee0a000}, {0xbee0c000}, {0xbee0e000}, {0xbee10000}, {0xbee12000}, {0xbee14000}, {0xbee16000}, {0xbee18000}, {0xbee1a000}, {0xbee1c000}, {0xbee1e000}, {0xbee20000}, {0xbee22000}, {0xbee24000}, {0xbee26000}, {0xbee28000}, {0xbee2a000}, {0xbee2c000}, {0xbee2e000}, {0xbee30000}, {0xbee32000}, {0xbee34000}, {0xbee36000}, {0xbee38000}, {0xbee3a000}, {0xbee3c000}, {0xbee3e000}, {0xbee40000}, {0xbee42000}, {0xbee44000}, {0xbee46000}, {0xbee48000}, {0xbee4a000}, {0xbee4c000}, {0xbee4e000}, {0xbee50000}, {0xbee52000}, {0xbee54000}, {0xbee56000}, {0xbee58000}, {0xbee5a000}, {0xbee5c000}, {0xbee5e000}, {0xbee60000}, {0xbee62000}, {0xbee64000}, {0xbee66000}, {0xbee68000}, {0xbee6a000}, {0xbee6c000}, {0xbee6e000}, {0xbee70000}, {0xbee72000}, {0xbee74000}, {0xbee76000}, {0xbee78000}, {0xbee7a000}, {0xbee7c000}, {0xbee7e000}, {0xbee80000}, {0xbee82000}, {0xbee84000}, {0xbee86000}, {0xbee88000}, {0xbee8a000}, {0xbee8c000}, {0xbee8e000}, {0xbee90000}, {0xbee92000}, {0xbee94000}, {0xbee96000}, {0xbee98000}, {0xbee9a000}, {0xbee9c000}, {0xbee9e000}, {0xbeea0000}, {0xbeea2000}, {0xbeea4000}, {0xbeea6000}, {0xbeea8000}, {0xbeeaa000}, {0xbeeac000}, {0xbeeae000}, {0xbeeb0000}, {0xbeeb2000}, {0xbeeb4000}, {0xbeeb6000}, {0xbeeb8000}, {0xbeeba000}, {0xbeebc000}, {0xbeebe000}, {0xbeec0000}, {0xbeec2000}, {0xbeec4000}, {0xbeec6000}, {0xbeec8000}, {0xbeeca000}, {0xbeecc000}, {0xbeece000}, {0xbeed0000}, {0xbeed2000}, {0xbeed4000}, {0xbeed6000}, {0xbeed8000}, {0xbeeda000}, {0xbeedc000}, {0xbeede000}, {0xbeee0000}, {0xbeee2000}, {0xbeee4000}, {0xbeee6000}, {0xbeee8000}, {0xbeeea000}, {0xbeeec000}, {0xbeeee000}, {0xbeef0000}, {0xbeef2000}, {0xbeef4000}, {0xbeef6000}, {0xbeef8000}, {0xbeefa000}, {0xbeefc000}, {0xbeefe000}, {0xbef00000}, {0xbef02000}, {0xbef04000}, {0xbef06000}, {0xbef08000}, {0xbef0a000}, {0xbef0c000}, {0xbef0e000}, {0xbef10000}, {0xbef12000}, {0xbef14000}, {0xbef16000}, {0xbef18000}, {0xbef1a000}, {0xbef1c000}, {0xbef1e000}, {0xbef20000}, {0xbef22000}, {0xbef24000}, {0xbef26000}, {0xbef28000}, {0xbef2a000}, {0xbef2c000}, {0xbef2e000}, {0xbef30000}, {0xbef32000}, {0xbef34000}, {0xbef36000}, {0xbef38000}, {0xbef3a000}, {0xbef3c000}, {0xbef3e000}, {0xbef40000}, {0xbef42000}, {0xbef44000}, {0xbef46000}, {0xbef48000}, {0xbef4a000}, {0xbef4c000}, {0xbef4e000}, {0xbef50000}, {0xbef52000}, {0xbef54000}, {0xbef56000}, {0xbef58000}, {0xbef5a000}, {0xbef5c000}, {0xbef5e000}, {0xbef60000}, {0xbef62000}, {0xbef64000}, {0xbef66000}, {0xbef68000}, {0xbef6a000}, {0xbef6c000}, {0xbef6e000}, {0xbef70000}, {0xbef72000}, {0xbef74000}, {0xbef76000}, {0xbef78000}, {0xbef7a000}, {0xbef7c000}, {0xbef7e000}, {0xbef80000}, {0xbef82000}, {0xbef84000}, {0xbef86000}, {0xbef88000}, {0xbef8a000}, {0xbef8c000}, {0xbef8e000}, {0xbef90000}, {0xbef92000}, {0xbef94000}, {0xbef96000}, {0xbef98000}, {0xbef9a000}, {0xbef9c000}, {0xbef9e000}, {0xbefa0000}, {0xbefa2000}, {0xbefa4000}, {0xbefa6000}, {0xbefa8000}, {0xbefaa000}, {0xbefac000}, {0xbefae000}, {0xbefb0000}, {0xbefb2000}, {0xbefb4000}, {0xbefb6000}, {0xbefb8000}, {0xbefba000}, {0xbefbc000}, {0xbefbe000}, {0xbefc0000}, {0xbefc2000}, {0xbefc4000}, {0xbefc6000}, {0xbefc8000}, {0xbefca000}, {0xbefcc000}, {0xbefce000}, {0xbefd0000}, {0xbefd2000}, {0xbefd4000}, {0xbefd6000}, {0xbefd8000}, {0xbefda000}, {0xbefdc000}, {0xbefde000}, {0xbefe0000}, {0xbefe2000}, {0xbefe4000}, {0xbefe6000}, {0xbefe8000}, {0xbefea000}, {0xbefec000}, {0xbefee000}, {0xbeff0000}, {0xbeff2000}, {0xbeff4000}, {0xbeff6000}, {0xbeff8000}, {0xbeffa000}, {0xbeffc000}, {0xbeffe000}, {0xbf000000}, {0xbf002000}, {0xbf004000}, {0xbf006000}, {0xbf008000}, {0xbf00a000}, {0xbf00c000}, {0xbf00e000}, {0xbf010000}, {0xbf012000}, {0xbf014000}, {0xbf016000}, {0xbf018000}, {0xbf01a000}, {0xbf01c000}, {0xbf01e000}, {0xbf020000}, {0xbf022000}, {0xbf024000}, {0xbf026000}, {0xbf028000}, {0xbf02a000}, {0xbf02c000}, {0xbf02e000}, {0xbf030000}, {0xbf032000}, {0xbf034000}, {0xbf036000}, {0xbf038000}, {0xbf03a000}, {0xbf03c000}, {0xbf03e000}, {0xbf040000}, {0xbf042000}, {0xbf044000}, {0xbf046000}, {0xbf048000}, {0xbf04a000}, {0xbf04c000}, {0xbf04e000}, {0xbf050000}, {0xbf052000}, {0xbf054000}, {0xbf056000}, {0xbf058000}, {0xbf05a000}, {0xbf05c000}, {0xbf05e000}, {0xbf060000}, {0xbf062000}, {0xbf064000}, {0xbf066000}, {0xbf068000}, {0xbf06a000}, {0xbf06c000}, {0xbf06e000}, {0xbf070000}, {0xbf072000}, {0xbf074000}, {0xbf076000}, {0xbf078000}, {0xbf07a000}, {0xbf07c000}, {0xbf07e000}, {0xbf080000}, {0xbf082000}, {0xbf084000}, {0xbf086000}, {0xbf088000}, {0xbf08a000}, {0xbf08c000}, {0xbf08e000}, {0xbf090000}, {0xbf092000}, {0xbf094000}, {0xbf096000}, {0xbf098000}, {0xbf09a000}, {0xbf09c000}, {0xbf09e000}, {0xbf0a0000}, {0xbf0a2000}, {0xbf0a4000}, {0xbf0a6000}, {0xbf0a8000}, {0xbf0aa000}, {0xbf0ac000}, {0xbf0ae000}, {0xbf0b0000}, {0xbf0b2000}, {0xbf0b4000}, {0xbf0b6000}, {0xbf0b8000}, {0xbf0ba000}, {0xbf0bc000}, {0xbf0be000}, {0xbf0c0000}, {0xbf0c2000}, {0xbf0c4000}, {0xbf0c6000}, {0xbf0c8000}, {0xbf0ca000}, {0xbf0cc000}, {0xbf0ce000}, {0xbf0d0000}, {0xbf0d2000}, {0xbf0d4000}, {0xbf0d6000}, {0xbf0d8000}, {0xbf0da000}, {0xbf0dc000}, {0xbf0de000}, {0xbf0e0000}, {0xbf0e2000}, {0xbf0e4000}, {0xbf0e6000}, {0xbf0e8000}, {0xbf0ea000}, {0xbf0ec000}, {0xbf0ee000}, {0xbf0f0000}, {0xbf0f2000}, {0xbf0f4000}, {0xbf0f6000}, {0xbf0f8000}, {0xbf0fa000}, {0xbf0fc000}, {0xbf0fe000}, {0xbf100000}, {0xbf102000}, {0xbf104000}, {0xbf106000}, {0xbf108000}, {0xbf10a000}, {0xbf10c000}, {0xbf10e000}, {0xbf110000}, {0xbf112000}, {0xbf114000}, {0xbf116000}, {0xbf118000}, {0xbf11a000}, {0xbf11c000}, {0xbf11e000}, {0xbf120000}, {0xbf122000}, {0xbf124000}, {0xbf126000}, {0xbf128000}, {0xbf12a000}, {0xbf12c000}, {0xbf12e000}, {0xbf130000}, {0xbf132000}, {0xbf134000}, {0xbf136000}, {0xbf138000}, {0xbf13a000}, {0xbf13c000}, {0xbf13e000}, {0xbf140000}, {0xbf142000}, {0xbf144000}, {0xbf146000}, {0xbf148000}, {0xbf14a000}, {0xbf14c000}, {0xbf14e000}, {0xbf150000}, {0xbf152000}, {0xbf154000}, {0xbf156000}, {0xbf158000}, {0xbf15a000}, {0xbf15c000}, {0xbf15e000}, {0xbf160000}, {0xbf162000}, {0xbf164000}, {0xbf166000}, {0xbf168000}, {0xbf16a000}, {0xbf16c000}, {0xbf16e000}, {0xbf170000}, {0xbf172000}, {0xbf174000}, {0xbf176000}, {0xbf178000}, {0xbf17a000}, {0xbf17c000}, {0xbf17e000}, {0xbf180000}, {0xbf182000}, {0xbf184000}, {0xbf186000}, {0xbf188000}, {0xbf18a000}, {0xbf18c000}, {0xbf18e000}, {0xbf190000}, {0xbf192000}, {0xbf194000}, {0xbf196000}, {0xbf198000}, {0xbf19a000}, {0xbf19c000}, {0xbf19e000}, {0xbf1a0000}, {0xbf1a2000}, {0xbf1a4000}, {0xbf1a6000}, {0xbf1a8000}, {0xbf1aa000}, {0xbf1ac000}, {0xbf1ae000}, {0xbf1b0000}, {0xbf1b2000}, {0xbf1b4000}, {0xbf1b6000}, {0xbf1b8000}, {0xbf1ba000}, {0xbf1bc000}, {0xbf1be000}, {0xbf1c0000}, {0xbf1c2000}, {0xbf1c4000}, {0xbf1c6000}, {0xbf1c8000}, {0xbf1ca000}, {0xbf1cc000}, {0xbf1ce000}, {0xbf1d0000}, {0xbf1d2000}, {0xbf1d4000}, {0xbf1d6000}, {0xbf1d8000}, {0xbf1da000}, {0xbf1dc000}, {0xbf1de000}, {0xbf1e0000}, {0xbf1e2000}, {0xbf1e4000}, {0xbf1e6000}, {0xbf1e8000}, {0xbf1ea000}, {0xbf1ec000}, {0xbf1ee000}, {0xbf1f0000}, {0xbf1f2000}, {0xbf1f4000}, {0xbf1f6000}, {0xbf1f8000}, {0xbf1fa000}, {0xbf1fc000}, {0xbf1fe000}, {0xbf200000}, {0xbf202000}, {0xbf204000}, {0xbf206000}, {0xbf208000}, {0xbf20a000}, {0xbf20c000}, {0xbf20e000}, {0xbf210000}, {0xbf212000}, {0xbf214000}, {0xbf216000}, {0xbf218000}, {0xbf21a000}, {0xbf21c000}, {0xbf21e000}, {0xbf220000}, {0xbf222000}, {0xbf224000}, {0xbf226000}, {0xbf228000}, {0xbf22a000}, {0xbf22c000}, {0xbf22e000}, {0xbf230000}, {0xbf232000}, {0xbf234000}, {0xbf236000}, {0xbf238000}, {0xbf23a000}, {0xbf23c000}, {0xbf23e000}, {0xbf240000}, {0xbf242000}, {0xbf244000}, {0xbf246000}, {0xbf248000}, {0xbf24a000}, {0xbf24c000}, {0xbf24e000}, {0xbf250000}, {0xbf252000}, {0xbf254000}, {0xbf256000}, {0xbf258000}, {0xbf25a000}, {0xbf25c000}, {0xbf25e000}, {0xbf260000}, {0xbf262000}, {0xbf264000}, {0xbf266000}, {0xbf268000}, {0xbf26a000}, {0xbf26c000}, {0xbf26e000}, {0xbf270000}, {0xbf272000}, {0xbf274000}, {0xbf276000}, {0xbf278000}, {0xbf27a000}, {0xbf27c000}, {0xbf27e000}, {0xbf280000}, {0xbf282000}, {0xbf284000}, {0xbf286000}, {0xbf288000}, {0xbf28a000}, {0xbf28c000}, {0xbf28e000}, {0xbf290000}, {0xbf292000}, {0xbf294000}, {0xbf296000}, {0xbf298000}, {0xbf29a000}, {0xbf29c000}, {0xbf29e000}, {0xbf2a0000}, {0xbf2a2000}, {0xbf2a4000}, {0xbf2a6000}, {0xbf2a8000}, {0xbf2aa000}, {0xbf2ac000}, {0xbf2ae000}, {0xbf2b0000}, {0xbf2b2000}, {0xbf2b4000}, {0xbf2b6000}, {0xbf2b8000}, {0xbf2ba000}, {0xbf2bc000}, {0xbf2be000}, {0xbf2c0000}, {0xbf2c2000}, {0xbf2c4000}, {0xbf2c6000}, {0xbf2c8000}, {0xbf2ca000}, {0xbf2cc000}, {0xbf2ce000}, {0xbf2d0000}, {0xbf2d2000}, {0xbf2d4000}, {0xbf2d6000}, {0xbf2d8000}, {0xbf2da000}, {0xbf2dc000}, {0xbf2de000}, {0xbf2e0000}, {0xbf2e2000}, {0xbf2e4000}, {0xbf2e6000}, {0xbf2e8000}, {0xbf2ea000}, {0xbf2ec000}, {0xbf2ee000}, {0xbf2f0000}, {0xbf2f2000}, {0xbf2f4000}, {0xbf2f6000}, {0xbf2f8000}, {0xbf2fa000}, {0xbf2fc000}, {0xbf2fe000}, {0xbf300000}, {0xbf302000}, {0xbf304000}, {0xbf306000}, {0xbf308000}, {0xbf30a000}, {0xbf30c000}, {0xbf30e000}, {0xbf310000}, {0xbf312000}, {0xbf314000}, {0xbf316000}, {0xbf318000}, {0xbf31a000}, {0xbf31c000}, {0xbf31e000}, {0xbf320000}, {0xbf322000}, {0xbf324000}, {0xbf326000}, {0xbf328000}, {0xbf32a000}, {0xbf32c000}, {0xbf32e000}, {0xbf330000}, {0xbf332000}, {0xbf334000}, {0xbf336000}, {0xbf338000}, {0xbf33a000}, {0xbf33c000}, {0xbf33e000}, {0xbf340000}, {0xbf342000}, {0xbf344000}, {0xbf346000}, {0xbf348000}, {0xbf34a000}, {0xbf34c000}, {0xbf34e000}, {0xbf350000}, {0xbf352000}, {0xbf354000}, {0xbf356000}, {0xbf358000}, {0xbf35a000}, {0xbf35c000}, {0xbf35e000}, {0xbf360000}, {0xbf362000}, {0xbf364000}, {0xbf366000}, {0xbf368000}, {0xbf36a000}, {0xbf36c000}, {0xbf36e000}, {0xbf370000}, {0xbf372000}, {0xbf374000}, {0xbf376000}, {0xbf378000}, {0xbf37a000}, {0xbf37c000}, {0xbf37e000}, {0xbf380000}, {0xbf382000}, {0xbf384000}, {0xbf386000}, {0xbf388000}, {0xbf38a000}, {0xbf38c000}, {0xbf38e000}, {0xbf390000}, {0xbf392000}, {0xbf394000}, {0xbf396000}, {0xbf398000}, {0xbf39a000}, {0xbf39c000}, {0xbf39e000}, {0xbf3a0000}, {0xbf3a2000}, {0xbf3a4000}, {0xbf3a6000}, {0xbf3a8000}, {0xbf3aa000}, {0xbf3ac000}, {0xbf3ae000}, {0xbf3b0000}, {0xbf3b2000}, {0xbf3b4000}, {0xbf3b6000}, {0xbf3b8000}, {0xbf3ba000}, {0xbf3bc000}, {0xbf3be000}, {0xbf3c0000}, {0xbf3c2000}, {0xbf3c4000}, {0xbf3c6000}, {0xbf3c8000}, {0xbf3ca000}, {0xbf3cc000}, {0xbf3ce000}, {0xbf3d0000}, {0xbf3d2000}, {0xbf3d4000}, {0xbf3d6000}, {0xbf3d8000}, {0xbf3da000}, {0xbf3dc000}, {0xbf3de000}, {0xbf3e0000}, {0xbf3e2000}, {0xbf3e4000}, {0xbf3e6000}, {0xbf3e8000}, {0xbf3ea000}, {0xbf3ec000}, {0xbf3ee000}, {0xbf3f0000}, {0xbf3f2000}, {0xbf3f4000}, {0xbf3f6000}, {0xbf3f8000}, {0xbf3fa000}, {0xbf3fc000}, {0xbf3fe000}, {0xbf400000}, {0xbf402000}, {0xbf404000}, {0xbf406000}, {0xbf408000}, {0xbf40a000}, {0xbf40c000}, {0xbf40e000}, {0xbf410000}, {0xbf412000}, {0xbf414000}, {0xbf416000}, {0xbf418000}, {0xbf41a000}, {0xbf41c000}, {0xbf41e000}, {0xbf420000}, {0xbf422000}, {0xbf424000}, {0xbf426000}, {0xbf428000}, {0xbf42a000}, {0xbf42c000}, {0xbf42e000}, {0xbf430000}, {0xbf432000}, {0xbf434000}, {0xbf436000}, {0xbf438000}, {0xbf43a000}, {0xbf43c000}, {0xbf43e000}, {0xbf440000}, {0xbf442000}, {0xbf444000}, {0xbf446000}, {0xbf448000}, {0xbf44a000}, {0xbf44c000}, {0xbf44e000}, {0xbf450000}, {0xbf452000}, {0xbf454000}, {0xbf456000}, {0xbf458000}, {0xbf45a000}, {0xbf45c000}, {0xbf45e000}, {0xbf460000}, {0xbf462000}, {0xbf464000}, {0xbf466000}, {0xbf468000}, {0xbf46a000}, {0xbf46c000}, {0xbf46e000}, {0xbf470000}, {0xbf472000}, {0xbf474000}, {0xbf476000}, {0xbf478000}, {0xbf47a000}, {0xbf47c000}, {0xbf47e000}, {0xbf480000}, {0xbf482000}, {0xbf484000}, {0xbf486000}, {0xbf488000}, {0xbf48a000}, {0xbf48c000}, {0xbf48e000}, {0xbf490000}, {0xbf492000}, {0xbf494000}, {0xbf496000}, {0xbf498000}, {0xbf49a000}, {0xbf49c000}, {0xbf49e000}, {0xbf4a0000}, {0xbf4a2000}, {0xbf4a4000}, {0xbf4a6000}, {0xbf4a8000}, {0xbf4aa000}, {0xbf4ac000}, {0xbf4ae000}, {0xbf4b0000}, {0xbf4b2000}, {0xbf4b4000}, {0xbf4b6000}, {0xbf4b8000}, {0xbf4ba000}, {0xbf4bc000}, {0xbf4be000}, {0xbf4c0000}, {0xbf4c2000}, {0xbf4c4000}, {0xbf4c6000}, {0xbf4c8000}, {0xbf4ca000}, {0xbf4cc000}, {0xbf4ce000}, {0xbf4d0000}, {0xbf4d2000}, {0xbf4d4000}, {0xbf4d6000}, {0xbf4d8000}, {0xbf4da000}, {0xbf4dc000}, {0xbf4de000}, {0xbf4e0000}, {0xbf4e2000}, {0xbf4e4000}, {0xbf4e6000}, {0xbf4e8000}, {0xbf4ea000}, {0xbf4ec000}, {0xbf4ee000}, {0xbf4f0000}, {0xbf4f2000}, {0xbf4f4000}, {0xbf4f6000}, {0xbf4f8000}, {0xbf4fa000}, {0xbf4fc000}, {0xbf4fe000}, {0xbf500000}, {0xbf502000}, {0xbf504000}, {0xbf506000}, {0xbf508000}, {0xbf50a000}, {0xbf50c000}, {0xbf50e000}, {0xbf510000}, {0xbf512000}, {0xbf514000}, {0xbf516000}, {0xbf518000}, {0xbf51a000}, {0xbf51c000}, {0xbf51e000}, {0xbf520000}, {0xbf522000}, {0xbf524000}, {0xbf526000}, {0xbf528000}, {0xbf52a000}, {0xbf52c000}, {0xbf52e000}, {0xbf530000}, {0xbf532000}, {0xbf534000}, {0xbf536000}, {0xbf538000}, {0xbf53a000}, {0xbf53c000}, {0xbf53e000}, {0xbf540000}, {0xbf542000}, {0xbf544000}, {0xbf546000}, {0xbf548000}, {0xbf54a000}, {0xbf54c000}, {0xbf54e000}, {0xbf550000}, {0xbf552000}, {0xbf554000}, {0xbf556000}, {0xbf558000}, {0xbf55a000}, {0xbf55c000}, {0xbf55e000}, {0xbf560000}, {0xbf562000}, {0xbf564000}, {0xbf566000}, {0xbf568000}, {0xbf56a000}, {0xbf56c000}, {0xbf56e000}, {0xbf570000}, {0xbf572000}, {0xbf574000}, {0xbf576000}, {0xbf578000}, {0xbf57a000}, {0xbf57c000}, {0xbf57e000}, {0xbf580000}, {0xbf582000}, {0xbf584000}, {0xbf586000}, {0xbf588000}, {0xbf58a000}, {0xbf58c000}, {0xbf58e000}, {0xbf590000}, {0xbf592000}, {0xbf594000}, {0xbf596000}, {0xbf598000}, {0xbf59a000}, {0xbf59c000}, {0xbf59e000}, {0xbf5a0000}, {0xbf5a2000}, {0xbf5a4000}, {0xbf5a6000}, {0xbf5a8000}, {0xbf5aa000}, {0xbf5ac000}, {0xbf5ae000}, {0xbf5b0000}, {0xbf5b2000}, {0xbf5b4000}, {0xbf5b6000}, {0xbf5b8000}, {0xbf5ba000}, {0xbf5bc000}, {0xbf5be000}, {0xbf5c0000}, {0xbf5c2000}, {0xbf5c4000}, {0xbf5c6000}, {0xbf5c8000}, {0xbf5ca000}, {0xbf5cc000}, {0xbf5ce000}, {0xbf5d0000}, {0xbf5d2000}, {0xbf5d4000}, {0xbf5d6000}, {0xbf5d8000}, {0xbf5da000}, {0xbf5dc000}, {0xbf5de000}, {0xbf5e0000}, {0xbf5e2000}, {0xbf5e4000}, {0xbf5e6000}, {0xbf5e8000}, {0xbf5ea000}, {0xbf5ec000}, {0xbf5ee000}, {0xbf5f0000}, {0xbf5f2000}, {0xbf5f4000}, {0xbf5f6000}, {0xbf5f8000}, {0xbf5fa000}, {0xbf5fc000}, {0xbf5fe000}, {0xbf600000}, {0xbf602000}, {0xbf604000}, {0xbf606000}, {0xbf608000}, {0xbf60a000}, {0xbf60c000}, {0xbf60e000}, {0xbf610000}, {0xbf612000}, {0xbf614000}, {0xbf616000}, {0xbf618000}, {0xbf61a000}, {0xbf61c000}, {0xbf61e000}, {0xbf620000}, {0xbf622000}, {0xbf624000}, {0xbf626000}, {0xbf628000}, {0xbf62a000}, {0xbf62c000}, {0xbf62e000}, {0xbf630000}, {0xbf632000}, {0xbf634000}, {0xbf636000}, {0xbf638000}, {0xbf63a000}, {0xbf63c000}, {0xbf63e000}, {0xbf640000}, {0xbf642000}, {0xbf644000}, {0xbf646000}, {0xbf648000}, {0xbf64a000}, {0xbf64c000}, {0xbf64e000}, {0xbf650000}, {0xbf652000}, {0xbf654000}, {0xbf656000}, {0xbf658000}, {0xbf65a000}, {0xbf65c000}, {0xbf65e000}, {0xbf660000}, {0xbf662000}, {0xbf664000}, {0xbf666000}, {0xbf668000}, {0xbf66a000}, {0xbf66c000}, {0xbf66e000}, {0xbf670000}, {0xbf672000}, {0xbf674000}, {0xbf676000}, {0xbf678000}, {0xbf67a000}, {0xbf67c000}, {0xbf67e000}, {0xbf680000}, {0xbf682000}, {0xbf684000}, {0xbf686000}, {0xbf688000}, {0xbf68a000}, {0xbf68c000}, {0xbf68e000}, {0xbf690000}, {0xbf692000}, {0xbf694000}, {0xbf696000}, {0xbf698000}, {0xbf69a000}, {0xbf69c000}, {0xbf69e000}, {0xbf6a0000}, {0xbf6a2000}, {0xbf6a4000}, {0xbf6a6000}, {0xbf6a8000}, {0xbf6aa000}, {0xbf6ac000}, {0xbf6ae000}, {0xbf6b0000}, {0xbf6b2000}, {0xbf6b4000}, {0xbf6b6000}, {0xbf6b8000}, {0xbf6ba000}, {0xbf6bc000}, {0xbf6be000}, {0xbf6c0000}, {0xbf6c2000}, {0xbf6c4000}, {0xbf6c6000}, {0xbf6c8000}, {0xbf6ca000}, {0xbf6cc000}, {0xbf6ce000}, {0xbf6d0000}, {0xbf6d2000}, {0xbf6d4000}, {0xbf6d6000}, {0xbf6d8000}, {0xbf6da000}, {0xbf6dc000}, {0xbf6de000}, {0xbf6e0000}, {0xbf6e2000}, {0xbf6e4000}, {0xbf6e6000}, {0xbf6e8000}, {0xbf6ea000}, {0xbf6ec000}, {0xbf6ee000}, {0xbf6f0000}, {0xbf6f2000}, {0xbf6f4000}, {0xbf6f6000}, {0xbf6f8000}, {0xbf6fa000}, {0xbf6fc000}, {0xbf6fe000}, {0xbf700000}, {0xbf702000}, {0xbf704000}, {0xbf706000}, {0xbf708000}, {0xbf70a000}, {0xbf70c000}, {0xbf70e000}, {0xbf710000}, {0xbf712000}, {0xbf714000}, {0xbf716000}, {0xbf718000}, {0xbf71a000}, {0xbf71c000}, {0xbf71e000}, {0xbf720000}, {0xbf722000}, {0xbf724000}, {0xbf726000}, {0xbf728000}, {0xbf72a000}, {0xbf72c000}, {0xbf72e000}, {0xbf730000}, {0xbf732000}, {0xbf734000}, {0xbf736000}, {0xbf738000}, {0xbf73a000}, {0xbf73c000}, {0xbf73e000}, {0xbf740000}, {0xbf742000}, {0xbf744000}, {0xbf746000}, {0xbf748000}, {0xbf74a000}, {0xbf74c000}, {0xbf74e000}, {0xbf750000}, {0xbf752000}, {0xbf754000}, {0xbf756000}, {0xbf758000}, {0xbf75a000}, {0xbf75c000}, {0xbf75e000}, {0xbf760000}, {0xbf762000}, {0xbf764000}, {0xbf766000}, {0xbf768000}, {0xbf76a000}, {0xbf76c000}, {0xbf76e000}, {0xbf770000}, {0xbf772000}, {0xbf774000}, {0xbf776000}, {0xbf778000}, {0xbf77a000}, {0xbf77c000}, {0xbf77e000}, {0xbf780000}, {0xbf782000}, {0xbf784000}, {0xbf786000}, {0xbf788000}, {0xbf78a000}, {0xbf78c000}, {0xbf78e000}, {0xbf790000}, {0xbf792000}, {0xbf794000}, {0xbf796000}, {0xbf798000}, {0xbf79a000}, {0xbf79c000}, {0xbf79e000}, {0xbf7a0000}, {0xbf7a2000}, {0xbf7a4000}, {0xbf7a6000}, {0xbf7a8000}, {0xbf7aa000}, {0xbf7ac000}, {0xbf7ae000}, {0xbf7b0000}, {0xbf7b2000}, {0xbf7b4000}, {0xbf7b6000}, {0xbf7b8000}, {0xbf7ba000}, {0xbf7bc000}, {0xbf7be000}, {0xbf7c0000}, {0xbf7c2000}, {0xbf7c4000}, {0xbf7c6000}, {0xbf7c8000}, {0xbf7ca000}, {0xbf7cc000}, {0xbf7ce000}, {0xbf7d0000}, {0xbf7d2000}, {0xbf7d4000}, {0xbf7d6000}, {0xbf7d8000}, {0xbf7da000}, {0xbf7dc000}, {0xbf7de000}, {0xbf7e0000}, {0xbf7e2000}, {0xbf7e4000}, {0xbf7e6000}, {0xbf7e8000}, {0xbf7ea000}, {0xbf7ec000}, {0xbf7ee000}, {0xbf7f0000}, {0xbf7f2000}, {0xbf7f4000}, {0xbf7f6000}, {0xbf7f8000}, {0xbf7fa000}, {0xbf7fc000}, {0xbf7fe000}, {0xbf800000}, {0xbf802000}, {0xbf804000}, {0xbf806000}, {0xbf808000}, {0xbf80a000}, {0xbf80c000}, {0xbf80e000}, {0xbf810000}, {0xbf812000}, {0xbf814000}, {0xbf816000}, {0xbf818000}, {0xbf81a000}, {0xbf81c000}, {0xbf81e000}, {0xbf820000}, {0xbf822000}, {0xbf824000}, {0xbf826000}, {0xbf828000}, {0xbf82a000}, {0xbf82c000}, {0xbf82e000}, {0xbf830000}, {0xbf832000}, {0xbf834000}, {0xbf836000}, {0xbf838000}, {0xbf83a000}, {0xbf83c000}, {0xbf83e000}, {0xbf840000}, {0xbf842000}, {0xbf844000}, {0xbf846000}, {0xbf848000}, {0xbf84a000}, {0xbf84c000}, {0xbf84e000}, {0xbf850000}, {0xbf852000}, {0xbf854000}, {0xbf856000}, {0xbf858000}, {0xbf85a000}, {0xbf85c000}, {0xbf85e000}, {0xbf860000}, {0xbf862000}, {0xbf864000}, {0xbf866000}, {0xbf868000}, {0xbf86a000}, {0xbf86c000}, {0xbf86e000}, {0xbf870000}, {0xbf872000}, {0xbf874000}, {0xbf876000}, {0xbf878000}, {0xbf87a000}, {0xbf87c000}, {0xbf87e000}, {0xbf880000}, {0xbf882000}, {0xbf884000}, {0xbf886000}, {0xbf888000}, {0xbf88a000}, {0xbf88c000}, {0xbf88e000}, {0xbf890000}, {0xbf892000}, {0xbf894000}, {0xbf896000}, {0xbf898000}, {0xbf89a000}, {0xbf89c000}, {0xbf89e000}, {0xbf8a0000}, {0xbf8a2000}, {0xbf8a4000}, {0xbf8a6000}, {0xbf8a8000}, {0xbf8aa000}, {0xbf8ac000}, {0xbf8ae000}, {0xbf8b0000}, {0xbf8b2000}, {0xbf8b4000}, {0xbf8b6000}, {0xbf8b8000}, {0xbf8ba000}, {0xbf8bc000}, {0xbf8be000}, {0xbf8c0000}, {0xbf8c2000}, {0xbf8c4000}, {0xbf8c6000}, {0xbf8c8000}, {0xbf8ca000}, {0xbf8cc000}, {0xbf8ce000}, {0xbf8d0000}, {0xbf8d2000}, {0xbf8d4000}, {0xbf8d6000}, {0xbf8d8000}, {0xbf8da000}, {0xbf8dc000}, {0xbf8de000}, {0xbf8e0000}, {0xbf8e2000}, {0xbf8e4000}, {0xbf8e6000}, {0xbf8e8000}, {0xbf8ea000}, {0xbf8ec000}, {0xbf8ee000}, {0xbf8f0000}, {0xbf8f2000}, {0xbf8f4000}, {0xbf8f6000}, {0xbf8f8000}, {0xbf8fa000}, {0xbf8fc000}, {0xbf8fe000}, {0xbf900000}, {0xbf902000}, {0xbf904000}, {0xbf906000}, {0xbf908000}, {0xbf90a000}, {0xbf90c000}, {0xbf90e000}, {0xbf910000}, {0xbf912000}, {0xbf914000}, {0xbf916000}, {0xbf918000}, {0xbf91a000}, {0xbf91c000}, {0xbf91e000}, {0xbf920000}, {0xbf922000}, {0xbf924000}, {0xbf926000}, {0xbf928000}, {0xbf92a000}, {0xbf92c000}, {0xbf92e000}, {0xbf930000}, {0xbf932000}, {0xbf934000}, {0xbf936000}, {0xbf938000}, {0xbf93a000}, {0xbf93c000}, {0xbf93e000}, {0xbf940000}, {0xbf942000}, {0xbf944000}, {0xbf946000}, {0xbf948000}, {0xbf94a000}, {0xbf94c000}, {0xbf94e000}, {0xbf950000}, {0xbf952000}, {0xbf954000}, {0xbf956000}, {0xbf958000}, {0xbf95a000}, {0xbf95c000}, {0xbf95e000}, {0xbf960000}, {0xbf962000}, {0xbf964000}, {0xbf966000}, {0xbf968000}, {0xbf96a000}, {0xbf96c000}, {0xbf96e000}, {0xbf970000}, {0xbf972000}, {0xbf974000}, {0xbf976000}, {0xbf978000}, {0xbf97a000}, {0xbf97c000}, {0xbf97e000}, {0xbf980000}, {0xbf982000}, {0xbf984000}, {0xbf986000}, {0xbf988000}, {0xbf98a000}, {0xbf98c000}, {0xbf98e000}, {0xbf990000}, {0xbf992000}, {0xbf994000}, {0xbf996000}, {0xbf998000}, {0xbf99a000}, {0xbf99c000}, {0xbf99e000}, {0xbf9a0000}, {0xbf9a2000}, {0xbf9a4000}, {0xbf9a6000}, {0xbf9a8000}, {0xbf9aa000}, {0xbf9ac000}, {0xbf9ae000}, {0xbf9b0000}, {0xbf9b2000}, {0xbf9b4000}, {0xbf9b6000}, {0xbf9b8000}, {0xbf9ba000}, {0xbf9bc000}, {0xbf9be000}, {0xbf9c0000}, {0xbf9c2000}, {0xbf9c4000}, {0xbf9c6000}, {0xbf9c8000}, {0xbf9ca000}, {0xbf9cc000}, {0xbf9ce000}, {0xbf9d0000}, {0xbf9d2000}, {0xbf9d4000}, {0xbf9d6000}, {0xbf9d8000}, {0xbf9da000}, {0xbf9dc000}, {0xbf9de000}, {0xbf9e0000}, {0xbf9e2000}, {0xbf9e4000}, {0xbf9e6000}, {0xbf9e8000}, {0xbf9ea000}, {0xbf9ec000}, {0xbf9ee000}, {0xbf9f0000}, {0xbf9f2000}, {0xbf9f4000}, {0xbf9f6000}, {0xbf9f8000}, {0xbf9fa000}, {0xbf9fc000}, {0xbf9fe000}, {0xbfa00000}, {0xbfa02000}, {0xbfa04000}, {0xbfa06000}, {0xbfa08000}, {0xbfa0a000}, {0xbfa0c000}, {0xbfa0e000}, {0xbfa10000}, {0xbfa12000}, {0xbfa14000}, {0xbfa16000}, {0xbfa18000}, {0xbfa1a000}, {0xbfa1c000}, {0xbfa1e000}, {0xbfa20000}, {0xbfa22000}, {0xbfa24000}, {0xbfa26000}, {0xbfa28000}, {0xbfa2a000}, {0xbfa2c000}, {0xbfa2e000}, {0xbfa30000}, {0xbfa32000}, {0xbfa34000}, {0xbfa36000}, {0xbfa38000}, {0xbfa3a000}, {0xbfa3c000}, {0xbfa3e000}, {0xbfa40000}, {0xbfa42000}, {0xbfa44000}, {0xbfa46000}, {0xbfa48000}, {0xbfa4a000}, {0xbfa4c000}, {0xbfa4e000}, {0xbfa50000}, {0xbfa52000}, {0xbfa54000}, {0xbfa56000}, {0xbfa58000}, {0xbfa5a000}, {0xbfa5c000}, {0xbfa5e000}, {0xbfa60000}, {0xbfa62000}, {0xbfa64000}, {0xbfa66000}, {0xbfa68000}, {0xbfa6a000}, {0xbfa6c000}, {0xbfa6e000}, {0xbfa70000}, {0xbfa72000}, {0xbfa74000}, {0xbfa76000}, {0xbfa78000}, {0xbfa7a000}, {0xbfa7c000}, {0xbfa7e000}, {0xbfa80000}, {0xbfa82000}, {0xbfa84000}, {0xbfa86000}, {0xbfa88000}, {0xbfa8a000}, {0xbfa8c000}, {0xbfa8e000}, {0xbfa90000}, {0xbfa92000}, {0xbfa94000}, {0xbfa96000}, {0xbfa98000}, {0xbfa9a000}, {0xbfa9c000}, {0xbfa9e000}, {0xbfaa0000}, {0xbfaa2000}, {0xbfaa4000}, {0xbfaa6000}, {0xbfaa8000}, {0xbfaaa000}, {0xbfaac000}, {0xbfaae000}, {0xbfab0000}, {0xbfab2000}, {0xbfab4000}, {0xbfab6000}, {0xbfab8000}, {0xbfaba000}, {0xbfabc000}, {0xbfabe000}, {0xbfac0000}, {0xbfac2000}, {0xbfac4000}, {0xbfac6000}, {0xbfac8000}, {0xbfaca000}, {0xbfacc000}, {0xbface000}, {0xbfad0000}, {0xbfad2000}, {0xbfad4000}, {0xbfad6000}, {0xbfad8000}, {0xbfada000}, {0xbfadc000}, {0xbfade000}, {0xbfae0000}, {0xbfae2000}, {0xbfae4000}, {0xbfae6000}, {0xbfae8000}, {0xbfaea000}, {0xbfaec000}, {0xbfaee000}, {0xbfaf0000}, {0xbfaf2000}, {0xbfaf4000}, {0xbfaf6000}, {0xbfaf8000}, {0xbfafa000}, {0xbfafc000}, {0xbfafe000}, {0xbfb00000}, {0xbfb02000}, {0xbfb04000}, {0xbfb06000}, {0xbfb08000}, {0xbfb0a000}, {0xbfb0c000}, {0xbfb0e000}, {0xbfb10000}, {0xbfb12000}, {0xbfb14000}, {0xbfb16000}, {0xbfb18000}, {0xbfb1a000}, {0xbfb1c000}, {0xbfb1e000}, {0xbfb20000}, {0xbfb22000}, {0xbfb24000}, {0xbfb26000}, {0xbfb28000}, {0xbfb2a000}, {0xbfb2c000}, {0xbfb2e000}, {0xbfb30000}, {0xbfb32000}, {0xbfb34000}, {0xbfb36000}, {0xbfb38000}, {0xbfb3a000}, {0xbfb3c000}, {0xbfb3e000}, {0xbfb40000}, {0xbfb42000}, {0xbfb44000}, {0xbfb46000}, {0xbfb48000}, {0xbfb4a000}, {0xbfb4c000}, {0xbfb4e000}, {0xbfb50000}, {0xbfb52000}, {0xbfb54000}, {0xbfb56000}, {0xbfb58000}, {0xbfb5a000}, {0xbfb5c000}, {0xbfb5e000}, {0xbfb60000}, {0xbfb62000}, {0xbfb64000}, {0xbfb66000}, {0xbfb68000}, {0xbfb6a000}, {0xbfb6c000}, {0xbfb6e000}, {0xbfb70000}, {0xbfb72000}, {0xbfb74000}, {0xbfb76000}, {0xbfb78000}, {0xbfb7a000}, {0xbfb7c000}, {0xbfb7e000}, {0xbfb80000}, {0xbfb82000}, {0xbfb84000}, {0xbfb86000}, {0xbfb88000}, {0xbfb8a000}, {0xbfb8c000}, {0xbfb8e000}, {0xbfb90000}, {0xbfb92000}, {0xbfb94000}, {0xbfb96000}, {0xbfb98000}, {0xbfb9a000}, {0xbfb9c000}, {0xbfb9e000}, {0xbfba0000}, {0xbfba2000}, {0xbfba4000}, {0xbfba6000}, {0xbfba8000}, {0xbfbaa000}, {0xbfbac000}, {0xbfbae000}, {0xbfbb0000}, {0xbfbb2000}, {0xbfbb4000}, {0xbfbb6000}, {0xbfbb8000}, {0xbfbba000}, {0xbfbbc000}, {0xbfbbe000}, {0xbfbc0000}, {0xbfbc2000}, {0xbfbc4000}, {0xbfbc6000}, {0xbfbc8000}, {0xbfbca000}, {0xbfbcc000}, {0xbfbce000}, {0xbfbd0000}, {0xbfbd2000}, {0xbfbd4000}, {0xbfbd6000}, {0xbfbd8000}, {0xbfbda000}, {0xbfbdc000}, {0xbfbde000}, {0xbfbe0000}, {0xbfbe2000}, {0xbfbe4000}, {0xbfbe6000}, {0xbfbe8000}, {0xbfbea000}, {0xbfbec000}, {0xbfbee000}, {0xbfbf0000}, {0xbfbf2000}, {0xbfbf4000}, {0xbfbf6000}, {0xbfbf8000}, {0xbfbfa000}, {0xbfbfc000}, {0xbfbfe000}, {0xbfc00000}, {0xbfc02000}, {0xbfc04000}, {0xbfc06000}, {0xbfc08000}, {0xbfc0a000}, {0xbfc0c000}, {0xbfc0e000}, {0xbfc10000}, {0xbfc12000}, {0xbfc14000}, {0xbfc16000}, {0xbfc18000}, {0xbfc1a000}, {0xbfc1c000}, {0xbfc1e000}, {0xbfc20000}, {0xbfc22000}, {0xbfc24000}, {0xbfc26000}, {0xbfc28000}, {0xbfc2a000}, {0xbfc2c000}, {0xbfc2e000}, {0xbfc30000}, {0xbfc32000}, {0xbfc34000}, {0xbfc36000}, {0xbfc38000}, {0xbfc3a000}, {0xbfc3c000}, {0xbfc3e000}, {0xbfc40000}, {0xbfc42000}, {0xbfc44000}, {0xbfc46000}, {0xbfc48000}, {0xbfc4a000}, {0xbfc4c000}, {0xbfc4e000}, {0xbfc50000}, {0xbfc52000}, {0xbfc54000}, {0xbfc56000}, {0xbfc58000}, {0xbfc5a000}, {0xbfc5c000}, {0xbfc5e000}, {0xbfc60000}, {0xbfc62000}, {0xbfc64000}, {0xbfc66000}, {0xbfc68000}, {0xbfc6a000}, {0xbfc6c000}, {0xbfc6e000}, {0xbfc70000}, {0xbfc72000}, {0xbfc74000}, {0xbfc76000}, {0xbfc78000}, {0xbfc7a000}, {0xbfc7c000}, {0xbfc7e000}, {0xbfc80000}, {0xbfc82000}, {0xbfc84000}, {0xbfc86000}, {0xbfc88000}, {0xbfc8a000}, {0xbfc8c000}, {0xbfc8e000}, {0xbfc90000}, {0xbfc92000}, {0xbfc94000}, {0xbfc96000}, {0xbfc98000}, {0xbfc9a000}, {0xbfc9c000}, {0xbfc9e000}, {0xbfca0000}, {0xbfca2000}, {0xbfca4000}, {0xbfca6000}, {0xbfca8000}, {0xbfcaa000}, {0xbfcac000}, {0xbfcae000}, {0xbfcb0000}, {0xbfcb2000}, {0xbfcb4000}, {0xbfcb6000}, {0xbfcb8000}, {0xbfcba000}, {0xbfcbc000}, {0xbfcbe000}, {0xbfcc0000}, {0xbfcc2000}, {0xbfcc4000}, {0xbfcc6000}, {0xbfcc8000}, {0xbfcca000}, {0xbfccc000}, {0xbfcce000}, {0xbfcd0000}, {0xbfcd2000}, {0xbfcd4000}, {0xbfcd6000}, {0xbfcd8000}, {0xbfcda000}, {0xbfcdc000}, {0xbfcde000}, {0xbfce0000}, {0xbfce2000}, {0xbfce4000}, {0xbfce6000}, {0xbfce8000}, {0xbfcea000}, {0xbfcec000}, {0xbfcee000}, {0xbfcf0000}, {0xbfcf2000}, {0xbfcf4000}, {0xbfcf6000}, {0xbfcf8000}, {0xbfcfa000}, {0xbfcfc000}, {0xbfcfe000}, {0xbfd00000}, {0xbfd02000}, {0xbfd04000}, {0xbfd06000}, {0xbfd08000}, {0xbfd0a000}, {0xbfd0c000}, {0xbfd0e000}, {0xbfd10000}, {0xbfd12000}, {0xbfd14000}, {0xbfd16000}, {0xbfd18000}, {0xbfd1a000}, {0xbfd1c000}, {0xbfd1e000}, {0xbfd20000}, {0xbfd22000}, {0xbfd24000}, {0xbfd26000}, {0xbfd28000}, {0xbfd2a000}, {0xbfd2c000}, {0xbfd2e000}, {0xbfd30000}, {0xbfd32000}, {0xbfd34000}, {0xbfd36000}, {0xbfd38000}, {0xbfd3a000}, {0xbfd3c000}, {0xbfd3e000}, {0xbfd40000}, {0xbfd42000}, {0xbfd44000}, {0xbfd46000}, {0xbfd48000}, {0xbfd4a000}, {0xbfd4c000}, {0xbfd4e000}, {0xbfd50000}, {0xbfd52000}, {0xbfd54000}, {0xbfd56000}, {0xbfd58000}, {0xbfd5a000}, {0xbfd5c000}, {0xbfd5e000}, {0xbfd60000}, {0xbfd62000}, {0xbfd64000}, {0xbfd66000}, {0xbfd68000}, {0xbfd6a000}, {0xbfd6c000}, {0xbfd6e000}, {0xbfd70000}, {0xbfd72000}, {0xbfd74000}, {0xbfd76000}, {0xbfd78000}, {0xbfd7a000}, {0xbfd7c000}, {0xbfd7e000}, {0xbfd80000}, {0xbfd82000}, {0xbfd84000}, {0xbfd86000}, {0xbfd88000}, {0xbfd8a000}, {0xbfd8c000}, {0xbfd8e000}, {0xbfd90000}, {0xbfd92000}, {0xbfd94000}, {0xbfd96000}, {0xbfd98000}, {0xbfd9a000}, {0xbfd9c000}, {0xbfd9e000}, {0xbfda0000}, {0xbfda2000}, {0xbfda4000}, {0xbfda6000}, {0xbfda8000}, {0xbfdaa000}, {0xbfdac000}, {0xbfdae000}, {0xbfdb0000}, {0xbfdb2000}, {0xbfdb4000}, {0xbfdb6000}, {0xbfdb8000}, {0xbfdba000}, {0xbfdbc000}, {0xbfdbe000}, {0xbfdc0000}, {0xbfdc2000}, {0xbfdc4000}, {0xbfdc6000}, {0xbfdc8000}, {0xbfdca000}, {0xbfdcc000}, {0xbfdce000}, {0xbfdd0000}, {0xbfdd2000}, {0xbfdd4000}, {0xbfdd6000}, {0xbfdd8000}, {0xbfdda000}, {0xbfddc000}, {0xbfdde000}, {0xbfde0000}, {0xbfde2000}, {0xbfde4000}, {0xbfde6000}, {0xbfde8000}, {0xbfdea000}, {0xbfdec000}, {0xbfdee000}, {0xbfdf0000}, {0xbfdf2000}, {0xbfdf4000}, {0xbfdf6000}, {0xbfdf8000}, {0xbfdfa000}, {0xbfdfc000}, {0xbfdfe000}, {0xbfe00000}, {0xbfe02000}, {0xbfe04000}, {0xbfe06000}, {0xbfe08000}, {0xbfe0a000}, {0xbfe0c000}, {0xbfe0e000}, {0xbfe10000}, {0xbfe12000}, {0xbfe14000}, {0xbfe16000}, {0xbfe18000}, {0xbfe1a000}, {0xbfe1c000}, {0xbfe1e000}, {0xbfe20000}, {0xbfe22000}, {0xbfe24000}, {0xbfe26000}, {0xbfe28000}, {0xbfe2a000}, {0xbfe2c000}, {0xbfe2e000}, {0xbfe30000}, {0xbfe32000}, {0xbfe34000}, {0xbfe36000}, {0xbfe38000}, {0xbfe3a000}, {0xbfe3c000}, {0xbfe3e000}, {0xbfe40000}, {0xbfe42000}, {0xbfe44000}, {0xbfe46000}, {0xbfe48000}, {0xbfe4a000}, {0xbfe4c000}, {0xbfe4e000}, {0xbfe50000}, {0xbfe52000}, {0xbfe54000}, {0xbfe56000}, {0xbfe58000}, {0xbfe5a000}, {0xbfe5c000}, {0xbfe5e000}, {0xbfe60000}, {0xbfe62000}, {0xbfe64000}, {0xbfe66000}, {0xbfe68000}, {0xbfe6a000}, {0xbfe6c000}, {0xbfe6e000}, {0xbfe70000}, {0xbfe72000}, {0xbfe74000}, {0xbfe76000}, {0xbfe78000}, {0xbfe7a000}, {0xbfe7c000}, {0xbfe7e000}, {0xbfe80000}, {0xbfe82000}, {0xbfe84000}, {0xbfe86000}, {0xbfe88000}, {0xbfe8a000}, {0xbfe8c000}, {0xbfe8e000}, {0xbfe90000}, {0xbfe92000}, {0xbfe94000}, {0xbfe96000}, {0xbfe98000}, {0xbfe9a000}, {0xbfe9c000}, {0xbfe9e000}, {0xbfea0000}, {0xbfea2000}, {0xbfea4000}, {0xbfea6000}, {0xbfea8000}, {0xbfeaa000}, {0xbfeac000}, {0xbfeae000}, {0xbfeb0000}, {0xbfeb2000}, {0xbfeb4000}, {0xbfeb6000}, {0xbfeb8000}, {0xbfeba000}, {0xbfebc000}, {0xbfebe000}, {0xbfec0000}, {0xbfec2000}, {0xbfec4000}, {0xbfec6000}, {0xbfec8000}, {0xbfeca000}, {0xbfecc000}, {0xbfece000}, {0xbfed0000}, {0xbfed2000}, {0xbfed4000}, {0xbfed6000}, {0xbfed8000}, {0xbfeda000}, {0xbfedc000}, {0xbfede000}, {0xbfee0000}, {0xbfee2000}, {0xbfee4000}, {0xbfee6000}, {0xbfee8000}, {0xbfeea000}, {0xbfeec000}, {0xbfeee000}, {0xbfef0000}, {0xbfef2000}, {0xbfef4000}, {0xbfef6000}, {0xbfef8000}, {0xbfefa000}, {0xbfefc000}, {0xbfefe000}, {0xbff00000}, {0xbff02000}, {0xbff04000}, {0xbff06000}, {0xbff08000}, {0xbff0a000}, {0xbff0c000}, {0xbff0e000}, {0xbff10000}, {0xbff12000}, {0xbff14000}, {0xbff16000}, {0xbff18000}, {0xbff1a000}, {0xbff1c000}, {0xbff1e000}, {0xbff20000}, {0xbff22000}, {0xbff24000}, {0xbff26000}, {0xbff28000}, {0xbff2a000}, {0xbff2c000}, {0xbff2e000}, {0xbff30000}, {0xbff32000}, {0xbff34000}, {0xbff36000}, {0xbff38000}, {0xbff3a000}, {0xbff3c000}, {0xbff3e000}, {0xbff40000}, {0xbff42000}, {0xbff44000}, {0xbff46000}, {0xbff48000}, {0xbff4a000}, {0xbff4c000}, {0xbff4e000}, {0xbff50000}, {0xbff52000}, {0xbff54000}, {0xbff56000}, {0xbff58000}, {0xbff5a000}, {0xbff5c000}, {0xbff5e000}, {0xbff60000}, {0xbff62000}, {0xbff64000}, {0xbff66000}, {0xbff68000}, {0xbff6a000}, {0xbff6c000}, {0xbff6e000}, {0xbff70000}, {0xbff72000}, {0xbff74000}, {0xbff76000}, {0xbff78000}, {0xbff7a000}, {0xbff7c000}, {0xbff7e000}, {0xbff80000}, {0xbff82000}, {0xbff84000}, {0xbff86000}, {0xbff88000}, {0xbff8a000}, {0xbff8c000}, {0xbff8e000}, {0xbff90000}, {0xbff92000}, {0xbff94000}, {0xbff96000}, {0xbff98000}, {0xbff9a000}, {0xbff9c000}, {0xbff9e000}, {0xbffa0000}, {0xbffa2000}, {0xbffa4000}, {0xbffa6000}, {0xbffa8000}, {0xbffaa000}, {0xbffac000}, {0xbffae000}, {0xbffb0000}, {0xbffb2000}, {0xbffb4000}, {0xbffb6000}, {0xbffb8000}, {0xbffba000}, {0xbffbc000}, {0xbffbe000}, {0xbffc0000}, {0xbffc2000}, {0xbffc4000}, {0xbffc6000}, {0xbffc8000}, {0xbffca000}, {0xbffcc000}, {0xbffce000}, {0xbffd0000}, {0xbffd2000}, {0xbffd4000}, {0xbffd6000}, {0xbffd8000}, {0xbffda000}, {0xbffdc000}, {0xbffde000}, {0xbffe0000}, {0xbffe2000}, {0xbffe4000}, {0xbffe6000}, {0xbffe8000}, {0xbffea000}, {0xbffec000}, {0xbffee000}, {0xbfff0000}, {0xbfff2000}, {0xbfff4000}, {0xbfff6000}, {0xbfff8000}, {0xbfffa000}, {0xbfffc000}, {0xbfffe000}, {0xc0000000}, {0xc0002000}, {0xc0004000}, {0xc0006000}, {0xc0008000}, {0xc000a000}, {0xc000c000}, {0xc000e000}, {0xc0010000}, {0xc0012000}, {0xc0014000}, {0xc0016000}, {0xc0018000}, {0xc001a000}, {0xc001c000}, {0xc001e000}, {0xc0020000}, {0xc0022000}, {0xc0024000}, {0xc0026000}, {0xc0028000}, {0xc002a000}, {0xc002c000}, {0xc002e000}, {0xc0030000}, {0xc0032000}, {0xc0034000}, {0xc0036000}, {0xc0038000}, {0xc003a000}, {0xc003c000}, {0xc003e000}, {0xc0040000}, {0xc0042000}, {0xc0044000}, {0xc0046000}, {0xc0048000}, {0xc004a000}, {0xc004c000}, {0xc004e000}, {0xc0050000}, {0xc0052000}, {0xc0054000}, {0xc0056000}, {0xc0058000}, {0xc005a000}, {0xc005c000}, {0xc005e000}, {0xc0060000}, {0xc0062000}, {0xc0064000}, {0xc0066000}, {0xc0068000}, {0xc006a000}, {0xc006c000}, {0xc006e000}, {0xc0070000}, {0xc0072000}, {0xc0074000}, {0xc0076000}, {0xc0078000}, {0xc007a000}, {0xc007c000}, {0xc007e000}, {0xc0080000}, {0xc0082000}, {0xc0084000}, {0xc0086000}, {0xc0088000}, {0xc008a000}, {0xc008c000}, {0xc008e000}, {0xc0090000}, {0xc0092000}, {0xc0094000}, {0xc0096000}, {0xc0098000}, {0xc009a000}, {0xc009c000}, {0xc009e000}, {0xc00a0000}, {0xc00a2000}, {0xc00a4000}, {0xc00a6000}, {0xc00a8000}, {0xc00aa000}, {0xc00ac000}, {0xc00ae000}, {0xc00b0000}, {0xc00b2000}, {0xc00b4000}, {0xc00b6000}, {0xc00b8000}, {0xc00ba000}, {0xc00bc000}, {0xc00be000}, {0xc00c0000}, {0xc00c2000}, {0xc00c4000}, {0xc00c6000}, {0xc00c8000}, {0xc00ca000}, {0xc00cc000}, {0xc00ce000}, {0xc00d0000}, {0xc00d2000}, {0xc00d4000}, {0xc00d6000}, {0xc00d8000}, {0xc00da000}, {0xc00dc000}, {0xc00de000}, {0xc00e0000}, {0xc00e2000}, {0xc00e4000}, {0xc00e6000}, {0xc00e8000}, {0xc00ea000}, {0xc00ec000}, {0xc00ee000}, {0xc00f0000}, {0xc00f2000}, {0xc00f4000}, {0xc00f6000}, {0xc00f8000}, {0xc00fa000}, {0xc00fc000}, {0xc00fe000}, {0xc0100000}, {0xc0102000}, {0xc0104000}, {0xc0106000}, {0xc0108000}, {0xc010a000}, {0xc010c000}, {0xc010e000}, {0xc0110000}, {0xc0112000}, {0xc0114000}, {0xc0116000}, {0xc0118000}, {0xc011a000}, {0xc011c000}, {0xc011e000}, {0xc0120000}, {0xc0122000}, {0xc0124000}, {0xc0126000}, {0xc0128000}, {0xc012a000}, {0xc012c000}, {0xc012e000}, {0xc0130000}, {0xc0132000}, {0xc0134000}, {0xc0136000}, {0xc0138000}, {0xc013a000}, {0xc013c000}, {0xc013e000}, {0xc0140000}, {0xc0142000}, {0xc0144000}, {0xc0146000}, {0xc0148000}, {0xc014a000}, {0xc014c000}, {0xc014e000}, {0xc0150000}, {0xc0152000}, {0xc0154000}, {0xc0156000}, {0xc0158000}, {0xc015a000}, {0xc015c000}, {0xc015e000}, {0xc0160000}, {0xc0162000}, {0xc0164000}, {0xc0166000}, {0xc0168000}, {0xc016a000}, {0xc016c000}, {0xc016e000}, {0xc0170000}, {0xc0172000}, {0xc0174000}, {0xc0176000}, {0xc0178000}, {0xc017a000}, {0xc017c000}, {0xc017e000}, {0xc0180000}, {0xc0182000}, {0xc0184000}, {0xc0186000}, {0xc0188000}, {0xc018a000}, {0xc018c000}, {0xc018e000}, {0xc0190000}, {0xc0192000}, {0xc0194000}, {0xc0196000}, {0xc0198000}, {0xc019a000}, {0xc019c000}, {0xc019e000}, {0xc01a0000}, {0xc01a2000}, {0xc01a4000}, {0xc01a6000}, {0xc01a8000}, {0xc01aa000}, {0xc01ac000}, {0xc01ae000}, {0xc01b0000}, {0xc01b2000}, {0xc01b4000}, {0xc01b6000}, {0xc01b8000}, {0xc01ba000}, {0xc01bc000}, {0xc01be000}, {0xc01c0000}, {0xc01c2000}, {0xc01c4000}, {0xc01c6000}, {0xc01c8000}, {0xc01ca000}, {0xc01cc000}, {0xc01ce000}, {0xc01d0000}, {0xc01d2000}, {0xc01d4000}, {0xc01d6000}, {0xc01d8000}, {0xc01da000}, {0xc01dc000}, {0xc01de000}, {0xc01e0000}, {0xc01e2000}, {0xc01e4000}, {0xc01e6000}, {0xc01e8000}, {0xc01ea000}, {0xc01ec000}, {0xc01ee000}, {0xc01f0000}, {0xc01f2000}, {0xc01f4000}, {0xc01f6000}, {0xc01f8000}, {0xc01fa000}, {0xc01fc000}, {0xc01fe000}, {0xc0200000}, {0xc0202000}, {0xc0204000}, {0xc0206000}, {0xc0208000}, {0xc020a000}, {0xc020c000}, {0xc020e000}, {0xc0210000}, {0xc0212000}, {0xc0214000}, {0xc0216000}, {0xc0218000}, {0xc021a000}, {0xc021c000}, {0xc021e000}, {0xc0220000}, {0xc0222000}, {0xc0224000}, {0xc0226000}, {0xc0228000}, {0xc022a000}, {0xc022c000}, {0xc022e000}, {0xc0230000}, {0xc0232000}, {0xc0234000}, {0xc0236000}, {0xc0238000}, {0xc023a000}, {0xc023c000}, {0xc023e000}, {0xc0240000}, {0xc0242000}, {0xc0244000}, {0xc0246000}, {0xc0248000}, {0xc024a000}, {0xc024c000}, {0xc024e000}, {0xc0250000}, {0xc0252000}, {0xc0254000}, {0xc0256000}, {0xc0258000}, {0xc025a000}, {0xc025c000}, {0xc025e000}, {0xc0260000}, {0xc0262000}, {0xc0264000}, {0xc0266000}, {0xc0268000}, {0xc026a000}, {0xc026c000}, {0xc026e000}, {0xc0270000}, {0xc0272000}, {0xc0274000}, {0xc0276000}, {0xc0278000}, {0xc027a000}, {0xc027c000}, {0xc027e000}, {0xc0280000}, {0xc0282000}, {0xc0284000}, {0xc0286000}, {0xc0288000}, {0xc028a000}, {0xc028c000}, {0xc028e000}, {0xc0290000}, {0xc0292000}, {0xc0294000}, {0xc0296000}, {0xc0298000}, {0xc029a000}, {0xc029c000}, {0xc029e000}, {0xc02a0000}, {0xc02a2000}, {0xc02a4000}, {0xc02a6000}, {0xc02a8000}, {0xc02aa000}, {0xc02ac000}, {0xc02ae000}, {0xc02b0000}, {0xc02b2000}, {0xc02b4000}, {0xc02b6000}, {0xc02b8000}, {0xc02ba000}, {0xc02bc000}, {0xc02be000}, {0xc02c0000}, {0xc02c2000}, {0xc02c4000}, {0xc02c6000}, {0xc02c8000}, {0xc02ca000}, {0xc02cc000}, {0xc02ce000}, {0xc02d0000}, {0xc02d2000}, {0xc02d4000}, {0xc02d6000}, {0xc02d8000}, {0xc02da000}, {0xc02dc000}, {0xc02de000}, {0xc02e0000}, {0xc02e2000}, {0xc02e4000}, {0xc02e6000}, {0xc02e8000}, {0xc02ea000}, {0xc02ec000}, {0xc02ee000}, {0xc02f0000}, {0xc02f2000}, {0xc02f4000}, {0xc02f6000}, {0xc02f8000}, {0xc02fa000}, {0xc02fc000}, {0xc02fe000}, {0xc0300000}, {0xc0302000}, {0xc0304000}, {0xc0306000}, {0xc0308000}, {0xc030a000}, {0xc030c000}, {0xc030e000}, {0xc0310000}, {0xc0312000}, {0xc0314000}, {0xc0316000}, {0xc0318000}, {0xc031a000}, {0xc031c000}, {0xc031e000}, {0xc0320000}, {0xc0322000}, {0xc0324000}, {0xc0326000}, {0xc0328000}, {0xc032a000}, {0xc032c000}, {0xc032e000}, {0xc0330000}, {0xc0332000}, {0xc0334000}, {0xc0336000}, {0xc0338000}, {0xc033a000}, {0xc033c000}, {0xc033e000}, {0xc0340000}, {0xc0342000}, {0xc0344000}, {0xc0346000}, {0xc0348000}, {0xc034a000}, {0xc034c000}, {0xc034e000}, {0xc0350000}, {0xc0352000}, {0xc0354000}, {0xc0356000}, {0xc0358000}, {0xc035a000}, {0xc035c000}, {0xc035e000}, {0xc0360000}, {0xc0362000}, {0xc0364000}, {0xc0366000}, {0xc0368000}, {0xc036a000}, {0xc036c000}, {0xc036e000}, {0xc0370000}, {0xc0372000}, {0xc0374000}, {0xc0376000}, {0xc0378000}, {0xc037a000}, {0xc037c000}, {0xc037e000}, {0xc0380000}, {0xc0382000}, {0xc0384000}, {0xc0386000}, {0xc0388000}, {0xc038a000}, {0xc038c000}, {0xc038e000}, {0xc0390000}, {0xc0392000}, {0xc0394000}, {0xc0396000}, {0xc0398000}, {0xc039a000}, {0xc039c000}, {0xc039e000}, {0xc03a0000}, {0xc03a2000}, {0xc03a4000}, {0xc03a6000}, {0xc03a8000}, {0xc03aa000}, {0xc03ac000}, {0xc03ae000}, {0xc03b0000}, {0xc03b2000}, {0xc03b4000}, {0xc03b6000}, {0xc03b8000}, {0xc03ba000}, {0xc03bc000}, {0xc03be000}, {0xc03c0000}, {0xc03c2000}, {0xc03c4000}, {0xc03c6000}, {0xc03c8000}, {0xc03ca000}, {0xc03cc000}, {0xc03ce000}, {0xc03d0000}, {0xc03d2000}, {0xc03d4000}, {0xc03d6000}, {0xc03d8000}, {0xc03da000}, {0xc03dc000}, {0xc03de000}, {0xc03e0000}, {0xc03e2000}, {0xc03e4000}, {0xc03e6000}, {0xc03e8000}, {0xc03ea000}, {0xc03ec000}, {0xc03ee000}, {0xc03f0000}, {0xc03f2000}, {0xc03f4000}, {0xc03f6000}, {0xc03f8000}, {0xc03fa000}, {0xc03fc000}, {0xc03fe000}, {0xc0400000}, {0xc0402000}, {0xc0404000}, {0xc0406000}, {0xc0408000}, {0xc040a000}, {0xc040c000}, {0xc040e000}, {0xc0410000}, {0xc0412000}, {0xc0414000}, {0xc0416000}, {0xc0418000}, {0xc041a000}, {0xc041c000}, {0xc041e000}, {0xc0420000}, {0xc0422000}, {0xc0424000}, {0xc0426000}, {0xc0428000}, {0xc042a000}, {0xc042c000}, {0xc042e000}, {0xc0430000}, {0xc0432000}, {0xc0434000}, {0xc0436000}, {0xc0438000}, {0xc043a000}, {0xc043c000}, {0xc043e000}, {0xc0440000}, {0xc0442000}, {0xc0444000}, {0xc0446000}, {0xc0448000}, {0xc044a000}, {0xc044c000}, {0xc044e000}, {0xc0450000}, {0xc0452000}, {0xc0454000}, {0xc0456000}, {0xc0458000}, {0xc045a000}, {0xc045c000}, {0xc045e000}, {0xc0460000}, {0xc0462000}, {0xc0464000}, {0xc0466000}, {0xc0468000}, {0xc046a000}, {0xc046c000}, {0xc046e000}, {0xc0470000}, {0xc0472000}, {0xc0474000}, {0xc0476000}, {0xc0478000}, {0xc047a000}, {0xc047c000}, {0xc047e000}, {0xc0480000}, {0xc0482000}, {0xc0484000}, {0xc0486000}, {0xc0488000}, {0xc048a000}, {0xc048c000}, {0xc048e000}, {0xc0490000}, {0xc0492000}, {0xc0494000}, {0xc0496000}, {0xc0498000}, {0xc049a000}, {0xc049c000}, {0xc049e000}, {0xc04a0000}, {0xc04a2000}, {0xc04a4000}, {0xc04a6000}, {0xc04a8000}, {0xc04aa000}, {0xc04ac000}, {0xc04ae000}, {0xc04b0000}, {0xc04b2000}, {0xc04b4000}, {0xc04b6000}, {0xc04b8000}, {0xc04ba000}, {0xc04bc000}, {0xc04be000}, {0xc04c0000}, {0xc04c2000}, {0xc04c4000}, {0xc04c6000}, {0xc04c8000}, {0xc04ca000}, {0xc04cc000}, {0xc04ce000}, {0xc04d0000}, {0xc04d2000}, {0xc04d4000}, {0xc04d6000}, {0xc04d8000}, {0xc04da000}, {0xc04dc000}, {0xc04de000}, {0xc04e0000}, {0xc04e2000}, {0xc04e4000}, {0xc04e6000}, {0xc04e8000}, {0xc04ea000}, {0xc04ec000}, {0xc04ee000}, {0xc04f0000}, {0xc04f2000}, {0xc04f4000}, {0xc04f6000}, {0xc04f8000}, {0xc04fa000}, {0xc04fc000}, {0xc04fe000}, {0xc0500000}, {0xc0502000}, {0xc0504000}, {0xc0506000}, {0xc0508000}, {0xc050a000}, {0xc050c000}, {0xc050e000}, {0xc0510000}, {0xc0512000}, {0xc0514000}, {0xc0516000}, {0xc0518000}, {0xc051a000}, {0xc051c000}, {0xc051e000}, {0xc0520000}, {0xc0522000}, {0xc0524000}, {0xc0526000}, {0xc0528000}, {0xc052a000}, {0xc052c000}, {0xc052e000}, {0xc0530000}, {0xc0532000}, {0xc0534000}, {0xc0536000}, {0xc0538000}, {0xc053a000}, {0xc053c000}, {0xc053e000}, {0xc0540000}, {0xc0542000}, {0xc0544000}, {0xc0546000}, {0xc0548000}, {0xc054a000}, {0xc054c000}, {0xc054e000}, {0xc0550000}, {0xc0552000}, {0xc0554000}, {0xc0556000}, {0xc0558000}, {0xc055a000}, {0xc055c000}, {0xc055e000}, {0xc0560000}, {0xc0562000}, {0xc0564000}, {0xc0566000}, {0xc0568000}, {0xc056a000}, {0xc056c000}, {0xc056e000}, {0xc0570000}, {0xc0572000}, {0xc0574000}, {0xc0576000}, {0xc0578000}, {0xc057a000}, {0xc057c000}, {0xc057e000}, {0xc0580000}, {0xc0582000}, {0xc0584000}, {0xc0586000}, {0xc0588000}, {0xc058a000}, {0xc058c000}, {0xc058e000}, {0xc0590000}, {0xc0592000}, {0xc0594000}, {0xc0596000}, {0xc0598000}, {0xc059a000}, {0xc059c000}, {0xc059e000}, {0xc05a0000}, {0xc05a2000}, {0xc05a4000}, {0xc05a6000}, {0xc05a8000}, {0xc05aa000}, {0xc05ac000}, {0xc05ae000}, {0xc05b0000}, {0xc05b2000}, {0xc05b4000}, {0xc05b6000}, {0xc05b8000}, {0xc05ba000}, {0xc05bc000}, {0xc05be000}, {0xc05c0000}, {0xc05c2000}, {0xc05c4000}, {0xc05c6000}, {0xc05c8000}, {0xc05ca000}, {0xc05cc000}, {0xc05ce000}, {0xc05d0000}, {0xc05d2000}, {0xc05d4000}, {0xc05d6000}, {0xc05d8000}, {0xc05da000}, {0xc05dc000}, {0xc05de000}, {0xc05e0000}, {0xc05e2000}, {0xc05e4000}, {0xc05e6000}, {0xc05e8000}, {0xc05ea000}, {0xc05ec000}, {0xc05ee000}, {0xc05f0000}, {0xc05f2000}, {0xc05f4000}, {0xc05f6000}, {0xc05f8000}, {0xc05fa000}, {0xc05fc000}, {0xc05fe000}, {0xc0600000}, {0xc0602000}, {0xc0604000}, {0xc0606000}, {0xc0608000}, {0xc060a000}, {0xc060c000}, {0xc060e000}, {0xc0610000}, {0xc0612000}, {0xc0614000}, {0xc0616000}, {0xc0618000}, {0xc061a000}, {0xc061c000}, {0xc061e000}, {0xc0620000}, {0xc0622000}, {0xc0624000}, {0xc0626000}, {0xc0628000}, {0xc062a000}, {0xc062c000}, {0xc062e000}, {0xc0630000}, {0xc0632000}, {0xc0634000}, {0xc0636000}, {0xc0638000}, {0xc063a000}, {0xc063c000}, {0xc063e000}, {0xc0640000}, {0xc0642000}, {0xc0644000}, {0xc0646000}, {0xc0648000}, {0xc064a000}, {0xc064c000}, {0xc064e000}, {0xc0650000}, {0xc0652000}, {0xc0654000}, {0xc0656000}, {0xc0658000}, {0xc065a000}, {0xc065c000}, {0xc065e000}, {0xc0660000}, {0xc0662000}, {0xc0664000}, {0xc0666000}, {0xc0668000}, {0xc066a000}, {0xc066c000}, {0xc066e000}, {0xc0670000}, {0xc0672000}, {0xc0674000}, {0xc0676000}, {0xc0678000}, {0xc067a000}, {0xc067c000}, {0xc067e000}, {0xc0680000}, {0xc0682000}, {0xc0684000}, {0xc0686000}, {0xc0688000}, {0xc068a000}, {0xc068c000}, {0xc068e000}, {0xc0690000}, {0xc0692000}, {0xc0694000}, {0xc0696000}, {0xc0698000}, {0xc069a000}, {0xc069c000}, {0xc069e000}, {0xc06a0000}, {0xc06a2000}, {0xc06a4000}, {0xc06a6000}, {0xc06a8000}, {0xc06aa000}, {0xc06ac000}, {0xc06ae000}, {0xc06b0000}, {0xc06b2000}, {0xc06b4000}, {0xc06b6000}, {0xc06b8000}, {0xc06ba000}, {0xc06bc000}, {0xc06be000}, {0xc06c0000}, {0xc06c2000}, {0xc06c4000}, {0xc06c6000}, {0xc06c8000}, {0xc06ca000}, {0xc06cc000}, {0xc06ce000}, {0xc06d0000}, {0xc06d2000}, {0xc06d4000}, {0xc06d6000}, {0xc06d8000}, {0xc06da000}, {0xc06dc000}, {0xc06de000}, {0xc06e0000}, {0xc06e2000}, {0xc06e4000}, {0xc06e6000}, {0xc06e8000}, {0xc06ea000}, {0xc06ec000}, {0xc06ee000}, {0xc06f0000}, {0xc06f2000}, {0xc06f4000}, {0xc06f6000}, {0xc06f8000}, {0xc06fa000}, {0xc06fc000}, {0xc06fe000}, {0xc0700000}, {0xc0702000}, {0xc0704000}, {0xc0706000}, {0xc0708000}, {0xc070a000}, {0xc070c000}, {0xc070e000}, {0xc0710000}, {0xc0712000}, {0xc0714000}, {0xc0716000}, {0xc0718000}, {0xc071a000}, {0xc071c000}, {0xc071e000}, {0xc0720000}, {0xc0722000}, {0xc0724000}, {0xc0726000}, {0xc0728000}, {0xc072a000}, {0xc072c000}, {0xc072e000}, {0xc0730000}, {0xc0732000}, {0xc0734000}, {0xc0736000}, {0xc0738000}, {0xc073a000}, {0xc073c000}, {0xc073e000}, {0xc0740000}, {0xc0742000}, {0xc0744000}, {0xc0746000}, {0xc0748000}, {0xc074a000}, {0xc074c000}, {0xc074e000}, {0xc0750000}, {0xc0752000}, {0xc0754000}, {0xc0756000}, {0xc0758000}, {0xc075a000}, {0xc075c000}, {0xc075e000}, {0xc0760000}, {0xc0762000}, {0xc0764000}, {0xc0766000}, {0xc0768000}, {0xc076a000}, {0xc076c000}, {0xc076e000}, {0xc0770000}, {0xc0772000}, {0xc0774000}, {0xc0776000}, {0xc0778000}, {0xc077a000}, {0xc077c000}, {0xc077e000}, {0xc0780000}, {0xc0782000}, {0xc0784000}, {0xc0786000}, {0xc0788000}, {0xc078a000}, {0xc078c000}, {0xc078e000}, {0xc0790000}, {0xc0792000}, {0xc0794000}, {0xc0796000}, {0xc0798000}, {0xc079a000}, {0xc079c000}, {0xc079e000}, {0xc07a0000}, {0xc07a2000}, {0xc07a4000}, {0xc07a6000}, {0xc07a8000}, {0xc07aa000}, {0xc07ac000}, {0xc07ae000}, {0xc07b0000}, {0xc07b2000}, {0xc07b4000}, {0xc07b6000}, {0xc07b8000}, {0xc07ba000}, {0xc07bc000}, {0xc07be000}, {0xc07c0000}, {0xc07c2000}, {0xc07c4000}, {0xc07c6000}, {0xc07c8000}, {0xc07ca000}, {0xc07cc000}, {0xc07ce000}, {0xc07d0000}, {0xc07d2000}, {0xc07d4000}, {0xc07d6000}, {0xc07d8000}, {0xc07da000}, {0xc07dc000}, {0xc07de000}, {0xc07e0000}, {0xc07e2000}, {0xc07e4000}, {0xc07e6000}, {0xc07e8000}, {0xc07ea000}, {0xc07ec000}, {0xc07ee000}, {0xc07f0000}, {0xc07f2000}, {0xc07f4000}, {0xc07f6000}, {0xc07f8000}, {0xc07fa000}, {0xc07fc000}, {0xc07fe000}, {0xc0800000}, {0xc0802000}, {0xc0804000}, {0xc0806000}, {0xc0808000}, {0xc080a000}, {0xc080c000}, {0xc080e000}, {0xc0810000}, {0xc0812000}, {0xc0814000}, {0xc0816000}, {0xc0818000}, {0xc081a000}, {0xc081c000}, {0xc081e000}, {0xc0820000}, {0xc0822000}, {0xc0824000}, {0xc0826000}, {0xc0828000}, {0xc082a000}, {0xc082c000}, {0xc082e000}, {0xc0830000}, {0xc0832000}, {0xc0834000}, {0xc0836000}, {0xc0838000}, {0xc083a000}, {0xc083c000}, {0xc083e000}, {0xc0840000}, {0xc0842000}, {0xc0844000}, {0xc0846000}, {0xc0848000}, {0xc084a000}, {0xc084c000}, {0xc084e000}, {0xc0850000}, {0xc0852000}, {0xc0854000}, {0xc0856000}, {0xc0858000}, {0xc085a000}, {0xc085c000}, {0xc085e000}, {0xc0860000}, {0xc0862000}, {0xc0864000}, {0xc0866000}, {0xc0868000}, {0xc086a000}, {0xc086c000}, {0xc086e000}, {0xc0870000}, {0xc0872000}, {0xc0874000}, {0xc0876000}, {0xc0878000}, {0xc087a000}, {0xc087c000}, {0xc087e000}, {0xc0880000}, {0xc0882000}, {0xc0884000}, {0xc0886000}, {0xc0888000}, {0xc088a000}, {0xc088c000}, {0xc088e000}, {0xc0890000}, {0xc0892000}, {0xc0894000}, {0xc0896000}, {0xc0898000}, {0xc089a000}, {0xc089c000}, {0xc089e000}, {0xc08a0000}, {0xc08a2000}, {0xc08a4000}, {0xc08a6000}, {0xc08a8000}, {0xc08aa000}, {0xc08ac000}, {0xc08ae000}, {0xc08b0000}, {0xc08b2000}, {0xc08b4000}, {0xc08b6000}, {0xc08b8000}, {0xc08ba000}, {0xc08bc000}, {0xc08be000}, {0xc08c0000}, {0xc08c2000}, {0xc08c4000}, {0xc08c6000}, {0xc08c8000}, {0xc08ca000}, {0xc08cc000}, {0xc08ce000}, {0xc08d0000}, {0xc08d2000}, {0xc08d4000}, {0xc08d6000}, {0xc08d8000}, {0xc08da000}, {0xc08dc000}, {0xc08de000}, {0xc08e0000}, {0xc08e2000}, {0xc08e4000}, {0xc08e6000}, {0xc08e8000}, {0xc08ea000}, {0xc08ec000}, {0xc08ee000}, {0xc08f0000}, {0xc08f2000}, {0xc08f4000}, {0xc08f6000}, {0xc08f8000}, {0xc08fa000}, {0xc08fc000}, {0xc08fe000}, {0xc0900000}, {0xc0902000}, {0xc0904000}, {0xc0906000}, {0xc0908000}, {0xc090a000}, {0xc090c000}, {0xc090e000}, {0xc0910000}, {0xc0912000}, {0xc0914000}, {0xc0916000}, {0xc0918000}, {0xc091a000}, {0xc091c000}, {0xc091e000}, {0xc0920000}, {0xc0922000}, {0xc0924000}, {0xc0926000}, {0xc0928000}, {0xc092a000}, {0xc092c000}, {0xc092e000}, {0xc0930000}, {0xc0932000}, {0xc0934000}, {0xc0936000}, {0xc0938000}, {0xc093a000}, {0xc093c000}, {0xc093e000}, {0xc0940000}, {0xc0942000}, {0xc0944000}, {0xc0946000}, {0xc0948000}, {0xc094a000}, {0xc094c000}, {0xc094e000}, {0xc0950000}, {0xc0952000}, {0xc0954000}, {0xc0956000}, {0xc0958000}, {0xc095a000}, {0xc095c000}, {0xc095e000}, {0xc0960000}, {0xc0962000}, {0xc0964000}, {0xc0966000}, {0xc0968000}, {0xc096a000}, {0xc096c000}, {0xc096e000}, {0xc0970000}, {0xc0972000}, {0xc0974000}, {0xc0976000}, {0xc0978000}, {0xc097a000}, {0xc097c000}, {0xc097e000}, {0xc0980000}, {0xc0982000}, {0xc0984000}, {0xc0986000}, {0xc0988000}, {0xc098a000}, {0xc098c000}, {0xc098e000}, {0xc0990000}, {0xc0992000}, {0xc0994000}, {0xc0996000}, {0xc0998000}, {0xc099a000}, {0xc099c000}, {0xc099e000}, {0xc09a0000}, {0xc09a2000}, {0xc09a4000}, {0xc09a6000}, {0xc09a8000}, {0xc09aa000}, {0xc09ac000}, {0xc09ae000}, {0xc09b0000}, {0xc09b2000}, {0xc09b4000}, {0xc09b6000}, {0xc09b8000}, {0xc09ba000}, {0xc09bc000}, {0xc09be000}, {0xc09c0000}, {0xc09c2000}, {0xc09c4000}, {0xc09c6000}, {0xc09c8000}, {0xc09ca000}, {0xc09cc000}, {0xc09ce000}, {0xc09d0000}, {0xc09d2000}, {0xc09d4000}, {0xc09d6000}, {0xc09d8000}, {0xc09da000}, {0xc09dc000}, {0xc09de000}, {0xc09e0000}, {0xc09e2000}, {0xc09e4000}, {0xc09e6000}, {0xc09e8000}, {0xc09ea000}, {0xc09ec000}, {0xc09ee000}, {0xc09f0000}, {0xc09f2000}, {0xc09f4000}, {0xc09f6000}, {0xc09f8000}, {0xc09fa000}, {0xc09fc000}, {0xc09fe000}, {0xc0a00000}, {0xc0a02000}, {0xc0a04000}, {0xc0a06000}, {0xc0a08000}, {0xc0a0a000}, {0xc0a0c000}, {0xc0a0e000}, {0xc0a10000}, {0xc0a12000}, {0xc0a14000}, {0xc0a16000}, {0xc0a18000}, {0xc0a1a000}, {0xc0a1c000}, {0xc0a1e000}, {0xc0a20000}, {0xc0a22000}, {0xc0a24000}, {0xc0a26000}, {0xc0a28000}, {0xc0a2a000}, {0xc0a2c000}, {0xc0a2e000}, {0xc0a30000}, {0xc0a32000}, {0xc0a34000}, {0xc0a36000}, {0xc0a38000}, {0xc0a3a000}, {0xc0a3c000}, {0xc0a3e000}, {0xc0a40000}, {0xc0a42000}, {0xc0a44000}, {0xc0a46000}, {0xc0a48000}, {0xc0a4a000}, {0xc0a4c000}, {0xc0a4e000}, {0xc0a50000}, {0xc0a52000}, {0xc0a54000}, {0xc0a56000}, {0xc0a58000}, {0xc0a5a000}, {0xc0a5c000}, {0xc0a5e000}, {0xc0a60000}, {0xc0a62000}, {0xc0a64000}, {0xc0a66000}, {0xc0a68000}, {0xc0a6a000}, {0xc0a6c000}, {0xc0a6e000}, {0xc0a70000}, {0xc0a72000}, {0xc0a74000}, {0xc0a76000}, {0xc0a78000}, {0xc0a7a000}, {0xc0a7c000}, {0xc0a7e000}, {0xc0a80000}, {0xc0a82000}, {0xc0a84000}, {0xc0a86000}, {0xc0a88000}, {0xc0a8a000}, {0xc0a8c000}, {0xc0a8e000}, {0xc0a90000}, {0xc0a92000}, {0xc0a94000}, {0xc0a96000}, {0xc0a98000}, {0xc0a9a000}, {0xc0a9c000}, {0xc0a9e000}, {0xc0aa0000}, {0xc0aa2000}, {0xc0aa4000}, {0xc0aa6000}, {0xc0aa8000}, {0xc0aaa000}, {0xc0aac000}, {0xc0aae000}, {0xc0ab0000}, {0xc0ab2000}, {0xc0ab4000}, {0xc0ab6000}, {0xc0ab8000}, {0xc0aba000}, {0xc0abc000}, {0xc0abe000}, {0xc0ac0000}, {0xc0ac2000}, {0xc0ac4000}, {0xc0ac6000}, {0xc0ac8000}, {0xc0aca000}, {0xc0acc000}, {0xc0ace000}, {0xc0ad0000}, {0xc0ad2000}, {0xc0ad4000}, {0xc0ad6000}, {0xc0ad8000}, {0xc0ada000}, {0xc0adc000}, {0xc0ade000}, {0xc0ae0000}, {0xc0ae2000}, {0xc0ae4000}, {0xc0ae6000}, {0xc0ae8000}, {0xc0aea000}, {0xc0aec000}, {0xc0aee000}, {0xc0af0000}, {0xc0af2000}, {0xc0af4000}, {0xc0af6000}, {0xc0af8000}, {0xc0afa000}, {0xc0afc000}, {0xc0afe000}, {0xc0b00000}, {0xc0b02000}, {0xc0b04000}, {0xc0b06000}, {0xc0b08000}, {0xc0b0a000}, {0xc0b0c000}, {0xc0b0e000}, {0xc0b10000}, {0xc0b12000}, {0xc0b14000}, {0xc0b16000}, {0xc0b18000}, {0xc0b1a000}, {0xc0b1c000}, {0xc0b1e000}, {0xc0b20000}, {0xc0b22000}, {0xc0b24000}, {0xc0b26000}, {0xc0b28000}, {0xc0b2a000}, {0xc0b2c000}, {0xc0b2e000}, {0xc0b30000}, {0xc0b32000}, {0xc0b34000}, {0xc0b36000}, {0xc0b38000}, {0xc0b3a000}, {0xc0b3c000}, {0xc0b3e000}, {0xc0b40000}, {0xc0b42000}, {0xc0b44000}, {0xc0b46000}, {0xc0b48000}, {0xc0b4a000}, {0xc0b4c000}, {0xc0b4e000}, {0xc0b50000}, {0xc0b52000}, {0xc0b54000}, {0xc0b56000}, {0xc0b58000}, {0xc0b5a000}, {0xc0b5c000}, {0xc0b5e000}, {0xc0b60000}, {0xc0b62000}, {0xc0b64000}, {0xc0b66000}, {0xc0b68000}, {0xc0b6a000}, {0xc0b6c000}, {0xc0b6e000}, {0xc0b70000}, {0xc0b72000}, {0xc0b74000}, {0xc0b76000}, {0xc0b78000}, {0xc0b7a000}, {0xc0b7c000}, {0xc0b7e000}, {0xc0b80000}, {0xc0b82000}, {0xc0b84000}, {0xc0b86000}, {0xc0b88000}, {0xc0b8a000}, {0xc0b8c000}, {0xc0b8e000}, {0xc0b90000}, {0xc0b92000}, {0xc0b94000}, {0xc0b96000}, {0xc0b98000}, {0xc0b9a000}, {0xc0b9c000}, {0xc0b9e000}, {0xc0ba0000}, {0xc0ba2000}, {0xc0ba4000}, {0xc0ba6000}, {0xc0ba8000}, {0xc0baa000}, {0xc0bac000}, {0xc0bae000}, {0xc0bb0000}, {0xc0bb2000}, {0xc0bb4000}, {0xc0bb6000}, {0xc0bb8000}, {0xc0bba000}, {0xc0bbc000}, {0xc0bbe000}, {0xc0bc0000}, {0xc0bc2000}, {0xc0bc4000}, {0xc0bc6000}, {0xc0bc8000}, {0xc0bca000}, {0xc0bcc000}, {0xc0bce000}, {0xc0bd0000}, {0xc0bd2000}, {0xc0bd4000}, {0xc0bd6000}, {0xc0bd8000}, {0xc0bda000}, {0xc0bdc000}, {0xc0bde000}, {0xc0be0000}, {0xc0be2000}, {0xc0be4000}, {0xc0be6000}, {0xc0be8000}, {0xc0bea000}, {0xc0bec000}, {0xc0bee000}, {0xc0bf0000}, {0xc0bf2000}, {0xc0bf4000}, {0xc0bf6000}, {0xc0bf8000}, {0xc0bfa000}, {0xc0bfc000}, {0xc0bfe000}, {0xc0c00000}, {0xc0c02000}, {0xc0c04000}, {0xc0c06000}, {0xc0c08000}, {0xc0c0a000}, {0xc0c0c000}, {0xc0c0e000}, {0xc0c10000}, {0xc0c12000}, {0xc0c14000}, {0xc0c16000}, {0xc0c18000}, {0xc0c1a000}, {0xc0c1c000}, {0xc0c1e000}, {0xc0c20000}, {0xc0c22000}, {0xc0c24000}, {0xc0c26000}, {0xc0c28000}, {0xc0c2a000}, {0xc0c2c000}, {0xc0c2e000}, {0xc0c30000}, {0xc0c32000}, {0xc0c34000}, {0xc0c36000}, {0xc0c38000}, {0xc0c3a000}, {0xc0c3c000}, {0xc0c3e000}, {0xc0c40000}, {0xc0c42000}, {0xc0c44000}, {0xc0c46000}, {0xc0c48000}, {0xc0c4a000}, {0xc0c4c000}, {0xc0c4e000}, {0xc0c50000}, {0xc0c52000}, {0xc0c54000}, {0xc0c56000}, {0xc0c58000}, {0xc0c5a000}, {0xc0c5c000}, {0xc0c5e000}, {0xc0c60000}, {0xc0c62000}, {0xc0c64000}, {0xc0c66000}, {0xc0c68000}, {0xc0c6a000}, {0xc0c6c000}, {0xc0c6e000}, {0xc0c70000}, {0xc0c72000}, {0xc0c74000}, {0xc0c76000}, {0xc0c78000}, {0xc0c7a000}, {0xc0c7c000}, {0xc0c7e000}, {0xc0c80000}, {0xc0c82000}, {0xc0c84000}, {0xc0c86000}, {0xc0c88000}, {0xc0c8a000}, {0xc0c8c000}, {0xc0c8e000}, {0xc0c90000}, {0xc0c92000}, {0xc0c94000}, {0xc0c96000}, {0xc0c98000}, {0xc0c9a000}, {0xc0c9c000}, {0xc0c9e000}, {0xc0ca0000}, {0xc0ca2000}, {0xc0ca4000}, {0xc0ca6000}, {0xc0ca8000}, {0xc0caa000}, {0xc0cac000}, {0xc0cae000}, {0xc0cb0000}, {0xc0cb2000}, {0xc0cb4000}, {0xc0cb6000}, {0xc0cb8000}, {0xc0cba000}, {0xc0cbc000}, {0xc0cbe000}, {0xc0cc0000}, {0xc0cc2000}, {0xc0cc4000}, {0xc0cc6000}, {0xc0cc8000}, {0xc0cca000}, {0xc0ccc000}, {0xc0cce000}, {0xc0cd0000}, {0xc0cd2000}, {0xc0cd4000}, {0xc0cd6000}, {0xc0cd8000}, {0xc0cda000}, {0xc0cdc000}, {0xc0cde000}, {0xc0ce0000}, {0xc0ce2000}, {0xc0ce4000}, {0xc0ce6000}, {0xc0ce8000}, {0xc0cea000}, {0xc0cec000}, {0xc0cee000}, {0xc0cf0000}, {0xc0cf2000}, {0xc0cf4000}, {0xc0cf6000}, {0xc0cf8000}, {0xc0cfa000}, {0xc0cfc000}, {0xc0cfe000}, {0xc0d00000}, {0xc0d02000}, {0xc0d04000}, {0xc0d06000}, {0xc0d08000}, {0xc0d0a000}, {0xc0d0c000}, {0xc0d0e000}, {0xc0d10000}, {0xc0d12000}, {0xc0d14000}, {0xc0d16000}, {0xc0d18000}, {0xc0d1a000}, {0xc0d1c000}, {0xc0d1e000}, {0xc0d20000}, {0xc0d22000}, {0xc0d24000}, {0xc0d26000}, {0xc0d28000}, {0xc0d2a000}, {0xc0d2c000}, {0xc0d2e000}, {0xc0d30000}, {0xc0d32000}, {0xc0d34000}, {0xc0d36000}, {0xc0d38000}, {0xc0d3a000}, {0xc0d3c000}, {0xc0d3e000}, {0xc0d40000}, {0xc0d42000}, {0xc0d44000}, {0xc0d46000}, {0xc0d48000}, {0xc0d4a000}, {0xc0d4c000}, {0xc0d4e000}, {0xc0d50000}, {0xc0d52000}, {0xc0d54000}, {0xc0d56000}, {0xc0d58000}, {0xc0d5a000}, {0xc0d5c000}, {0xc0d5e000}, {0xc0d60000}, {0xc0d62000}, {0xc0d64000}, {0xc0d66000}, {0xc0d68000}, {0xc0d6a000}, {0xc0d6c000}, {0xc0d6e000}, {0xc0d70000}, {0xc0d72000}, {0xc0d74000}, {0xc0d76000}, {0xc0d78000}, {0xc0d7a000}, {0xc0d7c000}, {0xc0d7e000}, {0xc0d80000}, {0xc0d82000}, {0xc0d84000}, {0xc0d86000}, {0xc0d88000}, {0xc0d8a000}, {0xc0d8c000}, {0xc0d8e000}, {0xc0d90000}, {0xc0d92000}, {0xc0d94000}, {0xc0d96000}, {0xc0d98000}, {0xc0d9a000}, {0xc0d9c000}, {0xc0d9e000}, {0xc0da0000}, {0xc0da2000}, {0xc0da4000}, {0xc0da6000}, {0xc0da8000}, {0xc0daa000}, {0xc0dac000}, {0xc0dae000}, {0xc0db0000}, {0xc0db2000}, {0xc0db4000}, {0xc0db6000}, {0xc0db8000}, {0xc0dba000}, {0xc0dbc000}, {0xc0dbe000}, {0xc0dc0000}, {0xc0dc2000}, {0xc0dc4000}, {0xc0dc6000}, {0xc0dc8000}, {0xc0dca000}, {0xc0dcc000}, {0xc0dce000}, {0xc0dd0000}, {0xc0dd2000}, {0xc0dd4000}, {0xc0dd6000}, {0xc0dd8000}, {0xc0dda000}, {0xc0ddc000}, {0xc0dde000}, {0xc0de0000}, {0xc0de2000}, {0xc0de4000}, {0xc0de6000}, {0xc0de8000}, {0xc0dea000}, {0xc0dec000}, {0xc0dee000}, {0xc0df0000}, {0xc0df2000}, {0xc0df4000}, {0xc0df6000}, {0xc0df8000}, {0xc0dfa000}, {0xc0dfc000}, {0xc0dfe000}, {0xc0e00000}, {0xc0e02000}, {0xc0e04000}, {0xc0e06000}, {0xc0e08000}, {0xc0e0a000}, {0xc0e0c000}, {0xc0e0e000}, {0xc0e10000}, {0xc0e12000}, {0xc0e14000}, {0xc0e16000}, {0xc0e18000}, {0xc0e1a000}, {0xc0e1c000}, {0xc0e1e000}, {0xc0e20000}, {0xc0e22000}, {0xc0e24000}, {0xc0e26000}, {0xc0e28000}, {0xc0e2a000}, {0xc0e2c000}, {0xc0e2e000}, {0xc0e30000}, {0xc0e32000}, {0xc0e34000}, {0xc0e36000}, {0xc0e38000}, {0xc0e3a000}, {0xc0e3c000}, {0xc0e3e000}, {0xc0e40000}, {0xc0e42000}, {0xc0e44000}, {0xc0e46000}, {0xc0e48000}, {0xc0e4a000}, {0xc0e4c000}, {0xc0e4e000}, {0xc0e50000}, {0xc0e52000}, {0xc0e54000}, {0xc0e56000}, {0xc0e58000}, {0xc0e5a000}, {0xc0e5c000}, {0xc0e5e000}, {0xc0e60000}, {0xc0e62000}, {0xc0e64000}, {0xc0e66000}, {0xc0e68000}, {0xc0e6a000}, {0xc0e6c000}, {0xc0e6e000}, {0xc0e70000}, {0xc0e72000}, {0xc0e74000}, {0xc0e76000}, {0xc0e78000}, {0xc0e7a000}, {0xc0e7c000}, {0xc0e7e000}, {0xc0e80000}, {0xc0e82000}, {0xc0e84000}, {0xc0e86000}, {0xc0e88000}, {0xc0e8a000}, {0xc0e8c000}, {0xc0e8e000}, {0xc0e90000}, {0xc0e92000}, {0xc0e94000}, {0xc0e96000}, {0xc0e98000}, {0xc0e9a000}, {0xc0e9c000}, {0xc0e9e000}, {0xc0ea0000}, {0xc0ea2000}, {0xc0ea4000}, {0xc0ea6000}, {0xc0ea8000}, {0xc0eaa000}, {0xc0eac000}, {0xc0eae000}, {0xc0eb0000}, {0xc0eb2000}, {0xc0eb4000}, {0xc0eb6000}, {0xc0eb8000}, {0xc0eba000}, {0xc0ebc000}, {0xc0ebe000}, {0xc0ec0000}, {0xc0ec2000}, {0xc0ec4000}, {0xc0ec6000}, {0xc0ec8000}, {0xc0eca000}, {0xc0ecc000}, {0xc0ece000}, {0xc0ed0000}, {0xc0ed2000}, {0xc0ed4000}, {0xc0ed6000}, {0xc0ed8000}, {0xc0eda000}, {0xc0edc000}, {0xc0ede000}, {0xc0ee0000}, {0xc0ee2000}, {0xc0ee4000}, {0xc0ee6000}, {0xc0ee8000}, {0xc0eea000}, {0xc0eec000}, {0xc0eee000}, {0xc0ef0000}, {0xc0ef2000}, {0xc0ef4000}, {0xc0ef6000}, {0xc0ef8000}, {0xc0efa000}, {0xc0efc000}, {0xc0efe000}, {0xc0f00000}, {0xc0f02000}, {0xc0f04000}, {0xc0f06000}, {0xc0f08000}, {0xc0f0a000}, {0xc0f0c000}, {0xc0f0e000}, {0xc0f10000}, {0xc0f12000}, {0xc0f14000}, {0xc0f16000}, {0xc0f18000}, {0xc0f1a000}, {0xc0f1c000}, {0xc0f1e000}, {0xc0f20000}, {0xc0f22000}, {0xc0f24000}, {0xc0f26000}, {0xc0f28000}, {0xc0f2a000}, {0xc0f2c000}, {0xc0f2e000}, {0xc0f30000}, {0xc0f32000}, {0xc0f34000}, {0xc0f36000}, {0xc0f38000}, {0xc0f3a000}, {0xc0f3c000}, {0xc0f3e000}, {0xc0f40000}, {0xc0f42000}, {0xc0f44000}, {0xc0f46000}, {0xc0f48000}, {0xc0f4a000}, {0xc0f4c000}, {0xc0f4e000}, {0xc0f50000}, {0xc0f52000}, {0xc0f54000}, {0xc0f56000}, {0xc0f58000}, {0xc0f5a000}, {0xc0f5c000}, {0xc0f5e000}, {0xc0f60000}, {0xc0f62000}, {0xc0f64000}, {0xc0f66000}, {0xc0f68000}, {0xc0f6a000}, {0xc0f6c000}, {0xc0f6e000}, {0xc0f70000}, {0xc0f72000}, {0xc0f74000}, {0xc0f76000}, {0xc0f78000}, {0xc0f7a000}, {0xc0f7c000}, {0xc0f7e000}, {0xc0f80000}, {0xc0f82000}, {0xc0f84000}, {0xc0f86000}, {0xc0f88000}, {0xc0f8a000}, {0xc0f8c000}, {0xc0f8e000}, {0xc0f90000}, {0xc0f92000}, {0xc0f94000}, {0xc0f96000}, {0xc0f98000}, {0xc0f9a000}, {0xc0f9c000}, {0xc0f9e000}, {0xc0fa0000}, {0xc0fa2000}, {0xc0fa4000}, {0xc0fa6000}, {0xc0fa8000}, {0xc0faa000}, {0xc0fac000}, {0xc0fae000}, {0xc0fb0000}, {0xc0fb2000}, {0xc0fb4000}, {0xc0fb6000}, {0xc0fb8000}, {0xc0fba000}, {0xc0fbc000}, {0xc0fbe000}, {0xc0fc0000}, {0xc0fc2000}, {0xc0fc4000}, {0xc0fc6000}, {0xc0fc8000}, {0xc0fca000}, {0xc0fcc000}, {0xc0fce000}, {0xc0fd0000}, {0xc0fd2000}, {0xc0fd4000}, {0xc0fd6000}, {0xc0fd8000}, {0xc0fda000}, {0xc0fdc000}, {0xc0fde000}, {0xc0fe0000}, {0xc0fe2000}, {0xc0fe4000}, {0xc0fe6000}, {0xc0fe8000}, {0xc0fea000}, {0xc0fec000}, {0xc0fee000}, {0xc0ff0000}, {0xc0ff2000}, {0xc0ff4000}, {0xc0ff6000}, {0xc0ff8000}, {0xc0ffa000}, {0xc0ffc000}, {0xc0ffe000}, {0xc1000000}, {0xc1002000}, {0xc1004000}, {0xc1006000}, {0xc1008000}, {0xc100a000}, {0xc100c000}, {0xc100e000}, {0xc1010000}, {0xc1012000}, {0xc1014000}, {0xc1016000}, {0xc1018000}, {0xc101a000}, {0xc101c000}, {0xc101e000}, {0xc1020000}, {0xc1022000}, {0xc1024000}, {0xc1026000}, {0xc1028000}, {0xc102a000}, {0xc102c000}, {0xc102e000}, {0xc1030000}, {0xc1032000}, {0xc1034000}, {0xc1036000}, {0xc1038000}, {0xc103a000}, {0xc103c000}, {0xc103e000}, {0xc1040000}, {0xc1042000}, {0xc1044000}, {0xc1046000}, {0xc1048000}, {0xc104a000}, {0xc104c000}, {0xc104e000}, {0xc1050000}, {0xc1052000}, {0xc1054000}, {0xc1056000}, {0xc1058000}, {0xc105a000}, {0xc105c000}, {0xc105e000}, {0xc1060000}, {0xc1062000}, {0xc1064000}, {0xc1066000}, {0xc1068000}, {0xc106a000}, {0xc106c000}, {0xc106e000}, {0xc1070000}, {0xc1072000}, {0xc1074000}, {0xc1076000}, {0xc1078000}, {0xc107a000}, {0xc107c000}, {0xc107e000}, {0xc1080000}, {0xc1082000}, {0xc1084000}, {0xc1086000}, {0xc1088000}, {0xc108a000}, {0xc108c000}, {0xc108e000}, {0xc1090000}, {0xc1092000}, {0xc1094000}, {0xc1096000}, {0xc1098000}, {0xc109a000}, {0xc109c000}, {0xc109e000}, {0xc10a0000}, {0xc10a2000}, {0xc10a4000}, {0xc10a6000}, {0xc10a8000}, {0xc10aa000}, {0xc10ac000}, {0xc10ae000}, {0xc10b0000}, {0xc10b2000}, {0xc10b4000}, {0xc10b6000}, {0xc10b8000}, {0xc10ba000}, {0xc10bc000}, {0xc10be000}, {0xc10c0000}, {0xc10c2000}, {0xc10c4000}, {0xc10c6000}, {0xc10c8000}, {0xc10ca000}, {0xc10cc000}, {0xc10ce000}, {0xc10d0000}, {0xc10d2000}, {0xc10d4000}, {0xc10d6000}, {0xc10d8000}, {0xc10da000}, {0xc10dc000}, {0xc10de000}, {0xc10e0000}, {0xc10e2000}, {0xc10e4000}, {0xc10e6000}, {0xc10e8000}, {0xc10ea000}, {0xc10ec000}, {0xc10ee000}, {0xc10f0000}, {0xc10f2000}, {0xc10f4000}, {0xc10f6000}, {0xc10f8000}, {0xc10fa000}, {0xc10fc000}, {0xc10fe000}, {0xc1100000}, {0xc1102000}, {0xc1104000}, {0xc1106000}, {0xc1108000}, {0xc110a000}, {0xc110c000}, {0xc110e000}, {0xc1110000}, {0xc1112000}, {0xc1114000}, {0xc1116000}, {0xc1118000}, {0xc111a000}, {0xc111c000}, {0xc111e000}, {0xc1120000}, {0xc1122000}, {0xc1124000}, {0xc1126000}, {0xc1128000}, {0xc112a000}, {0xc112c000}, {0xc112e000}, {0xc1130000}, {0xc1132000}, {0xc1134000}, {0xc1136000}, {0xc1138000}, {0xc113a000}, {0xc113c000}, {0xc113e000}, {0xc1140000}, {0xc1142000}, {0xc1144000}, {0xc1146000}, {0xc1148000}, {0xc114a000}, {0xc114c000}, {0xc114e000}, {0xc1150000}, {0xc1152000}, {0xc1154000}, {0xc1156000}, {0xc1158000}, {0xc115a000}, {0xc115c000}, {0xc115e000}, {0xc1160000}, {0xc1162000}, {0xc1164000}, {0xc1166000}, {0xc1168000}, {0xc116a000}, {0xc116c000}, {0xc116e000}, {0xc1170000}, {0xc1172000}, {0xc1174000}, {0xc1176000}, {0xc1178000}, {0xc117a000}, {0xc117c000}, {0xc117e000}, {0xc1180000}, {0xc1182000}, {0xc1184000}, {0xc1186000}, {0xc1188000}, {0xc118a000}, {0xc118c000}, {0xc118e000}, {0xc1190000}, {0xc1192000}, {0xc1194000}, {0xc1196000}, {0xc1198000}, {0xc119a000}, {0xc119c000}, {0xc119e000}, {0xc11a0000}, {0xc11a2000}, {0xc11a4000}, {0xc11a6000}, {0xc11a8000}, {0xc11aa000}, {0xc11ac000}, {0xc11ae000}, {0xc11b0000}, {0xc11b2000}, {0xc11b4000}, {0xc11b6000}, {0xc11b8000}, {0xc11ba000}, {0xc11bc000}, {0xc11be000}, {0xc11c0000}, {0xc11c2000}, {0xc11c4000}, {0xc11c6000}, {0xc11c8000}, {0xc11ca000}, {0xc11cc000}, {0xc11ce000}, {0xc11d0000}, {0xc11d2000}, {0xc11d4000}, {0xc11d6000}, {0xc11d8000}, {0xc11da000}, {0xc11dc000}, {0xc11de000}, {0xc11e0000}, {0xc11e2000}, {0xc11e4000}, {0xc11e6000}, {0xc11e8000}, {0xc11ea000}, {0xc11ec000}, {0xc11ee000}, {0xc11f0000}, {0xc11f2000}, {0xc11f4000}, {0xc11f6000}, {0xc11f8000}, {0xc11fa000}, {0xc11fc000}, {0xc11fe000}, {0xc1200000}, {0xc1202000}, {0xc1204000}, {0xc1206000}, {0xc1208000}, {0xc120a000}, {0xc120c000}, {0xc120e000}, {0xc1210000}, {0xc1212000}, {0xc1214000}, {0xc1216000}, {0xc1218000}, {0xc121a000}, {0xc121c000}, {0xc121e000}, {0xc1220000}, {0xc1222000}, {0xc1224000}, {0xc1226000}, {0xc1228000}, {0xc122a000}, {0xc122c000}, {0xc122e000}, {0xc1230000}, {0xc1232000}, {0xc1234000}, {0xc1236000}, {0xc1238000}, {0xc123a000}, {0xc123c000}, {0xc123e000}, {0xc1240000}, {0xc1242000}, {0xc1244000}, {0xc1246000}, {0xc1248000}, {0xc124a000}, {0xc124c000}, {0xc124e000}, {0xc1250000}, {0xc1252000}, {0xc1254000}, {0xc1256000}, {0xc1258000}, {0xc125a000}, {0xc125c000}, {0xc125e000}, {0xc1260000}, {0xc1262000}, {0xc1264000}, {0xc1266000}, {0xc1268000}, {0xc126a000}, {0xc126c000}, {0xc126e000}, {0xc1270000}, {0xc1272000}, {0xc1274000}, {0xc1276000}, {0xc1278000}, {0xc127a000}, {0xc127c000}, {0xc127e000}, {0xc1280000}, {0xc1282000}, {0xc1284000}, {0xc1286000}, {0xc1288000}, {0xc128a000}, {0xc128c000}, {0xc128e000}, {0xc1290000}, {0xc1292000}, {0xc1294000}, {0xc1296000}, {0xc1298000}, {0xc129a000}, {0xc129c000}, {0xc129e000}, {0xc12a0000}, {0xc12a2000}, {0xc12a4000}, {0xc12a6000}, {0xc12a8000}, {0xc12aa000}, {0xc12ac000}, {0xc12ae000}, {0xc12b0000}, {0xc12b2000}, {0xc12b4000}, {0xc12b6000}, {0xc12b8000}, {0xc12ba000}, {0xc12bc000}, {0xc12be000}, {0xc12c0000}, {0xc12c2000}, {0xc12c4000}, {0xc12c6000}, {0xc12c8000}, {0xc12ca000}, {0xc12cc000}, {0xc12ce000}, {0xc12d0000}, {0xc12d2000}, {0xc12d4000}, {0xc12d6000}, {0xc12d8000}, {0xc12da000}, {0xc12dc000}, {0xc12de000}, {0xc12e0000}, {0xc12e2000}, {0xc12e4000}, {0xc12e6000}, {0xc12e8000}, {0xc12ea000}, {0xc12ec000}, {0xc12ee000}, {0xc12f0000}, {0xc12f2000}, {0xc12f4000}, {0xc12f6000}, {0xc12f8000}, {0xc12fa000}, {0xc12fc000}, {0xc12fe000}, {0xc1300000}, {0xc1302000}, {0xc1304000}, {0xc1306000}, {0xc1308000}, {0xc130a000}, {0xc130c000}, {0xc130e000}, {0xc1310000}, {0xc1312000}, {0xc1314000}, {0xc1316000}, {0xc1318000}, {0xc131a000}, {0xc131c000}, {0xc131e000}, {0xc1320000}, {0xc1322000}, {0xc1324000}, {0xc1326000}, {0xc1328000}, {0xc132a000}, {0xc132c000}, {0xc132e000}, {0xc1330000}, {0xc1332000}, {0xc1334000}, {0xc1336000}, {0xc1338000}, {0xc133a000}, {0xc133c000}, {0xc133e000}, {0xc1340000}, {0xc1342000}, {0xc1344000}, {0xc1346000}, {0xc1348000}, {0xc134a000}, {0xc134c000}, {0xc134e000}, {0xc1350000}, {0xc1352000}, {0xc1354000}, {0xc1356000}, {0xc1358000}, {0xc135a000}, {0xc135c000}, {0xc135e000}, {0xc1360000}, {0xc1362000}, {0xc1364000}, {0xc1366000}, {0xc1368000}, {0xc136a000}, {0xc136c000}, {0xc136e000}, {0xc1370000}, {0xc1372000}, {0xc1374000}, {0xc1376000}, {0xc1378000}, {0xc137a000}, {0xc137c000}, {0xc137e000}, {0xc1380000}, {0xc1382000}, {0xc1384000}, {0xc1386000}, {0xc1388000}, {0xc138a000}, {0xc138c000}, {0xc138e000}, {0xc1390000}, {0xc1392000}, {0xc1394000}, {0xc1396000}, {0xc1398000}, {0xc139a000}, {0xc139c000}, {0xc139e000}, {0xc13a0000}, {0xc13a2000}, {0xc13a4000}, {0xc13a6000}, {0xc13a8000}, {0xc13aa000}, {0xc13ac000}, {0xc13ae000}, {0xc13b0000}, {0xc13b2000}, {0xc13b4000}, {0xc13b6000}, {0xc13b8000}, {0xc13ba000}, {0xc13bc000}, {0xc13be000}, {0xc13c0000}, {0xc13c2000}, {0xc13c4000}, {0xc13c6000}, {0xc13c8000}, {0xc13ca000}, {0xc13cc000}, {0xc13ce000}, {0xc13d0000}, {0xc13d2000}, {0xc13d4000}, {0xc13d6000}, {0xc13d8000}, {0xc13da000}, {0xc13dc000}, {0xc13de000}, {0xc13e0000}, {0xc13e2000}, {0xc13e4000}, {0xc13e6000}, {0xc13e8000}, {0xc13ea000}, {0xc13ec000}, {0xc13ee000}, {0xc13f0000}, {0xc13f2000}, {0xc13f4000}, {0xc13f6000}, {0xc13f8000}, {0xc13fa000}, {0xc13fc000}, {0xc13fe000}, {0xc1400000}, {0xc1402000}, {0xc1404000}, {0xc1406000}, {0xc1408000}, {0xc140a000}, {0xc140c000}, {0xc140e000}, {0xc1410000}, {0xc1412000}, {0xc1414000}, {0xc1416000}, {0xc1418000}, {0xc141a000}, {0xc141c000}, {0xc141e000}, {0xc1420000}, {0xc1422000}, {0xc1424000}, {0xc1426000}, {0xc1428000}, {0xc142a000}, {0xc142c000}, {0xc142e000}, {0xc1430000}, {0xc1432000}, {0xc1434000}, {0xc1436000}, {0xc1438000}, {0xc143a000}, {0xc143c000}, {0xc143e000}, {0xc1440000}, {0xc1442000}, {0xc1444000}, {0xc1446000}, {0xc1448000}, {0xc144a000}, {0xc144c000}, {0xc144e000}, {0xc1450000}, {0xc1452000}, {0xc1454000}, {0xc1456000}, {0xc1458000}, {0xc145a000}, {0xc145c000}, {0xc145e000}, {0xc1460000}, {0xc1462000}, {0xc1464000}, {0xc1466000}, {0xc1468000}, {0xc146a000}, {0xc146c000}, {0xc146e000}, {0xc1470000}, {0xc1472000}, {0xc1474000}, {0xc1476000}, {0xc1478000}, {0xc147a000}, {0xc147c000}, {0xc147e000}, {0xc1480000}, {0xc1482000}, {0xc1484000}, {0xc1486000}, {0xc1488000}, {0xc148a000}, {0xc148c000}, {0xc148e000}, {0xc1490000}, {0xc1492000}, {0xc1494000}, {0xc1496000}, {0xc1498000}, {0xc149a000}, {0xc149c000}, {0xc149e000}, {0xc14a0000}, {0xc14a2000}, {0xc14a4000}, {0xc14a6000}, {0xc14a8000}, {0xc14aa000}, {0xc14ac000}, {0xc14ae000}, {0xc14b0000}, {0xc14b2000}, {0xc14b4000}, {0xc14b6000}, {0xc14b8000}, {0xc14ba000}, {0xc14bc000}, {0xc14be000}, {0xc14c0000}, {0xc14c2000}, {0xc14c4000}, {0xc14c6000}, {0xc14c8000}, {0xc14ca000}, {0xc14cc000}, {0xc14ce000}, {0xc14d0000}, {0xc14d2000}, {0xc14d4000}, {0xc14d6000}, {0xc14d8000}, {0xc14da000}, {0xc14dc000}, {0xc14de000}, {0xc14e0000}, {0xc14e2000}, {0xc14e4000}, {0xc14e6000}, {0xc14e8000}, {0xc14ea000}, {0xc14ec000}, {0xc14ee000}, {0xc14f0000}, {0xc14f2000}, {0xc14f4000}, {0xc14f6000}, {0xc14f8000}, {0xc14fa000}, {0xc14fc000}, {0xc14fe000}, {0xc1500000}, {0xc1502000}, {0xc1504000}, {0xc1506000}, {0xc1508000}, {0xc150a000}, {0xc150c000}, {0xc150e000}, {0xc1510000}, {0xc1512000}, {0xc1514000}, {0xc1516000}, {0xc1518000}, {0xc151a000}, {0xc151c000}, {0xc151e000}, {0xc1520000}, {0xc1522000}, {0xc1524000}, {0xc1526000}, {0xc1528000}, {0xc152a000}, {0xc152c000}, {0xc152e000}, {0xc1530000}, {0xc1532000}, {0xc1534000}, {0xc1536000}, {0xc1538000}, {0xc153a000}, {0xc153c000}, {0xc153e000}, {0xc1540000}, {0xc1542000}, {0xc1544000}, {0xc1546000}, {0xc1548000}, {0xc154a000}, {0xc154c000}, {0xc154e000}, {0xc1550000}, {0xc1552000}, {0xc1554000}, {0xc1556000}, {0xc1558000}, {0xc155a000}, {0xc155c000}, {0xc155e000}, {0xc1560000}, {0xc1562000}, {0xc1564000}, {0xc1566000}, {0xc1568000}, {0xc156a000}, {0xc156c000}, {0xc156e000}, {0xc1570000}, {0xc1572000}, {0xc1574000}, {0xc1576000}, {0xc1578000}, {0xc157a000}, {0xc157c000}, {0xc157e000}, {0xc1580000}, {0xc1582000}, {0xc1584000}, {0xc1586000}, {0xc1588000}, {0xc158a000}, {0xc158c000}, {0xc158e000}, {0xc1590000}, {0xc1592000}, {0xc1594000}, {0xc1596000}, {0xc1598000}, {0xc159a000}, {0xc159c000}, {0xc159e000}, {0xc15a0000}, {0xc15a2000}, {0xc15a4000}, {0xc15a6000}, {0xc15a8000}, {0xc15aa000}, {0xc15ac000}, {0xc15ae000}, {0xc15b0000}, {0xc15b2000}, {0xc15b4000}, {0xc15b6000}, {0xc15b8000}, {0xc15ba000}, {0xc15bc000}, {0xc15be000}, {0xc15c0000}, {0xc15c2000}, {0xc15c4000}, {0xc15c6000}, {0xc15c8000}, {0xc15ca000}, {0xc15cc000}, {0xc15ce000}, {0xc15d0000}, {0xc15d2000}, {0xc15d4000}, {0xc15d6000}, {0xc15d8000}, {0xc15da000}, {0xc15dc000}, {0xc15de000}, {0xc15e0000}, {0xc15e2000}, {0xc15e4000}, {0xc15e6000}, {0xc15e8000}, {0xc15ea000}, {0xc15ec000}, {0xc15ee000}, {0xc15f0000}, {0xc15f2000}, {0xc15f4000}, {0xc15f6000}, {0xc15f8000}, {0xc15fa000}, {0xc15fc000}, {0xc15fe000}, {0xc1600000}, {0xc1602000}, {0xc1604000}, {0xc1606000}, {0xc1608000}, {0xc160a000}, {0xc160c000}, {0xc160e000}, {0xc1610000}, {0xc1612000}, {0xc1614000}, {0xc1616000}, {0xc1618000}, {0xc161a000}, {0xc161c000}, {0xc161e000}, {0xc1620000}, {0xc1622000}, {0xc1624000}, {0xc1626000}, {0xc1628000}, {0xc162a000}, {0xc162c000}, {0xc162e000}, {0xc1630000}, {0xc1632000}, {0xc1634000}, {0xc1636000}, {0xc1638000}, {0xc163a000}, {0xc163c000}, {0xc163e000}, {0xc1640000}, {0xc1642000}, {0xc1644000}, {0xc1646000}, {0xc1648000}, {0xc164a000}, {0xc164c000}, {0xc164e000}, {0xc1650000}, {0xc1652000}, {0xc1654000}, {0xc1656000}, {0xc1658000}, {0xc165a000}, {0xc165c000}, {0xc165e000}, {0xc1660000}, {0xc1662000}, {0xc1664000}, {0xc1666000}, {0xc1668000}, {0xc166a000}, {0xc166c000}, {0xc166e000}, {0xc1670000}, {0xc1672000}, {0xc1674000}, {0xc1676000}, {0xc1678000}, {0xc167a000}, {0xc167c000}, {0xc167e000}, {0xc1680000}, {0xc1682000}, {0xc1684000}, {0xc1686000}, {0xc1688000}, {0xc168a000}, {0xc168c000}, {0xc168e000}, {0xc1690000}, {0xc1692000}, {0xc1694000}, {0xc1696000}, {0xc1698000}, {0xc169a000}, {0xc169c000}, {0xc169e000}, {0xc16a0000}, {0xc16a2000}, {0xc16a4000}, {0xc16a6000}, {0xc16a8000}, {0xc16aa000}, {0xc16ac000}, {0xc16ae000}, {0xc16b0000}, {0xc16b2000}, {0xc16b4000}, {0xc16b6000}, {0xc16b8000}, {0xc16ba000}, {0xc16bc000}, {0xc16be000}, {0xc16c0000}, {0xc16c2000}, {0xc16c4000}, {0xc16c6000}, {0xc16c8000}, {0xc16ca000}, {0xc16cc000}, {0xc16ce000}, {0xc16d0000}, {0xc16d2000}, {0xc16d4000}, {0xc16d6000}, {0xc16d8000}, {0xc16da000}, {0xc16dc000}, {0xc16de000}, {0xc16e0000}, {0xc16e2000}, {0xc16e4000}, {0xc16e6000}, {0xc16e8000}, {0xc16ea000}, {0xc16ec000}, {0xc16ee000}, {0xc16f0000}, {0xc16f2000}, {0xc16f4000}, {0xc16f6000}, {0xc16f8000}, {0xc16fa000}, {0xc16fc000}, {0xc16fe000}, {0xc1700000}, {0xc1702000}, {0xc1704000}, {0xc1706000}, {0xc1708000}, {0xc170a000}, {0xc170c000}, {0xc170e000}, {0xc1710000}, {0xc1712000}, {0xc1714000}, {0xc1716000}, {0xc1718000}, {0xc171a000}, {0xc171c000}, {0xc171e000}, {0xc1720000}, {0xc1722000}, {0xc1724000}, {0xc1726000}, {0xc1728000}, {0xc172a000}, {0xc172c000}, {0xc172e000}, {0xc1730000}, {0xc1732000}, {0xc1734000}, {0xc1736000}, {0xc1738000}, {0xc173a000}, {0xc173c000}, {0xc173e000}, {0xc1740000}, {0xc1742000}, {0xc1744000}, {0xc1746000}, {0xc1748000}, {0xc174a000}, {0xc174c000}, {0xc174e000}, {0xc1750000}, {0xc1752000}, {0xc1754000}, {0xc1756000}, {0xc1758000}, {0xc175a000}, {0xc175c000}, {0xc175e000}, {0xc1760000}, {0xc1762000}, {0xc1764000}, {0xc1766000}, {0xc1768000}, {0xc176a000}, {0xc176c000}, {0xc176e000}, {0xc1770000}, {0xc1772000}, {0xc1774000}, {0xc1776000}, {0xc1778000}, {0xc177a000}, {0xc177c000}, {0xc177e000}, {0xc1780000}, {0xc1782000}, {0xc1784000}, {0xc1786000}, {0xc1788000}, {0xc178a000}, {0xc178c000}, {0xc178e000}, {0xc1790000}, {0xc1792000}, {0xc1794000}, {0xc1796000}, {0xc1798000}, {0xc179a000}, {0xc179c000}, {0xc179e000}, {0xc17a0000}, {0xc17a2000}, {0xc17a4000}, {0xc17a6000}, {0xc17a8000}, {0xc17aa000}, {0xc17ac000}, {0xc17ae000}, {0xc17b0000}, {0xc17b2000}, {0xc17b4000}, {0xc17b6000}, {0xc17b8000}, {0xc17ba000}, {0xc17bc000}, {0xc17be000}, {0xc17c0000}, {0xc17c2000}, {0xc17c4000}, {0xc17c6000}, {0xc17c8000}, {0xc17ca000}, {0xc17cc000}, {0xc17ce000}, {0xc17d0000}, {0xc17d2000}, {0xc17d4000}, {0xc17d6000}, {0xc17d8000}, {0xc17da000}, {0xc17dc000}, {0xc17de000}, {0xc17e0000}, {0xc17e2000}, {0xc17e4000}, {0xc17e6000}, {0xc17e8000}, {0xc17ea000}, {0xc17ec000}, {0xc17ee000}, {0xc17f0000}, {0xc17f2000}, {0xc17f4000}, {0xc17f6000}, {0xc17f8000}, {0xc17fa000}, {0xc17fc000}, {0xc17fe000}, {0xc1800000}, {0xc1802000}, {0xc1804000}, {0xc1806000}, {0xc1808000}, {0xc180a000}, {0xc180c000}, {0xc180e000}, {0xc1810000}, {0xc1812000}, {0xc1814000}, {0xc1816000}, {0xc1818000}, {0xc181a000}, {0xc181c000}, {0xc181e000}, {0xc1820000}, {0xc1822000}, {0xc1824000}, {0xc1826000}, {0xc1828000}, {0xc182a000}, {0xc182c000}, {0xc182e000}, {0xc1830000}, {0xc1832000}, {0xc1834000}, {0xc1836000}, {0xc1838000}, {0xc183a000}, {0xc183c000}, {0xc183e000}, {0xc1840000}, {0xc1842000}, {0xc1844000}, {0xc1846000}, {0xc1848000}, {0xc184a000}, {0xc184c000}, {0xc184e000}, {0xc1850000}, {0xc1852000}, {0xc1854000}, {0xc1856000}, {0xc1858000}, {0xc185a000}, {0xc185c000}, {0xc185e000}, {0xc1860000}, {0xc1862000}, {0xc1864000}, {0xc1866000}, {0xc1868000}, {0xc186a000}, {0xc186c000}, {0xc186e000}, {0xc1870000}, {0xc1872000}, {0xc1874000}, {0xc1876000}, {0xc1878000}, {0xc187a000}, {0xc187c000}, {0xc187e000}, {0xc1880000}, {0xc1882000}, {0xc1884000}, {0xc1886000}, {0xc1888000}, {0xc188a000}, {0xc188c000}, {0xc188e000}, {0xc1890000}, {0xc1892000}, {0xc1894000}, {0xc1896000}, {0xc1898000}, {0xc189a000}, {0xc189c000}, {0xc189e000}, {0xc18a0000}, {0xc18a2000}, {0xc18a4000}, {0xc18a6000}, {0xc18a8000}, {0xc18aa000}, {0xc18ac000}, {0xc18ae000}, {0xc18b0000}, {0xc18b2000}, {0xc18b4000}, {0xc18b6000}, {0xc18b8000}, {0xc18ba000}, {0xc18bc000}, {0xc18be000}, {0xc18c0000}, {0xc18c2000}, {0xc18c4000}, {0xc18c6000}, {0xc18c8000}, {0xc18ca000}, {0xc18cc000}, {0xc18ce000}, {0xc18d0000}, {0xc18d2000}, {0xc18d4000}, {0xc18d6000}, {0xc18d8000}, {0xc18da000}, {0xc18dc000}, {0xc18de000}, {0xc18e0000}, {0xc18e2000}, {0xc18e4000}, {0xc18e6000}, {0xc18e8000}, {0xc18ea000}, {0xc18ec000}, {0xc18ee000}, {0xc18f0000}, {0xc18f2000}, {0xc18f4000}, {0xc18f6000}, {0xc18f8000}, {0xc18fa000}, {0xc18fc000}, {0xc18fe000}, {0xc1900000}, {0xc1902000}, {0xc1904000}, {0xc1906000}, {0xc1908000}, {0xc190a000}, {0xc190c000}, {0xc190e000}, {0xc1910000}, {0xc1912000}, {0xc1914000}, {0xc1916000}, {0xc1918000}, {0xc191a000}, {0xc191c000}, {0xc191e000}, {0xc1920000}, {0xc1922000}, {0xc1924000}, {0xc1926000}, {0xc1928000}, {0xc192a000}, {0xc192c000}, {0xc192e000}, {0xc1930000}, {0xc1932000}, {0xc1934000}, {0xc1936000}, {0xc1938000}, {0xc193a000}, {0xc193c000}, {0xc193e000}, {0xc1940000}, {0xc1942000}, {0xc1944000}, {0xc1946000}, {0xc1948000}, {0xc194a000}, {0xc194c000}, {0xc194e000}, {0xc1950000}, {0xc1952000}, {0xc1954000}, {0xc1956000}, {0xc1958000}, {0xc195a000}, {0xc195c000}, {0xc195e000}, {0xc1960000}, {0xc1962000}, {0xc1964000}, {0xc1966000}, {0xc1968000}, {0xc196a000}, {0xc196c000}, {0xc196e000}, {0xc1970000}, {0xc1972000}, {0xc1974000}, {0xc1976000}, {0xc1978000}, {0xc197a000}, {0xc197c000}, {0xc197e000}, {0xc1980000}, {0xc1982000}, {0xc1984000}, {0xc1986000}, {0xc1988000}, {0xc198a000}, {0xc198c000}, {0xc198e000}, {0xc1990000}, {0xc1992000}, {0xc1994000}, {0xc1996000}, {0xc1998000}, {0xc199a000}, {0xc199c000}, {0xc199e000}, {0xc19a0000}, {0xc19a2000}, {0xc19a4000}, {0xc19a6000}, {0xc19a8000}, {0xc19aa000}, {0xc19ac000}, {0xc19ae000}, {0xc19b0000}, {0xc19b2000}, {0xc19b4000}, {0xc19b6000}, {0xc19b8000}, {0xc19ba000}, {0xc19bc000}, {0xc19be000}, {0xc19c0000}, {0xc19c2000}, {0xc19c4000}, {0xc19c6000}, {0xc19c8000}, {0xc19ca000}, {0xc19cc000}, {0xc19ce000}, {0xc19d0000}, {0xc19d2000}, {0xc19d4000}, {0xc19d6000}, {0xc19d8000}, {0xc19da000}, {0xc19dc000}, {0xc19de000}, {0xc19e0000}, {0xc19e2000}, {0xc19e4000}, {0xc19e6000}, {0xc19e8000}, {0xc19ea000}, {0xc19ec000}, {0xc19ee000}, {0xc19f0000}, {0xc19f2000}, {0xc19f4000}, {0xc19f6000}, {0xc19f8000}, {0xc19fa000}, {0xc19fc000}, {0xc19fe000}, {0xc1a00000}, {0xc1a02000}, {0xc1a04000}, {0xc1a06000}, {0xc1a08000}, {0xc1a0a000}, {0xc1a0c000}, {0xc1a0e000}, {0xc1a10000}, {0xc1a12000}, {0xc1a14000}, {0xc1a16000}, {0xc1a18000}, {0xc1a1a000}, {0xc1a1c000}, {0xc1a1e000}, {0xc1a20000}, {0xc1a22000}, {0xc1a24000}, {0xc1a26000}, {0xc1a28000}, {0xc1a2a000}, {0xc1a2c000}, {0xc1a2e000}, {0xc1a30000}, {0xc1a32000}, {0xc1a34000}, {0xc1a36000}, {0xc1a38000}, {0xc1a3a000}, {0xc1a3c000}, {0xc1a3e000}, {0xc1a40000}, {0xc1a42000}, {0xc1a44000}, {0xc1a46000}, {0xc1a48000}, {0xc1a4a000}, {0xc1a4c000}, {0xc1a4e000}, {0xc1a50000}, {0xc1a52000}, {0xc1a54000}, {0xc1a56000}, {0xc1a58000}, {0xc1a5a000}, {0xc1a5c000}, {0xc1a5e000}, {0xc1a60000}, {0xc1a62000}, {0xc1a64000}, {0xc1a66000}, {0xc1a68000}, {0xc1a6a000}, {0xc1a6c000}, {0xc1a6e000}, {0xc1a70000}, {0xc1a72000}, {0xc1a74000}, {0xc1a76000}, {0xc1a78000}, {0xc1a7a000}, {0xc1a7c000}, {0xc1a7e000}, {0xc1a80000}, {0xc1a82000}, {0xc1a84000}, {0xc1a86000}, {0xc1a88000}, {0xc1a8a000}, {0xc1a8c000}, {0xc1a8e000}, {0xc1a90000}, {0xc1a92000}, {0xc1a94000}, {0xc1a96000}, {0xc1a98000}, {0xc1a9a000}, {0xc1a9c000}, {0xc1a9e000}, {0xc1aa0000}, {0xc1aa2000}, {0xc1aa4000}, {0xc1aa6000}, {0xc1aa8000}, {0xc1aaa000}, {0xc1aac000}, {0xc1aae000}, {0xc1ab0000}, {0xc1ab2000}, {0xc1ab4000}, {0xc1ab6000}, {0xc1ab8000}, {0xc1aba000}, {0xc1abc000}, {0xc1abe000}, {0xc1ac0000}, {0xc1ac2000}, {0xc1ac4000}, {0xc1ac6000}, {0xc1ac8000}, {0xc1aca000}, {0xc1acc000}, {0xc1ace000}, {0xc1ad0000}, {0xc1ad2000}, {0xc1ad4000}, {0xc1ad6000}, {0xc1ad8000}, {0xc1ada000}, {0xc1adc000}, {0xc1ade000}, {0xc1ae0000}, {0xc1ae2000}, {0xc1ae4000}, {0xc1ae6000}, {0xc1ae8000}, {0xc1aea000}, {0xc1aec000}, {0xc1aee000}, {0xc1af0000}, {0xc1af2000}, {0xc1af4000}, {0xc1af6000}, {0xc1af8000}, {0xc1afa000}, {0xc1afc000}, {0xc1afe000}, {0xc1b00000}, {0xc1b02000}, {0xc1b04000}, {0xc1b06000}, {0xc1b08000}, {0xc1b0a000}, {0xc1b0c000}, {0xc1b0e000}, {0xc1b10000}, {0xc1b12000}, {0xc1b14000}, {0xc1b16000}, {0xc1b18000}, {0xc1b1a000}, {0xc1b1c000}, {0xc1b1e000}, {0xc1b20000}, {0xc1b22000}, {0xc1b24000}, {0xc1b26000}, {0xc1b28000}, {0xc1b2a000}, {0xc1b2c000}, {0xc1b2e000}, {0xc1b30000}, {0xc1b32000}, {0xc1b34000}, {0xc1b36000}, {0xc1b38000}, {0xc1b3a000}, {0xc1b3c000}, {0xc1b3e000}, {0xc1b40000}, {0xc1b42000}, {0xc1b44000}, {0xc1b46000}, {0xc1b48000}, {0xc1b4a000}, {0xc1b4c000}, {0xc1b4e000}, {0xc1b50000}, {0xc1b52000}, {0xc1b54000}, {0xc1b56000}, {0xc1b58000}, {0xc1b5a000}, {0xc1b5c000}, {0xc1b5e000}, {0xc1b60000}, {0xc1b62000}, {0xc1b64000}, {0xc1b66000}, {0xc1b68000}, {0xc1b6a000}, {0xc1b6c000}, {0xc1b6e000}, {0xc1b70000}, {0xc1b72000}, {0xc1b74000}, {0xc1b76000}, {0xc1b78000}, {0xc1b7a000}, {0xc1b7c000}, {0xc1b7e000}, {0xc1b80000}, {0xc1b82000}, {0xc1b84000}, {0xc1b86000}, {0xc1b88000}, {0xc1b8a000}, {0xc1b8c000}, {0xc1b8e000}, {0xc1b90000}, {0xc1b92000}, {0xc1b94000}, {0xc1b96000}, {0xc1b98000}, {0xc1b9a000}, {0xc1b9c000}, {0xc1b9e000}, {0xc1ba0000}, {0xc1ba2000}, {0xc1ba4000}, {0xc1ba6000}, {0xc1ba8000}, {0xc1baa000}, {0xc1bac000}, {0xc1bae000}, {0xc1bb0000}, {0xc1bb2000}, {0xc1bb4000}, {0xc1bb6000}, {0xc1bb8000}, {0xc1bba000}, {0xc1bbc000}, {0xc1bbe000}, {0xc1bc0000}, {0xc1bc2000}, {0xc1bc4000}, {0xc1bc6000}, {0xc1bc8000}, {0xc1bca000}, {0xc1bcc000}, {0xc1bce000}, {0xc1bd0000}, {0xc1bd2000}, {0xc1bd4000}, {0xc1bd6000}, {0xc1bd8000}, {0xc1bda000}, {0xc1bdc000}, {0xc1bde000}, {0xc1be0000}, {0xc1be2000}, {0xc1be4000}, {0xc1be6000}, {0xc1be8000}, {0xc1bea000}, {0xc1bec000}, {0xc1bee000}, {0xc1bf0000}, {0xc1bf2000}, {0xc1bf4000}, {0xc1bf6000}, {0xc1bf8000}, {0xc1bfa000}, {0xc1bfc000}, {0xc1bfe000}, {0xc1c00000}, {0xc1c02000}, {0xc1c04000}, {0xc1c06000}, {0xc1c08000}, {0xc1c0a000}, {0xc1c0c000}, {0xc1c0e000}, {0xc1c10000}, {0xc1c12000}, {0xc1c14000}, {0xc1c16000}, {0xc1c18000}, {0xc1c1a000}, {0xc1c1c000}, {0xc1c1e000}, {0xc1c20000}, {0xc1c22000}, {0xc1c24000}, {0xc1c26000}, {0xc1c28000}, {0xc1c2a000}, {0xc1c2c000}, {0xc1c2e000}, {0xc1c30000}, {0xc1c32000}, {0xc1c34000}, {0xc1c36000}, {0xc1c38000}, {0xc1c3a000}, {0xc1c3c000}, {0xc1c3e000}, {0xc1c40000}, {0xc1c42000}, {0xc1c44000}, {0xc1c46000}, {0xc1c48000}, {0xc1c4a000}, {0xc1c4c000}, {0xc1c4e000}, {0xc1c50000}, {0xc1c52000}, {0xc1c54000}, {0xc1c56000}, {0xc1c58000}, {0xc1c5a000}, {0xc1c5c000}, {0xc1c5e000}, {0xc1c60000}, {0xc1c62000}, {0xc1c64000}, {0xc1c66000}, {0xc1c68000}, {0xc1c6a000}, {0xc1c6c000}, {0xc1c6e000}, {0xc1c70000}, {0xc1c72000}, {0xc1c74000}, {0xc1c76000}, {0xc1c78000}, {0xc1c7a000}, {0xc1c7c000}, {0xc1c7e000}, {0xc1c80000}, {0xc1c82000}, {0xc1c84000}, {0xc1c86000}, {0xc1c88000}, {0xc1c8a000}, {0xc1c8c000}, {0xc1c8e000}, {0xc1c90000}, {0xc1c92000}, {0xc1c94000}, {0xc1c96000}, {0xc1c98000}, {0xc1c9a000}, {0xc1c9c000}, {0xc1c9e000}, {0xc1ca0000}, {0xc1ca2000}, {0xc1ca4000}, {0xc1ca6000}, {0xc1ca8000}, {0xc1caa000}, {0xc1cac000}, {0xc1cae000}, {0xc1cb0000}, {0xc1cb2000}, {0xc1cb4000}, {0xc1cb6000}, {0xc1cb8000}, {0xc1cba000}, {0xc1cbc000}, {0xc1cbe000}, {0xc1cc0000}, {0xc1cc2000}, {0xc1cc4000}, {0xc1cc6000}, {0xc1cc8000}, {0xc1cca000}, {0xc1ccc000}, {0xc1cce000}, {0xc1cd0000}, {0xc1cd2000}, {0xc1cd4000}, {0xc1cd6000}, {0xc1cd8000}, {0xc1cda000}, {0xc1cdc000}, {0xc1cde000}, {0xc1ce0000}, {0xc1ce2000}, {0xc1ce4000}, {0xc1ce6000}, {0xc1ce8000}, {0xc1cea000}, {0xc1cec000}, {0xc1cee000}, {0xc1cf0000}, {0xc1cf2000}, {0xc1cf4000}, {0xc1cf6000}, {0xc1cf8000}, {0xc1cfa000}, {0xc1cfc000}, {0xc1cfe000}, {0xc1d00000}, {0xc1d02000}, {0xc1d04000}, {0xc1d06000}, {0xc1d08000}, {0xc1d0a000}, {0xc1d0c000}, {0xc1d0e000}, {0xc1d10000}, {0xc1d12000}, {0xc1d14000}, {0xc1d16000}, {0xc1d18000}, {0xc1d1a000}, {0xc1d1c000}, {0xc1d1e000}, {0xc1d20000}, {0xc1d22000}, {0xc1d24000}, {0xc1d26000}, {0xc1d28000}, {0xc1d2a000}, {0xc1d2c000}, {0xc1d2e000}, {0xc1d30000}, {0xc1d32000}, {0xc1d34000}, {0xc1d36000}, {0xc1d38000}, {0xc1d3a000}, {0xc1d3c000}, {0xc1d3e000}, {0xc1d40000}, {0xc1d42000}, {0xc1d44000}, {0xc1d46000}, {0xc1d48000}, {0xc1d4a000}, {0xc1d4c000}, {0xc1d4e000}, {0xc1d50000}, {0xc1d52000}, {0xc1d54000}, {0xc1d56000}, {0xc1d58000}, {0xc1d5a000}, {0xc1d5c000}, {0xc1d5e000}, {0xc1d60000}, {0xc1d62000}, {0xc1d64000}, {0xc1d66000}, {0xc1d68000}, {0xc1d6a000}, {0xc1d6c000}, {0xc1d6e000}, {0xc1d70000}, {0xc1d72000}, {0xc1d74000}, {0xc1d76000}, {0xc1d78000}, {0xc1d7a000}, {0xc1d7c000}, {0xc1d7e000}, {0xc1d80000}, {0xc1d82000}, {0xc1d84000}, {0xc1d86000}, {0xc1d88000}, {0xc1d8a000}, {0xc1d8c000}, {0xc1d8e000}, {0xc1d90000}, {0xc1d92000}, {0xc1d94000}, {0xc1d96000}, {0xc1d98000}, {0xc1d9a000}, {0xc1d9c000}, {0xc1d9e000}, {0xc1da0000}, {0xc1da2000}, {0xc1da4000}, {0xc1da6000}, {0xc1da8000}, {0xc1daa000}, {0xc1dac000}, {0xc1dae000}, {0xc1db0000}, {0xc1db2000}, {0xc1db4000}, {0xc1db6000}, {0xc1db8000}, {0xc1dba000}, {0xc1dbc000}, {0xc1dbe000}, {0xc1dc0000}, {0xc1dc2000}, {0xc1dc4000}, {0xc1dc6000}, {0xc1dc8000}, {0xc1dca000}, {0xc1dcc000}, {0xc1dce000}, {0xc1dd0000}, {0xc1dd2000}, {0xc1dd4000}, {0xc1dd6000}, {0xc1dd8000}, {0xc1dda000}, {0xc1ddc000}, {0xc1dde000}, {0xc1de0000}, {0xc1de2000}, {0xc1de4000}, {0xc1de6000}, {0xc1de8000}, {0xc1dea000}, {0xc1dec000}, {0xc1dee000}, {0xc1df0000}, {0xc1df2000}, {0xc1df4000}, {0xc1df6000}, {0xc1df8000}, {0xc1dfa000}, {0xc1dfc000}, {0xc1dfe000}, {0xc1e00000}, {0xc1e02000}, {0xc1e04000}, {0xc1e06000}, {0xc1e08000}, {0xc1e0a000}, {0xc1e0c000}, {0xc1e0e000}, {0xc1e10000}, {0xc1e12000}, {0xc1e14000}, {0xc1e16000}, {0xc1e18000}, {0xc1e1a000}, {0xc1e1c000}, {0xc1e1e000}, {0xc1e20000}, {0xc1e22000}, {0xc1e24000}, {0xc1e26000}, {0xc1e28000}, {0xc1e2a000}, {0xc1e2c000}, {0xc1e2e000}, {0xc1e30000}, {0xc1e32000}, {0xc1e34000}, {0xc1e36000}, {0xc1e38000}, {0xc1e3a000}, {0xc1e3c000}, {0xc1e3e000}, {0xc1e40000}, {0xc1e42000}, {0xc1e44000}, {0xc1e46000}, {0xc1e48000}, {0xc1e4a000}, {0xc1e4c000}, {0xc1e4e000}, {0xc1e50000}, {0xc1e52000}, {0xc1e54000}, {0xc1e56000}, {0xc1e58000}, {0xc1e5a000}, {0xc1e5c000}, {0xc1e5e000}, {0xc1e60000}, {0xc1e62000}, {0xc1e64000}, {0xc1e66000}, {0xc1e68000}, {0xc1e6a000}, {0xc1e6c000}, {0xc1e6e000}, {0xc1e70000}, {0xc1e72000}, {0xc1e74000}, {0xc1e76000}, {0xc1e78000}, {0xc1e7a000}, {0xc1e7c000}, {0xc1e7e000}, {0xc1e80000}, {0xc1e82000}, {0xc1e84000}, {0xc1e86000}, {0xc1e88000}, {0xc1e8a000}, {0xc1e8c000}, {0xc1e8e000}, {0xc1e90000}, {0xc1e92000}, {0xc1e94000}, {0xc1e96000}, {0xc1e98000}, {0xc1e9a000}, {0xc1e9c000}, {0xc1e9e000}, {0xc1ea0000}, {0xc1ea2000}, {0xc1ea4000}, {0xc1ea6000}, {0xc1ea8000}, {0xc1eaa000}, {0xc1eac000}, {0xc1eae000}, {0xc1eb0000}, {0xc1eb2000}, {0xc1eb4000}, {0xc1eb6000}, {0xc1eb8000}, {0xc1eba000}, {0xc1ebc000}, {0xc1ebe000}, {0xc1ec0000}, {0xc1ec2000}, {0xc1ec4000}, {0xc1ec6000}, {0xc1ec8000}, {0xc1eca000}, {0xc1ecc000}, {0xc1ece000}, {0xc1ed0000}, {0xc1ed2000}, {0xc1ed4000}, {0xc1ed6000}, {0xc1ed8000}, {0xc1eda000}, {0xc1edc000}, {0xc1ede000}, {0xc1ee0000}, {0xc1ee2000}, {0xc1ee4000}, {0xc1ee6000}, {0xc1ee8000}, {0xc1eea000}, {0xc1eec000}, {0xc1eee000}, {0xc1ef0000}, {0xc1ef2000}, {0xc1ef4000}, {0xc1ef6000}, {0xc1ef8000}, {0xc1efa000}, {0xc1efc000}, {0xc1efe000}, {0xc1f00000}, {0xc1f02000}, {0xc1f04000}, {0xc1f06000}, {0xc1f08000}, {0xc1f0a000}, {0xc1f0c000}, {0xc1f0e000}, {0xc1f10000}, {0xc1f12000}, {0xc1f14000}, {0xc1f16000}, {0xc1f18000}, {0xc1f1a000}, {0xc1f1c000}, {0xc1f1e000}, {0xc1f20000}, {0xc1f22000}, {0xc1f24000}, {0xc1f26000}, {0xc1f28000}, {0xc1f2a000}, {0xc1f2c000}, {0xc1f2e000}, {0xc1f30000}, {0xc1f32000}, {0xc1f34000}, {0xc1f36000}, {0xc1f38000}, {0xc1f3a000}, {0xc1f3c000}, {0xc1f3e000}, {0xc1f40000}, {0xc1f42000}, {0xc1f44000}, {0xc1f46000}, {0xc1f48000}, {0xc1f4a000}, {0xc1f4c000}, {0xc1f4e000}, {0xc1f50000}, {0xc1f52000}, {0xc1f54000}, {0xc1f56000}, {0xc1f58000}, {0xc1f5a000}, {0xc1f5c000}, {0xc1f5e000}, {0xc1f60000}, {0xc1f62000}, {0xc1f64000}, {0xc1f66000}, {0xc1f68000}, {0xc1f6a000}, {0xc1f6c000}, {0xc1f6e000}, {0xc1f70000}, {0xc1f72000}, {0xc1f74000}, {0xc1f76000}, {0xc1f78000}, {0xc1f7a000}, {0xc1f7c000}, {0xc1f7e000}, {0xc1f80000}, {0xc1f82000}, {0xc1f84000}, {0xc1f86000}, {0xc1f88000}, {0xc1f8a000}, {0xc1f8c000}, {0xc1f8e000}, {0xc1f90000}, {0xc1f92000}, {0xc1f94000}, {0xc1f96000}, {0xc1f98000}, {0xc1f9a000}, {0xc1f9c000}, {0xc1f9e000}, {0xc1fa0000}, {0xc1fa2000}, {0xc1fa4000}, {0xc1fa6000}, {0xc1fa8000}, {0xc1faa000}, {0xc1fac000}, {0xc1fae000}, {0xc1fb0000}, {0xc1fb2000}, {0xc1fb4000}, {0xc1fb6000}, {0xc1fb8000}, {0xc1fba000}, {0xc1fbc000}, {0xc1fbe000}, {0xc1fc0000}, {0xc1fc2000}, {0xc1fc4000}, {0xc1fc6000}, {0xc1fc8000}, {0xc1fca000}, {0xc1fcc000}, {0xc1fce000}, {0xc1fd0000}, {0xc1fd2000}, {0xc1fd4000}, {0xc1fd6000}, {0xc1fd8000}, {0xc1fda000}, {0xc1fdc000}, {0xc1fde000}, {0xc1fe0000}, {0xc1fe2000}, {0xc1fe4000}, {0xc1fe6000}, {0xc1fe8000}, {0xc1fea000}, {0xc1fec000}, {0xc1fee000}, {0xc1ff0000}, {0xc1ff2000}, {0xc1ff4000}, {0xc1ff6000}, {0xc1ff8000}, {0xc1ffa000}, {0xc1ffc000}, {0xc1ffe000}, {0xc2000000}, {0xc2002000}, {0xc2004000}, {0xc2006000}, {0xc2008000}, {0xc200a000}, {0xc200c000}, {0xc200e000}, {0xc2010000}, {0xc2012000}, {0xc2014000}, {0xc2016000}, {0xc2018000}, {0xc201a000}, {0xc201c000}, {0xc201e000}, {0xc2020000}, {0xc2022000}, {0xc2024000}, {0xc2026000}, {0xc2028000}, {0xc202a000}, {0xc202c000}, {0xc202e000}, {0xc2030000}, {0xc2032000}, {0xc2034000}, {0xc2036000}, {0xc2038000}, {0xc203a000}, {0xc203c000}, {0xc203e000}, {0xc2040000}, {0xc2042000}, {0xc2044000}, {0xc2046000}, {0xc2048000}, {0xc204a000}, {0xc204c000}, {0xc204e000}, {0xc2050000}, {0xc2052000}, {0xc2054000}, {0xc2056000}, {0xc2058000}, {0xc205a000}, {0xc205c000}, {0xc205e000}, {0xc2060000}, {0xc2062000}, {0xc2064000}, {0xc2066000}, {0xc2068000}, {0xc206a000}, {0xc206c000}, {0xc206e000}, {0xc2070000}, {0xc2072000}, {0xc2074000}, {0xc2076000}, {0xc2078000}, {0xc207a000}, {0xc207c000}, {0xc207e000}, {0xc2080000}, {0xc2082000}, {0xc2084000}, {0xc2086000}, {0xc2088000}, {0xc208a000}, {0xc208c000}, {0xc208e000}, {0xc2090000}, {0xc2092000}, {0xc2094000}, {0xc2096000}, {0xc2098000}, {0xc209a000}, {0xc209c000}, {0xc209e000}, {0xc20a0000}, {0xc20a2000}, {0xc20a4000}, {0xc20a6000}, {0xc20a8000}, {0xc20aa000}, {0xc20ac000}, {0xc20ae000}, {0xc20b0000}, {0xc20b2000}, {0xc20b4000}, {0xc20b6000}, {0xc20b8000}, {0xc20ba000}, {0xc20bc000}, {0xc20be000}, {0xc20c0000}, {0xc20c2000}, {0xc20c4000}, {0xc20c6000}, {0xc20c8000}, {0xc20ca000}, {0xc20cc000}, {0xc20ce000}, {0xc20d0000}, {0xc20d2000}, {0xc20d4000}, {0xc20d6000}, {0xc20d8000}, {0xc20da000}, {0xc20dc000}, {0xc20de000}, {0xc20e0000}, {0xc20e2000}, {0xc20e4000}, {0xc20e6000}, {0xc20e8000}, {0xc20ea000}, {0xc20ec000}, {0xc20ee000}, {0xc20f0000}, {0xc20f2000}, {0xc20f4000}, {0xc20f6000}, {0xc20f8000}, {0xc20fa000}, {0xc20fc000}, {0xc20fe000}, {0xc2100000}, {0xc2102000}, {0xc2104000}, {0xc2106000}, {0xc2108000}, {0xc210a000}, {0xc210c000}, {0xc210e000}, {0xc2110000}, {0xc2112000}, {0xc2114000}, {0xc2116000}, {0xc2118000}, {0xc211a000}, {0xc211c000}, {0xc211e000}, {0xc2120000}, {0xc2122000}, {0xc2124000}, {0xc2126000}, {0xc2128000}, {0xc212a000}, {0xc212c000}, {0xc212e000}, {0xc2130000}, {0xc2132000}, {0xc2134000}, {0xc2136000}, {0xc2138000}, {0xc213a000}, {0xc213c000}, {0xc213e000}, {0xc2140000}, {0xc2142000}, {0xc2144000}, {0xc2146000}, {0xc2148000}, {0xc214a000}, {0xc214c000}, {0xc214e000}, {0xc2150000}, {0xc2152000}, {0xc2154000}, {0xc2156000}, {0xc2158000}, {0xc215a000}, {0xc215c000}, {0xc215e000}, {0xc2160000}, {0xc2162000}, {0xc2164000}, {0xc2166000}, {0xc2168000}, {0xc216a000}, {0xc216c000}, {0xc216e000}, {0xc2170000}, {0xc2172000}, {0xc2174000}, {0xc2176000}, {0xc2178000}, {0xc217a000}, {0xc217c000}, {0xc217e000}, {0xc2180000}, {0xc2182000}, {0xc2184000}, {0xc2186000}, {0xc2188000}, {0xc218a000}, {0xc218c000}, {0xc218e000}, {0xc2190000}, {0xc2192000}, {0xc2194000}, {0xc2196000}, {0xc2198000}, {0xc219a000}, {0xc219c000}, {0xc219e000}, {0xc21a0000}, {0xc21a2000}, {0xc21a4000}, {0xc21a6000}, {0xc21a8000}, {0xc21aa000}, {0xc21ac000}, {0xc21ae000}, {0xc21b0000}, {0xc21b2000}, {0xc21b4000}, {0xc21b6000}, {0xc21b8000}, {0xc21ba000}, {0xc21bc000}, {0xc21be000}, {0xc21c0000}, {0xc21c2000}, {0xc21c4000}, {0xc21c6000}, {0xc21c8000}, {0xc21ca000}, {0xc21cc000}, {0xc21ce000}, {0xc21d0000}, {0xc21d2000}, {0xc21d4000}, {0xc21d6000}, {0xc21d8000}, {0xc21da000}, {0xc21dc000}, {0xc21de000}, {0xc21e0000}, {0xc21e2000}, {0xc21e4000}, {0xc21e6000}, {0xc21e8000}, {0xc21ea000}, {0xc21ec000}, {0xc21ee000}, {0xc21f0000}, {0xc21f2000}, {0xc21f4000}, {0xc21f6000}, {0xc21f8000}, {0xc21fa000}, {0xc21fc000}, {0xc21fe000}, {0xc2200000}, {0xc2202000}, {0xc2204000}, {0xc2206000}, {0xc2208000}, {0xc220a000}, {0xc220c000}, {0xc220e000}, {0xc2210000}, {0xc2212000}, {0xc2214000}, {0xc2216000}, {0xc2218000}, {0xc221a000}, {0xc221c000}, {0xc221e000}, {0xc2220000}, {0xc2222000}, {0xc2224000}, {0xc2226000}, {0xc2228000}, {0xc222a000}, {0xc222c000}, {0xc222e000}, {0xc2230000}, {0xc2232000}, {0xc2234000}, {0xc2236000}, {0xc2238000}, {0xc223a000}, {0xc223c000}, {0xc223e000}, {0xc2240000}, {0xc2242000}, {0xc2244000}, {0xc2246000}, {0xc2248000}, {0xc224a000}, {0xc224c000}, {0xc224e000}, {0xc2250000}, {0xc2252000}, {0xc2254000}, {0xc2256000}, {0xc2258000}, {0xc225a000}, {0xc225c000}, {0xc225e000}, {0xc2260000}, {0xc2262000}, {0xc2264000}, {0xc2266000}, {0xc2268000}, {0xc226a000}, {0xc226c000}, {0xc226e000}, {0xc2270000}, {0xc2272000}, {0xc2274000}, {0xc2276000}, {0xc2278000}, {0xc227a000}, {0xc227c000}, {0xc227e000}, {0xc2280000}, {0xc2282000}, {0xc2284000}, {0xc2286000}, {0xc2288000}, {0xc228a000}, {0xc228c000}, {0xc228e000}, {0xc2290000}, {0xc2292000}, {0xc2294000}, {0xc2296000}, {0xc2298000}, {0xc229a000}, {0xc229c000}, {0xc229e000}, {0xc22a0000}, {0xc22a2000}, {0xc22a4000}, {0xc22a6000}, {0xc22a8000}, {0xc22aa000}, {0xc22ac000}, {0xc22ae000}, {0xc22b0000}, {0xc22b2000}, {0xc22b4000}, {0xc22b6000}, {0xc22b8000}, {0xc22ba000}, {0xc22bc000}, {0xc22be000}, {0xc22c0000}, {0xc22c2000}, {0xc22c4000}, {0xc22c6000}, {0xc22c8000}, {0xc22ca000}, {0xc22cc000}, {0xc22ce000}, {0xc22d0000}, {0xc22d2000}, {0xc22d4000}, {0xc22d6000}, {0xc22d8000}, {0xc22da000}, {0xc22dc000}, {0xc22de000}, {0xc22e0000}, {0xc22e2000}, {0xc22e4000}, {0xc22e6000}, {0xc22e8000}, {0xc22ea000}, {0xc22ec000}, {0xc22ee000}, {0xc22f0000}, {0xc22f2000}, {0xc22f4000}, {0xc22f6000}, {0xc22f8000}, {0xc22fa000}, {0xc22fc000}, {0xc22fe000}, {0xc2300000}, {0xc2302000}, {0xc2304000}, {0xc2306000}, {0xc2308000}, {0xc230a000}, {0xc230c000}, {0xc230e000}, {0xc2310000}, {0xc2312000}, {0xc2314000}, {0xc2316000}, {0xc2318000}, {0xc231a000}, {0xc231c000}, {0xc231e000}, {0xc2320000}, {0xc2322000}, {0xc2324000}, {0xc2326000}, {0xc2328000}, {0xc232a000}, {0xc232c000}, {0xc232e000}, {0xc2330000}, {0xc2332000}, {0xc2334000}, {0xc2336000}, {0xc2338000}, {0xc233a000}, {0xc233c000}, {0xc233e000}, {0xc2340000}, {0xc2342000}, {0xc2344000}, {0xc2346000}, {0xc2348000}, {0xc234a000}, {0xc234c000}, {0xc234e000}, {0xc2350000}, {0xc2352000}, {0xc2354000}, {0xc2356000}, {0xc2358000}, {0xc235a000}, {0xc235c000}, {0xc235e000}, {0xc2360000}, {0xc2362000}, {0xc2364000}, {0xc2366000}, {0xc2368000}, {0xc236a000}, {0xc236c000}, {0xc236e000}, {0xc2370000}, {0xc2372000}, {0xc2374000}, {0xc2376000}, {0xc2378000}, {0xc237a000}, {0xc237c000}, {0xc237e000}, {0xc2380000}, {0xc2382000}, {0xc2384000}, {0xc2386000}, {0xc2388000}, {0xc238a000}, {0xc238c000}, {0xc238e000}, {0xc2390000}, {0xc2392000}, {0xc2394000}, {0xc2396000}, {0xc2398000}, {0xc239a000}, {0xc239c000}, {0xc239e000}, {0xc23a0000}, {0xc23a2000}, {0xc23a4000}, {0xc23a6000}, {0xc23a8000}, {0xc23aa000}, {0xc23ac000}, {0xc23ae000}, {0xc23b0000}, {0xc23b2000}, {0xc23b4000}, {0xc23b6000}, {0xc23b8000}, {0xc23ba000}, {0xc23bc000}, {0xc23be000}, {0xc23c0000}, {0xc23c2000}, {0xc23c4000}, {0xc23c6000}, {0xc23c8000}, {0xc23ca000}, {0xc23cc000}, {0xc23ce000}, {0xc23d0000}, {0xc23d2000}, {0xc23d4000}, {0xc23d6000}, {0xc23d8000}, {0xc23da000}, {0xc23dc000}, {0xc23de000}, {0xc23e0000}, {0xc23e2000}, {0xc23e4000}, {0xc23e6000}, {0xc23e8000}, {0xc23ea000}, {0xc23ec000}, {0xc23ee000}, {0xc23f0000}, {0xc23f2000}, {0xc23f4000}, {0xc23f6000}, {0xc23f8000}, {0xc23fa000}, {0xc23fc000}, {0xc23fe000}, {0xc2400000}, {0xc2402000}, {0xc2404000}, {0xc2406000}, {0xc2408000}, {0xc240a000}, {0xc240c000}, {0xc240e000}, {0xc2410000}, {0xc2412000}, {0xc2414000}, {0xc2416000}, {0xc2418000}, {0xc241a000}, {0xc241c000}, {0xc241e000}, {0xc2420000}, {0xc2422000}, {0xc2424000}, {0xc2426000}, {0xc2428000}, {0xc242a000}, {0xc242c000}, {0xc242e000}, {0xc2430000}, {0xc2432000}, {0xc2434000}, {0xc2436000}, {0xc2438000}, {0xc243a000}, {0xc243c000}, {0xc243e000}, {0xc2440000}, {0xc2442000}, {0xc2444000}, {0xc2446000}, {0xc2448000}, {0xc244a000}, {0xc244c000}, {0xc244e000}, {0xc2450000}, {0xc2452000}, {0xc2454000}, {0xc2456000}, {0xc2458000}, {0xc245a000}, {0xc245c000}, {0xc245e000}, {0xc2460000}, {0xc2462000}, {0xc2464000}, {0xc2466000}, {0xc2468000}, {0xc246a000}, {0xc246c000}, {0xc246e000}, {0xc2470000}, {0xc2472000}, {0xc2474000}, {0xc2476000}, {0xc2478000}, {0xc247a000}, {0xc247c000}, {0xc247e000}, {0xc2480000}, {0xc2482000}, {0xc2484000}, {0xc2486000}, {0xc2488000}, {0xc248a000}, {0xc248c000}, {0xc248e000}, {0xc2490000}, {0xc2492000}, {0xc2494000}, {0xc2496000}, {0xc2498000}, {0xc249a000}, {0xc249c000}, {0xc249e000}, {0xc24a0000}, {0xc24a2000}, {0xc24a4000}, {0xc24a6000}, {0xc24a8000}, {0xc24aa000}, {0xc24ac000}, {0xc24ae000}, {0xc24b0000}, {0xc24b2000}, {0xc24b4000}, {0xc24b6000}, {0xc24b8000}, {0xc24ba000}, {0xc24bc000}, {0xc24be000}, {0xc24c0000}, {0xc24c2000}, {0xc24c4000}, {0xc24c6000}, {0xc24c8000}, {0xc24ca000}, {0xc24cc000}, {0xc24ce000}, {0xc24d0000}, {0xc24d2000}, {0xc24d4000}, {0xc24d6000}, {0xc24d8000}, {0xc24da000}, {0xc24dc000}, {0xc24de000}, {0xc24e0000}, {0xc24e2000}, {0xc24e4000}, {0xc24e6000}, {0xc24e8000}, {0xc24ea000}, {0xc24ec000}, {0xc24ee000}, {0xc24f0000}, {0xc24f2000}, {0xc24f4000}, {0xc24f6000}, {0xc24f8000}, {0xc24fa000}, {0xc24fc000}, {0xc24fe000}, {0xc2500000}, {0xc2502000}, {0xc2504000}, {0xc2506000}, {0xc2508000}, {0xc250a000}, {0xc250c000}, {0xc250e000}, {0xc2510000}, {0xc2512000}, {0xc2514000}, {0xc2516000}, {0xc2518000}, {0xc251a000}, {0xc251c000}, {0xc251e000}, {0xc2520000}, {0xc2522000}, {0xc2524000}, {0xc2526000}, {0xc2528000}, {0xc252a000}, {0xc252c000}, {0xc252e000}, {0xc2530000}, {0xc2532000}, {0xc2534000}, {0xc2536000}, {0xc2538000}, {0xc253a000}, {0xc253c000}, {0xc253e000}, {0xc2540000}, {0xc2542000}, {0xc2544000}, {0xc2546000}, {0xc2548000}, {0xc254a000}, {0xc254c000}, {0xc254e000}, {0xc2550000}, {0xc2552000}, {0xc2554000}, {0xc2556000}, {0xc2558000}, {0xc255a000}, {0xc255c000}, {0xc255e000}, {0xc2560000}, {0xc2562000}, {0xc2564000}, {0xc2566000}, {0xc2568000}, {0xc256a000}, {0xc256c000}, {0xc256e000}, {0xc2570000}, {0xc2572000}, {0xc2574000}, {0xc2576000}, {0xc2578000}, {0xc257a000}, {0xc257c000}, {0xc257e000}, {0xc2580000}, {0xc2582000}, {0xc2584000}, {0xc2586000}, {0xc2588000}, {0xc258a000}, {0xc258c000}, {0xc258e000}, {0xc2590000}, {0xc2592000}, {0xc2594000}, {0xc2596000}, {0xc2598000}, {0xc259a000}, {0xc259c000}, {0xc259e000}, {0xc25a0000}, {0xc25a2000}, {0xc25a4000}, {0xc25a6000}, {0xc25a8000}, {0xc25aa000}, {0xc25ac000}, {0xc25ae000}, {0xc25b0000}, {0xc25b2000}, {0xc25b4000}, {0xc25b6000}, {0xc25b8000}, {0xc25ba000}, {0xc25bc000}, {0xc25be000}, {0xc25c0000}, {0xc25c2000}, {0xc25c4000}, {0xc25c6000}, {0xc25c8000}, {0xc25ca000}, {0xc25cc000}, {0xc25ce000}, {0xc25d0000}, {0xc25d2000}, {0xc25d4000}, {0xc25d6000}, {0xc25d8000}, {0xc25da000}, {0xc25dc000}, {0xc25de000}, {0xc25e0000}, {0xc25e2000}, {0xc25e4000}, {0xc25e6000}, {0xc25e8000}, {0xc25ea000}, {0xc25ec000}, {0xc25ee000}, {0xc25f0000}, {0xc25f2000}, {0xc25f4000}, {0xc25f6000}, {0xc25f8000}, {0xc25fa000}, {0xc25fc000}, {0xc25fe000}, {0xc2600000}, {0xc2602000}, {0xc2604000}, {0xc2606000}, {0xc2608000}, {0xc260a000}, {0xc260c000}, {0xc260e000}, {0xc2610000}, {0xc2612000}, {0xc2614000}, {0xc2616000}, {0xc2618000}, {0xc261a000}, {0xc261c000}, {0xc261e000}, {0xc2620000}, {0xc2622000}, {0xc2624000}, {0xc2626000}, {0xc2628000}, {0xc262a000}, {0xc262c000}, {0xc262e000}, {0xc2630000}, {0xc2632000}, {0xc2634000}, {0xc2636000}, {0xc2638000}, {0xc263a000}, {0xc263c000}, {0xc263e000}, {0xc2640000}, {0xc2642000}, {0xc2644000}, {0xc2646000}, {0xc2648000}, {0xc264a000}, {0xc264c000}, {0xc264e000}, {0xc2650000}, {0xc2652000}, {0xc2654000}, {0xc2656000}, {0xc2658000}, {0xc265a000}, {0xc265c000}, {0xc265e000}, {0xc2660000}, {0xc2662000}, {0xc2664000}, {0xc2666000}, {0xc2668000}, {0xc266a000}, {0xc266c000}, {0xc266e000}, {0xc2670000}, {0xc2672000}, {0xc2674000}, {0xc2676000}, {0xc2678000}, {0xc267a000}, {0xc267c000}, {0xc267e000}, {0xc2680000}, {0xc2682000}, {0xc2684000}, {0xc2686000}, {0xc2688000}, {0xc268a000}, {0xc268c000}, {0xc268e000}, {0xc2690000}, {0xc2692000}, {0xc2694000}, {0xc2696000}, {0xc2698000}, {0xc269a000}, {0xc269c000}, {0xc269e000}, {0xc26a0000}, {0xc26a2000}, {0xc26a4000}, {0xc26a6000}, {0xc26a8000}, {0xc26aa000}, {0xc26ac000}, {0xc26ae000}, {0xc26b0000}, {0xc26b2000}, {0xc26b4000}, {0xc26b6000}, {0xc26b8000}, {0xc26ba000}, {0xc26bc000}, {0xc26be000}, {0xc26c0000}, {0xc26c2000}, {0xc26c4000}, {0xc26c6000}, {0xc26c8000}, {0xc26ca000}, {0xc26cc000}, {0xc26ce000}, {0xc26d0000}, {0xc26d2000}, {0xc26d4000}, {0xc26d6000}, {0xc26d8000}, {0xc26da000}, {0xc26dc000}, {0xc26de000}, {0xc26e0000}, {0xc26e2000}, {0xc26e4000}, {0xc26e6000}, {0xc26e8000}, {0xc26ea000}, {0xc26ec000}, {0xc26ee000}, {0xc26f0000}, {0xc26f2000}, {0xc26f4000}, {0xc26f6000}, {0xc26f8000}, {0xc26fa000}, {0xc26fc000}, {0xc26fe000}, {0xc2700000}, {0xc2702000}, {0xc2704000}, {0xc2706000}, {0xc2708000}, {0xc270a000}, {0xc270c000}, {0xc270e000}, {0xc2710000}, {0xc2712000}, {0xc2714000}, {0xc2716000}, {0xc2718000}, {0xc271a000}, {0xc271c000}, {0xc271e000}, {0xc2720000}, {0xc2722000}, {0xc2724000}, {0xc2726000}, {0xc2728000}, {0xc272a000}, {0xc272c000}, {0xc272e000}, {0xc2730000}, {0xc2732000}, {0xc2734000}, {0xc2736000}, {0xc2738000}, {0xc273a000}, {0xc273c000}, {0xc273e000}, {0xc2740000}, {0xc2742000}, {0xc2744000}, {0xc2746000}, {0xc2748000}, {0xc274a000}, {0xc274c000}, {0xc274e000}, {0xc2750000}, {0xc2752000}, {0xc2754000}, {0xc2756000}, {0xc2758000}, {0xc275a000}, {0xc275c000}, {0xc275e000}, {0xc2760000}, {0xc2762000}, {0xc2764000}, {0xc2766000}, {0xc2768000}, {0xc276a000}, {0xc276c000}, {0xc276e000}, {0xc2770000}, {0xc2772000}, {0xc2774000}, {0xc2776000}, {0xc2778000}, {0xc277a000}, {0xc277c000}, {0xc277e000}, {0xc2780000}, {0xc2782000}, {0xc2784000}, {0xc2786000}, {0xc2788000}, {0xc278a000}, {0xc278c000}, {0xc278e000}, {0xc2790000}, {0xc2792000}, {0xc2794000}, {0xc2796000}, {0xc2798000}, {0xc279a000}, {0xc279c000}, {0xc279e000}, {0xc27a0000}, {0xc27a2000}, {0xc27a4000}, {0xc27a6000}, {0xc27a8000}, {0xc27aa000}, {0xc27ac000}, {0xc27ae000}, {0xc27b0000}, {0xc27b2000}, {0xc27b4000}, {0xc27b6000}, {0xc27b8000}, {0xc27ba000}, {0xc27bc000}, {0xc27be000}, {0xc27c0000}, {0xc27c2000}, {0xc27c4000}, {0xc27c6000}, {0xc27c8000}, {0xc27ca000}, {0xc27cc000}, {0xc27ce000}, {0xc27d0000}, {0xc27d2000}, {0xc27d4000}, {0xc27d6000}, {0xc27d8000}, {0xc27da000}, {0xc27dc000}, {0xc27de000}, {0xc27e0000}, {0xc27e2000}, {0xc27e4000}, {0xc27e6000}, {0xc27e8000}, {0xc27ea000}, {0xc27ec000}, {0xc27ee000}, {0xc27f0000}, {0xc27f2000}, {0xc27f4000}, {0xc27f6000}, {0xc27f8000}, {0xc27fa000}, {0xc27fc000}, {0xc27fe000}, {0xc2800000}, {0xc2802000}, {0xc2804000}, {0xc2806000}, {0xc2808000}, {0xc280a000}, {0xc280c000}, {0xc280e000}, {0xc2810000}, {0xc2812000}, {0xc2814000}, {0xc2816000}, {0xc2818000}, {0xc281a000}, {0xc281c000}, {0xc281e000}, {0xc2820000}, {0xc2822000}, {0xc2824000}, {0xc2826000}, {0xc2828000}, {0xc282a000}, {0xc282c000}, {0xc282e000}, {0xc2830000}, {0xc2832000}, {0xc2834000}, {0xc2836000}, {0xc2838000}, {0xc283a000}, {0xc283c000}, {0xc283e000}, {0xc2840000}, {0xc2842000}, {0xc2844000}, {0xc2846000}, {0xc2848000}, {0xc284a000}, {0xc284c000}, {0xc284e000}, {0xc2850000}, {0xc2852000}, {0xc2854000}, {0xc2856000}, {0xc2858000}, {0xc285a000}, {0xc285c000}, {0xc285e000}, {0xc2860000}, {0xc2862000}, {0xc2864000}, {0xc2866000}, {0xc2868000}, {0xc286a000}, {0xc286c000}, {0xc286e000}, {0xc2870000}, {0xc2872000}, {0xc2874000}, {0xc2876000}, {0xc2878000}, {0xc287a000}, {0xc287c000}, {0xc287e000}, {0xc2880000}, {0xc2882000}, {0xc2884000}, {0xc2886000}, {0xc2888000}, {0xc288a000}, {0xc288c000}, {0xc288e000}, {0xc2890000}, {0xc2892000}, {0xc2894000}, {0xc2896000}, {0xc2898000}, {0xc289a000}, {0xc289c000}, {0xc289e000}, {0xc28a0000}, {0xc28a2000}, {0xc28a4000}, {0xc28a6000}, {0xc28a8000}, {0xc28aa000}, {0xc28ac000}, {0xc28ae000}, {0xc28b0000}, {0xc28b2000}, {0xc28b4000}, {0xc28b6000}, {0xc28b8000}, {0xc28ba000}, {0xc28bc000}, {0xc28be000}, {0xc28c0000}, {0xc28c2000}, {0xc28c4000}, {0xc28c6000}, {0xc28c8000}, {0xc28ca000}, {0xc28cc000}, {0xc28ce000}, {0xc28d0000}, {0xc28d2000}, {0xc28d4000}, {0xc28d6000}, {0xc28d8000}, {0xc28da000}, {0xc28dc000}, {0xc28de000}, {0xc28e0000}, {0xc28e2000}, {0xc28e4000}, {0xc28e6000}, {0xc28e8000}, {0xc28ea000}, {0xc28ec000}, {0xc28ee000}, {0xc28f0000}, {0xc28f2000}, {0xc28f4000}, {0xc28f6000}, {0xc28f8000}, {0xc28fa000}, {0xc28fc000}, {0xc28fe000}, {0xc2900000}, {0xc2902000}, {0xc2904000}, {0xc2906000}, {0xc2908000}, {0xc290a000}, {0xc290c000}, {0xc290e000}, {0xc2910000}, {0xc2912000}, {0xc2914000}, {0xc2916000}, {0xc2918000}, {0xc291a000}, {0xc291c000}, {0xc291e000}, {0xc2920000}, {0xc2922000}, {0xc2924000}, {0xc2926000}, {0xc2928000}, {0xc292a000}, {0xc292c000}, {0xc292e000}, {0xc2930000}, {0xc2932000}, {0xc2934000}, {0xc2936000}, {0xc2938000}, {0xc293a000}, {0xc293c000}, {0xc293e000}, {0xc2940000}, {0xc2942000}, {0xc2944000}, {0xc2946000}, {0xc2948000}, {0xc294a000}, {0xc294c000}, {0xc294e000}, {0xc2950000}, {0xc2952000}, {0xc2954000}, {0xc2956000}, {0xc2958000}, {0xc295a000}, {0xc295c000}, {0xc295e000}, {0xc2960000}, {0xc2962000}, {0xc2964000}, {0xc2966000}, {0xc2968000}, {0xc296a000}, {0xc296c000}, {0xc296e000}, {0xc2970000}, {0xc2972000}, {0xc2974000}, {0xc2976000}, {0xc2978000}, {0xc297a000}, {0xc297c000}, {0xc297e000}, {0xc2980000}, {0xc2982000}, {0xc2984000}, {0xc2986000}, {0xc2988000}, {0xc298a000}, {0xc298c000}, {0xc298e000}, {0xc2990000}, {0xc2992000}, {0xc2994000}, {0xc2996000}, {0xc2998000}, {0xc299a000}, {0xc299c000}, {0xc299e000}, {0xc29a0000}, {0xc29a2000}, {0xc29a4000}, {0xc29a6000}, {0xc29a8000}, {0xc29aa000}, {0xc29ac000}, {0xc29ae000}, {0xc29b0000}, {0xc29b2000}, {0xc29b4000}, {0xc29b6000}, {0xc29b8000}, {0xc29ba000}, {0xc29bc000}, {0xc29be000}, {0xc29c0000}, {0xc29c2000}, {0xc29c4000}, {0xc29c6000}, {0xc29c8000}, {0xc29ca000}, {0xc29cc000}, {0xc29ce000}, {0xc29d0000}, {0xc29d2000}, {0xc29d4000}, {0xc29d6000}, {0xc29d8000}, {0xc29da000}, {0xc29dc000}, {0xc29de000}, {0xc29e0000}, {0xc29e2000}, {0xc29e4000}, {0xc29e6000}, {0xc29e8000}, {0xc29ea000}, {0xc29ec000}, {0xc29ee000}, {0xc29f0000}, {0xc29f2000}, {0xc29f4000}, {0xc29f6000}, {0xc29f8000}, {0xc29fa000}, {0xc29fc000}, {0xc29fe000}, {0xc2a00000}, {0xc2a02000}, {0xc2a04000}, {0xc2a06000}, {0xc2a08000}, {0xc2a0a000}, {0xc2a0c000}, {0xc2a0e000}, {0xc2a10000}, {0xc2a12000}, {0xc2a14000}, {0xc2a16000}, {0xc2a18000}, {0xc2a1a000}, {0xc2a1c000}, {0xc2a1e000}, {0xc2a20000}, {0xc2a22000}, {0xc2a24000}, {0xc2a26000}, {0xc2a28000}, {0xc2a2a000}, {0xc2a2c000}, {0xc2a2e000}, {0xc2a30000}, {0xc2a32000}, {0xc2a34000}, {0xc2a36000}, {0xc2a38000}, {0xc2a3a000}, {0xc2a3c000}, {0xc2a3e000}, {0xc2a40000}, {0xc2a42000}, {0xc2a44000}, {0xc2a46000}, {0xc2a48000}, {0xc2a4a000}, {0xc2a4c000}, {0xc2a4e000}, {0xc2a50000}, {0xc2a52000}, {0xc2a54000}, {0xc2a56000}, {0xc2a58000}, {0xc2a5a000}, {0xc2a5c000}, {0xc2a5e000}, {0xc2a60000}, {0xc2a62000}, {0xc2a64000}, {0xc2a66000}, {0xc2a68000}, {0xc2a6a000}, {0xc2a6c000}, {0xc2a6e000}, {0xc2a70000}, {0xc2a72000}, {0xc2a74000}, {0xc2a76000}, {0xc2a78000}, {0xc2a7a000}, {0xc2a7c000}, {0xc2a7e000}, {0xc2a80000}, {0xc2a82000}, {0xc2a84000}, {0xc2a86000}, {0xc2a88000}, {0xc2a8a000}, {0xc2a8c000}, {0xc2a8e000}, {0xc2a90000}, {0xc2a92000}, {0xc2a94000}, {0xc2a96000}, {0xc2a98000}, {0xc2a9a000}, {0xc2a9c000}, {0xc2a9e000}, {0xc2aa0000}, {0xc2aa2000}, {0xc2aa4000}, {0xc2aa6000}, {0xc2aa8000}, {0xc2aaa000}, {0xc2aac000}, {0xc2aae000}, {0xc2ab0000}, {0xc2ab2000}, {0xc2ab4000}, {0xc2ab6000}, {0xc2ab8000}, {0xc2aba000}, {0xc2abc000}, {0xc2abe000}, {0xc2ac0000}, {0xc2ac2000}, {0xc2ac4000}, {0xc2ac6000}, {0xc2ac8000}, {0xc2aca000}, {0xc2acc000}, {0xc2ace000}, {0xc2ad0000}, {0xc2ad2000}, {0xc2ad4000}, {0xc2ad6000}, {0xc2ad8000}, {0xc2ada000}, {0xc2adc000}, {0xc2ade000}, {0xc2ae0000}, {0xc2ae2000}, {0xc2ae4000}, {0xc2ae6000}, {0xc2ae8000}, {0xc2aea000}, {0xc2aec000}, {0xc2aee000}, {0xc2af0000}, {0xc2af2000}, {0xc2af4000}, {0xc2af6000}, {0xc2af8000}, {0xc2afa000}, {0xc2afc000}, {0xc2afe000}, {0xc2b00000}, {0xc2b02000}, {0xc2b04000}, {0xc2b06000}, {0xc2b08000}, {0xc2b0a000}, {0xc2b0c000}, {0xc2b0e000}, {0xc2b10000}, {0xc2b12000}, {0xc2b14000}, {0xc2b16000}, {0xc2b18000}, {0xc2b1a000}, {0xc2b1c000}, {0xc2b1e000}, {0xc2b20000}, {0xc2b22000}, {0xc2b24000}, {0xc2b26000}, {0xc2b28000}, {0xc2b2a000}, {0xc2b2c000}, {0xc2b2e000}, {0xc2b30000}, {0xc2b32000}, {0xc2b34000}, {0xc2b36000}, {0xc2b38000}, {0xc2b3a000}, {0xc2b3c000}, {0xc2b3e000}, {0xc2b40000}, {0xc2b42000}, {0xc2b44000}, {0xc2b46000}, {0xc2b48000}, {0xc2b4a000}, {0xc2b4c000}, {0xc2b4e000}, {0xc2b50000}, {0xc2b52000}, {0xc2b54000}, {0xc2b56000}, {0xc2b58000}, {0xc2b5a000}, {0xc2b5c000}, {0xc2b5e000}, {0xc2b60000}, {0xc2b62000}, {0xc2b64000}, {0xc2b66000}, {0xc2b68000}, {0xc2b6a000}, {0xc2b6c000}, {0xc2b6e000}, {0xc2b70000}, {0xc2b72000}, {0xc2b74000}, {0xc2b76000}, {0xc2b78000}, {0xc2b7a000}, {0xc2b7c000}, {0xc2b7e000}, {0xc2b80000}, {0xc2b82000}, {0xc2b84000}, {0xc2b86000}, {0xc2b88000}, {0xc2b8a000}, {0xc2b8c000}, {0xc2b8e000}, {0xc2b90000}, {0xc2b92000}, {0xc2b94000}, {0xc2b96000}, {0xc2b98000}, {0xc2b9a000}, {0xc2b9c000}, {0xc2b9e000}, {0xc2ba0000}, {0xc2ba2000}, {0xc2ba4000}, {0xc2ba6000}, {0xc2ba8000}, {0xc2baa000}, {0xc2bac000}, {0xc2bae000}, {0xc2bb0000}, {0xc2bb2000}, {0xc2bb4000}, {0xc2bb6000}, {0xc2bb8000}, {0xc2bba000}, {0xc2bbc000}, {0xc2bbe000}, {0xc2bc0000}, {0xc2bc2000}, {0xc2bc4000}, {0xc2bc6000}, {0xc2bc8000}, {0xc2bca000}, {0xc2bcc000}, {0xc2bce000}, {0xc2bd0000}, {0xc2bd2000}, {0xc2bd4000}, {0xc2bd6000}, {0xc2bd8000}, {0xc2bda000}, {0xc2bdc000}, {0xc2bde000}, {0xc2be0000}, {0xc2be2000}, {0xc2be4000}, {0xc2be6000}, {0xc2be8000}, {0xc2bea000}, {0xc2bec000}, {0xc2bee000}, {0xc2bf0000}, {0xc2bf2000}, {0xc2bf4000}, {0xc2bf6000}, {0xc2bf8000}, {0xc2bfa000}, {0xc2bfc000}, {0xc2bfe000}, {0xc2c00000}, {0xc2c02000}, {0xc2c04000}, {0xc2c06000}, {0xc2c08000}, {0xc2c0a000}, {0xc2c0c000}, {0xc2c0e000}, {0xc2c10000}, {0xc2c12000}, {0xc2c14000}, {0xc2c16000}, {0xc2c18000}, {0xc2c1a000}, {0xc2c1c000}, {0xc2c1e000}, {0xc2c20000}, {0xc2c22000}, {0xc2c24000}, {0xc2c26000}, {0xc2c28000}, {0xc2c2a000}, {0xc2c2c000}, {0xc2c2e000}, {0xc2c30000}, {0xc2c32000}, {0xc2c34000}, {0xc2c36000}, {0xc2c38000}, {0xc2c3a000}, {0xc2c3c000}, {0xc2c3e000}, {0xc2c40000}, {0xc2c42000}, {0xc2c44000}, {0xc2c46000}, {0xc2c48000}, {0xc2c4a000}, {0xc2c4c000}, {0xc2c4e000}, {0xc2c50000}, {0xc2c52000}, {0xc2c54000}, {0xc2c56000}, {0xc2c58000}, {0xc2c5a000}, {0xc2c5c000}, {0xc2c5e000}, {0xc2c60000}, {0xc2c62000}, {0xc2c64000}, {0xc2c66000}, {0xc2c68000}, {0xc2c6a000}, {0xc2c6c000}, {0xc2c6e000}, {0xc2c70000}, {0xc2c72000}, {0xc2c74000}, {0xc2c76000}, {0xc2c78000}, {0xc2c7a000}, {0xc2c7c000}, {0xc2c7e000}, {0xc2c80000}, {0xc2c82000}, {0xc2c84000}, {0xc2c86000}, {0xc2c88000}, {0xc2c8a000}, {0xc2c8c000}, {0xc2c8e000}, {0xc2c90000}, {0xc2c92000}, {0xc2c94000}, {0xc2c96000}, {0xc2c98000}, {0xc2c9a000}, {0xc2c9c000}, {0xc2c9e000}, {0xc2ca0000}, {0xc2ca2000}, {0xc2ca4000}, {0xc2ca6000}, {0xc2ca8000}, {0xc2caa000}, {0xc2cac000}, {0xc2cae000}, {0xc2cb0000}, {0xc2cb2000}, {0xc2cb4000}, {0xc2cb6000}, {0xc2cb8000}, {0xc2cba000}, {0xc2cbc000}, {0xc2cbe000}, {0xc2cc0000}, {0xc2cc2000}, {0xc2cc4000}, {0xc2cc6000}, {0xc2cc8000}, {0xc2cca000}, {0xc2ccc000}, {0xc2cce000}, {0xc2cd0000}, {0xc2cd2000}, {0xc2cd4000}, {0xc2cd6000}, {0xc2cd8000}, {0xc2cda000}, {0xc2cdc000}, {0xc2cde000}, {0xc2ce0000}, {0xc2ce2000}, {0xc2ce4000}, {0xc2ce6000}, {0xc2ce8000}, {0xc2cea000}, {0xc2cec000}, {0xc2cee000}, {0xc2cf0000}, {0xc2cf2000}, {0xc2cf4000}, {0xc2cf6000}, {0xc2cf8000}, {0xc2cfa000}, {0xc2cfc000}, {0xc2cfe000}, {0xc2d00000}, {0xc2d02000}, {0xc2d04000}, {0xc2d06000}, {0xc2d08000}, {0xc2d0a000}, {0xc2d0c000}, {0xc2d0e000}, {0xc2d10000}, {0xc2d12000}, {0xc2d14000}, {0xc2d16000}, {0xc2d18000}, {0xc2d1a000}, {0xc2d1c000}, {0xc2d1e000}, {0xc2d20000}, {0xc2d22000}, {0xc2d24000}, {0xc2d26000}, {0xc2d28000}, {0xc2d2a000}, {0xc2d2c000}, {0xc2d2e000}, {0xc2d30000}, {0xc2d32000}, {0xc2d34000}, {0xc2d36000}, {0xc2d38000}, {0xc2d3a000}, {0xc2d3c000}, {0xc2d3e000}, {0xc2d40000}, {0xc2d42000}, {0xc2d44000}, {0xc2d46000}, {0xc2d48000}, {0xc2d4a000}, {0xc2d4c000}, {0xc2d4e000}, {0xc2d50000}, {0xc2d52000}, {0xc2d54000}, {0xc2d56000}, {0xc2d58000}, {0xc2d5a000}, {0xc2d5c000}, {0xc2d5e000}, {0xc2d60000}, {0xc2d62000}, {0xc2d64000}, {0xc2d66000}, {0xc2d68000}, {0xc2d6a000}, {0xc2d6c000}, {0xc2d6e000}, {0xc2d70000}, {0xc2d72000}, {0xc2d74000}, {0xc2d76000}, {0xc2d78000}, {0xc2d7a000}, {0xc2d7c000}, {0xc2d7e000}, {0xc2d80000}, {0xc2d82000}, {0xc2d84000}, {0xc2d86000}, {0xc2d88000}, {0xc2d8a000}, {0xc2d8c000}, {0xc2d8e000}, {0xc2d90000}, {0xc2d92000}, {0xc2d94000}, {0xc2d96000}, {0xc2d98000}, {0xc2d9a000}, {0xc2d9c000}, {0xc2d9e000}, {0xc2da0000}, {0xc2da2000}, {0xc2da4000}, {0xc2da6000}, {0xc2da8000}, {0xc2daa000}, {0xc2dac000}, {0xc2dae000}, {0xc2db0000}, {0xc2db2000}, {0xc2db4000}, {0xc2db6000}, {0xc2db8000}, {0xc2dba000}, {0xc2dbc000}, {0xc2dbe000}, {0xc2dc0000}, {0xc2dc2000}, {0xc2dc4000}, {0xc2dc6000}, {0xc2dc8000}, {0xc2dca000}, {0xc2dcc000}, {0xc2dce000}, {0xc2dd0000}, {0xc2dd2000}, {0xc2dd4000}, {0xc2dd6000}, {0xc2dd8000}, {0xc2dda000}, {0xc2ddc000}, {0xc2dde000}, {0xc2de0000}, {0xc2de2000}, {0xc2de4000}, {0xc2de6000}, {0xc2de8000}, {0xc2dea000}, {0xc2dec000}, {0xc2dee000}, {0xc2df0000}, {0xc2df2000}, {0xc2df4000}, {0xc2df6000}, {0xc2df8000}, {0xc2dfa000}, {0xc2dfc000}, {0xc2dfe000}, {0xc2e00000}, {0xc2e02000}, {0xc2e04000}, {0xc2e06000}, {0xc2e08000}, {0xc2e0a000}, {0xc2e0c000}, {0xc2e0e000}, {0xc2e10000}, {0xc2e12000}, {0xc2e14000}, {0xc2e16000}, {0xc2e18000}, {0xc2e1a000}, {0xc2e1c000}, {0xc2e1e000}, {0xc2e20000}, {0xc2e22000}, {0xc2e24000}, {0xc2e26000}, {0xc2e28000}, {0xc2e2a000}, {0xc2e2c000}, {0xc2e2e000}, {0xc2e30000}, {0xc2e32000}, {0xc2e34000}, {0xc2e36000}, {0xc2e38000}, {0xc2e3a000}, {0xc2e3c000}, {0xc2e3e000}, {0xc2e40000}, {0xc2e42000}, {0xc2e44000}, {0xc2e46000}, {0xc2e48000}, {0xc2e4a000}, {0xc2e4c000}, {0xc2e4e000}, {0xc2e50000}, {0xc2e52000}, {0xc2e54000}, {0xc2e56000}, {0xc2e58000}, {0xc2e5a000}, {0xc2e5c000}, {0xc2e5e000}, {0xc2e60000}, {0xc2e62000}, {0xc2e64000}, {0xc2e66000}, {0xc2e68000}, {0xc2e6a000}, {0xc2e6c000}, {0xc2e6e000}, {0xc2e70000}, {0xc2e72000}, {0xc2e74000}, {0xc2e76000}, {0xc2e78000}, {0xc2e7a000}, {0xc2e7c000}, {0xc2e7e000}, {0xc2e80000}, {0xc2e82000}, {0xc2e84000}, {0xc2e86000}, {0xc2e88000}, {0xc2e8a000}, {0xc2e8c000}, {0xc2e8e000}, {0xc2e90000}, {0xc2e92000}, {0xc2e94000}, {0xc2e96000}, {0xc2e98000}, {0xc2e9a000}, {0xc2e9c000}, {0xc2e9e000}, {0xc2ea0000}, {0xc2ea2000}, {0xc2ea4000}, {0xc2ea6000}, {0xc2ea8000}, {0xc2eaa000}, {0xc2eac000}, {0xc2eae000}, {0xc2eb0000}, {0xc2eb2000}, {0xc2eb4000}, {0xc2eb6000}, {0xc2eb8000}, {0xc2eba000}, {0xc2ebc000}, {0xc2ebe000}, {0xc2ec0000}, {0xc2ec2000}, {0xc2ec4000}, {0xc2ec6000}, {0xc2ec8000}, {0xc2eca000}, {0xc2ecc000}, {0xc2ece000}, {0xc2ed0000}, {0xc2ed2000}, {0xc2ed4000}, {0xc2ed6000}, {0xc2ed8000}, {0xc2eda000}, {0xc2edc000}, {0xc2ede000}, {0xc2ee0000}, {0xc2ee2000}, {0xc2ee4000}, {0xc2ee6000}, {0xc2ee8000}, {0xc2eea000}, {0xc2eec000}, {0xc2eee000}, {0xc2ef0000}, {0xc2ef2000}, {0xc2ef4000}, {0xc2ef6000}, {0xc2ef8000}, {0xc2efa000}, {0xc2efc000}, {0xc2efe000}, {0xc2f00000}, {0xc2f02000}, {0xc2f04000}, {0xc2f06000}, {0xc2f08000}, {0xc2f0a000}, {0xc2f0c000}, {0xc2f0e000}, {0xc2f10000}, {0xc2f12000}, {0xc2f14000}, {0xc2f16000}, {0xc2f18000}, {0xc2f1a000}, {0xc2f1c000}, {0xc2f1e000}, {0xc2f20000}, {0xc2f22000}, {0xc2f24000}, {0xc2f26000}, {0xc2f28000}, {0xc2f2a000}, {0xc2f2c000}, {0xc2f2e000}, {0xc2f30000}, {0xc2f32000}, {0xc2f34000}, {0xc2f36000}, {0xc2f38000}, {0xc2f3a000}, {0xc2f3c000}, {0xc2f3e000}, {0xc2f40000}, {0xc2f42000}, {0xc2f44000}, {0xc2f46000}, {0xc2f48000}, {0xc2f4a000}, {0xc2f4c000}, {0xc2f4e000}, {0xc2f50000}, {0xc2f52000}, {0xc2f54000}, {0xc2f56000}, {0xc2f58000}, {0xc2f5a000}, {0xc2f5c000}, {0xc2f5e000}, {0xc2f60000}, {0xc2f62000}, {0xc2f64000}, {0xc2f66000}, {0xc2f68000}, {0xc2f6a000}, {0xc2f6c000}, {0xc2f6e000}, {0xc2f70000}, {0xc2f72000}, {0xc2f74000}, {0xc2f76000}, {0xc2f78000}, {0xc2f7a000}, {0xc2f7c000}, {0xc2f7e000}, {0xc2f80000}, {0xc2f82000}, {0xc2f84000}, {0xc2f86000}, {0xc2f88000}, {0xc2f8a000}, {0xc2f8c000}, {0xc2f8e000}, {0xc2f90000}, {0xc2f92000}, {0xc2f94000}, {0xc2f96000}, {0xc2f98000}, {0xc2f9a000}, {0xc2f9c000}, {0xc2f9e000}, {0xc2fa0000}, {0xc2fa2000}, {0xc2fa4000}, {0xc2fa6000}, {0xc2fa8000}, {0xc2faa000}, {0xc2fac000}, {0xc2fae000}, {0xc2fb0000}, {0xc2fb2000}, {0xc2fb4000}, {0xc2fb6000}, {0xc2fb8000}, {0xc2fba000}, {0xc2fbc000}, {0xc2fbe000}, {0xc2fc0000}, {0xc2fc2000}, {0xc2fc4000}, {0xc2fc6000}, {0xc2fc8000}, {0xc2fca000}, {0xc2fcc000}, {0xc2fce000}, {0xc2fd0000}, {0xc2fd2000}, {0xc2fd4000}, {0xc2fd6000}, {0xc2fd8000}, {0xc2fda000}, {0xc2fdc000}, {0xc2fde000}, {0xc2fe0000}, {0xc2fe2000}, {0xc2fe4000}, {0xc2fe6000}, {0xc2fe8000}, {0xc2fea000}, {0xc2fec000}, {0xc2fee000}, {0xc2ff0000}, {0xc2ff2000}, {0xc2ff4000}, {0xc2ff6000}, {0xc2ff8000}, {0xc2ffa000}, {0xc2ffc000}, {0xc2ffe000}, {0xc3000000}, {0xc3002000}, {0xc3004000}, {0xc3006000}, {0xc3008000}, {0xc300a000}, {0xc300c000}, {0xc300e000}, {0xc3010000}, {0xc3012000}, {0xc3014000}, {0xc3016000}, {0xc3018000}, {0xc301a000}, {0xc301c000}, {0xc301e000}, {0xc3020000}, {0xc3022000}, {0xc3024000}, {0xc3026000}, {0xc3028000}, {0xc302a000}, {0xc302c000}, {0xc302e000}, {0xc3030000}, {0xc3032000}, {0xc3034000}, {0xc3036000}, {0xc3038000}, {0xc303a000}, {0xc303c000}, {0xc303e000}, {0xc3040000}, {0xc3042000}, {0xc3044000}, {0xc3046000}, {0xc3048000}, {0xc304a000}, {0xc304c000}, {0xc304e000}, {0xc3050000}, {0xc3052000}, {0xc3054000}, {0xc3056000}, {0xc3058000}, {0xc305a000}, {0xc305c000}, {0xc305e000}, {0xc3060000}, {0xc3062000}, {0xc3064000}, {0xc3066000}, {0xc3068000}, {0xc306a000}, {0xc306c000}, {0xc306e000}, {0xc3070000}, {0xc3072000}, {0xc3074000}, {0xc3076000}, {0xc3078000}, {0xc307a000}, {0xc307c000}, {0xc307e000}, {0xc3080000}, {0xc3082000}, {0xc3084000}, {0xc3086000}, {0xc3088000}, {0xc308a000}, {0xc308c000}, {0xc308e000}, {0xc3090000}, {0xc3092000}, {0xc3094000}, {0xc3096000}, {0xc3098000}, {0xc309a000}, {0xc309c000}, {0xc309e000}, {0xc30a0000}, {0xc30a2000}, {0xc30a4000}, {0xc30a6000}, {0xc30a8000}, {0xc30aa000}, {0xc30ac000}, {0xc30ae000}, {0xc30b0000}, {0xc30b2000}, {0xc30b4000}, {0xc30b6000}, {0xc30b8000}, {0xc30ba000}, {0xc30bc000}, {0xc30be000}, {0xc30c0000}, {0xc30c2000}, {0xc30c4000}, {0xc30c6000}, {0xc30c8000}, {0xc30ca000}, {0xc30cc000}, {0xc30ce000}, {0xc30d0000}, {0xc30d2000}, {0xc30d4000}, {0xc30d6000}, {0xc30d8000}, {0xc30da000}, {0xc30dc000}, {0xc30de000}, {0xc30e0000}, {0xc30e2000}, {0xc30e4000}, {0xc30e6000}, {0xc30e8000}, {0xc30ea000}, {0xc30ec000}, {0xc30ee000}, {0xc30f0000}, {0xc30f2000}, {0xc30f4000}, {0xc30f6000}, {0xc30f8000}, {0xc30fa000}, {0xc30fc000}, {0xc30fe000}, {0xc3100000}, {0xc3102000}, {0xc3104000}, {0xc3106000}, {0xc3108000}, {0xc310a000}, {0xc310c000}, {0xc310e000}, {0xc3110000}, {0xc3112000}, {0xc3114000}, {0xc3116000}, {0xc3118000}, {0xc311a000}, {0xc311c000}, {0xc311e000}, {0xc3120000}, {0xc3122000}, {0xc3124000}, {0xc3126000}, {0xc3128000}, {0xc312a000}, {0xc312c000}, {0xc312e000}, {0xc3130000}, {0xc3132000}, {0xc3134000}, {0xc3136000}, {0xc3138000}, {0xc313a000}, {0xc313c000}, {0xc313e000}, {0xc3140000}, {0xc3142000}, {0xc3144000}, {0xc3146000}, {0xc3148000}, {0xc314a000}, {0xc314c000}, {0xc314e000}, {0xc3150000}, {0xc3152000}, {0xc3154000}, {0xc3156000}, {0xc3158000}, {0xc315a000}, {0xc315c000}, {0xc315e000}, {0xc3160000}, {0xc3162000}, {0xc3164000}, {0xc3166000}, {0xc3168000}, {0xc316a000}, {0xc316c000}, {0xc316e000}, {0xc3170000}, {0xc3172000}, {0xc3174000}, {0xc3176000}, {0xc3178000}, {0xc317a000}, {0xc317c000}, {0xc317e000}, {0xc3180000}, {0xc3182000}, {0xc3184000}, {0xc3186000}, {0xc3188000}, {0xc318a000}, {0xc318c000}, {0xc318e000}, {0xc3190000}, {0xc3192000}, {0xc3194000}, {0xc3196000}, {0xc3198000}, {0xc319a000}, {0xc319c000}, {0xc319e000}, {0xc31a0000}, {0xc31a2000}, {0xc31a4000}, {0xc31a6000}, {0xc31a8000}, {0xc31aa000}, {0xc31ac000}, {0xc31ae000}, {0xc31b0000}, {0xc31b2000}, {0xc31b4000}, {0xc31b6000}, {0xc31b8000}, {0xc31ba000}, {0xc31bc000}, {0xc31be000}, {0xc31c0000}, {0xc31c2000}, {0xc31c4000}, {0xc31c6000}, {0xc31c8000}, {0xc31ca000}, {0xc31cc000}, {0xc31ce000}, {0xc31d0000}, {0xc31d2000}, {0xc31d4000}, {0xc31d6000}, {0xc31d8000}, {0xc31da000}, {0xc31dc000}, {0xc31de000}, {0xc31e0000}, {0xc31e2000}, {0xc31e4000}, {0xc31e6000}, {0xc31e8000}, {0xc31ea000}, {0xc31ec000}, {0xc31ee000}, {0xc31f0000}, {0xc31f2000}, {0xc31f4000}, {0xc31f6000}, {0xc31f8000}, {0xc31fa000}, {0xc31fc000}, {0xc31fe000}, {0xc3200000}, {0xc3202000}, {0xc3204000}, {0xc3206000}, {0xc3208000}, {0xc320a000}, {0xc320c000}, {0xc320e000}, {0xc3210000}, {0xc3212000}, {0xc3214000}, {0xc3216000}, {0xc3218000}, {0xc321a000}, {0xc321c000}, {0xc321e000}, {0xc3220000}, {0xc3222000}, {0xc3224000}, {0xc3226000}, {0xc3228000}, {0xc322a000}, {0xc322c000}, {0xc322e000}, {0xc3230000}, {0xc3232000}, {0xc3234000}, {0xc3236000}, {0xc3238000}, {0xc323a000}, {0xc323c000}, {0xc323e000}, {0xc3240000}, {0xc3242000}, {0xc3244000}, {0xc3246000}, {0xc3248000}, {0xc324a000}, {0xc324c000}, {0xc324e000}, {0xc3250000}, {0xc3252000}, {0xc3254000}, {0xc3256000}, {0xc3258000}, {0xc325a000}, {0xc325c000}, {0xc325e000}, {0xc3260000}, {0xc3262000}, {0xc3264000}, {0xc3266000}, {0xc3268000}, {0xc326a000}, {0xc326c000}, {0xc326e000}, {0xc3270000}, {0xc3272000}, {0xc3274000}, {0xc3276000}, {0xc3278000}, {0xc327a000}, {0xc327c000}, {0xc327e000}, {0xc3280000}, {0xc3282000}, {0xc3284000}, {0xc3286000}, {0xc3288000}, {0xc328a000}, {0xc328c000}, {0xc328e000}, {0xc3290000}, {0xc3292000}, {0xc3294000}, {0xc3296000}, {0xc3298000}, {0xc329a000}, {0xc329c000}, {0xc329e000}, {0xc32a0000}, {0xc32a2000}, {0xc32a4000}, {0xc32a6000}, {0xc32a8000}, {0xc32aa000}, {0xc32ac000}, {0xc32ae000}, {0xc32b0000}, {0xc32b2000}, {0xc32b4000}, {0xc32b6000}, {0xc32b8000}, {0xc32ba000}, {0xc32bc000}, {0xc32be000}, {0xc32c0000}, {0xc32c2000}, {0xc32c4000}, {0xc32c6000}, {0xc32c8000}, {0xc32ca000}, {0xc32cc000}, {0xc32ce000}, {0xc32d0000}, {0xc32d2000}, {0xc32d4000}, {0xc32d6000}, {0xc32d8000}, {0xc32da000}, {0xc32dc000}, {0xc32de000}, {0xc32e0000}, {0xc32e2000}, {0xc32e4000}, {0xc32e6000}, {0xc32e8000}, {0xc32ea000}, {0xc32ec000}, {0xc32ee000}, {0xc32f0000}, {0xc32f2000}, {0xc32f4000}, {0xc32f6000}, {0xc32f8000}, {0xc32fa000}, {0xc32fc000}, {0xc32fe000}, {0xc3300000}, {0xc3302000}, {0xc3304000}, {0xc3306000}, {0xc3308000}, {0xc330a000}, {0xc330c000}, {0xc330e000}, {0xc3310000}, {0xc3312000}, {0xc3314000}, {0xc3316000}, {0xc3318000}, {0xc331a000}, {0xc331c000}, {0xc331e000}, {0xc3320000}, {0xc3322000}, {0xc3324000}, {0xc3326000}, {0xc3328000}, {0xc332a000}, {0xc332c000}, {0xc332e000}, {0xc3330000}, {0xc3332000}, {0xc3334000}, {0xc3336000}, {0xc3338000}, {0xc333a000}, {0xc333c000}, {0xc333e000}, {0xc3340000}, {0xc3342000}, {0xc3344000}, {0xc3346000}, {0xc3348000}, {0xc334a000}, {0xc334c000}, {0xc334e000}, {0xc3350000}, {0xc3352000}, {0xc3354000}, {0xc3356000}, {0xc3358000}, {0xc335a000}, {0xc335c000}, {0xc335e000}, {0xc3360000}, {0xc3362000}, {0xc3364000}, {0xc3366000}, {0xc3368000}, {0xc336a000}, {0xc336c000}, {0xc336e000}, {0xc3370000}, {0xc3372000}, {0xc3374000}, {0xc3376000}, {0xc3378000}, {0xc337a000}, {0xc337c000}, {0xc337e000}, {0xc3380000}, {0xc3382000}, {0xc3384000}, {0xc3386000}, {0xc3388000}, {0xc338a000}, {0xc338c000}, {0xc338e000}, {0xc3390000}, {0xc3392000}, {0xc3394000}, {0xc3396000}, {0xc3398000}, {0xc339a000}, {0xc339c000}, {0xc339e000}, {0xc33a0000}, {0xc33a2000}, {0xc33a4000}, {0xc33a6000}, {0xc33a8000}, {0xc33aa000}, {0xc33ac000}, {0xc33ae000}, {0xc33b0000}, {0xc33b2000}, {0xc33b4000}, {0xc33b6000}, {0xc33b8000}, {0xc33ba000}, {0xc33bc000}, {0xc33be000}, {0xc33c0000}, {0xc33c2000}, {0xc33c4000}, {0xc33c6000}, {0xc33c8000}, {0xc33ca000}, {0xc33cc000}, {0xc33ce000}, {0xc33d0000}, {0xc33d2000}, {0xc33d4000}, {0xc33d6000}, {0xc33d8000}, {0xc33da000}, {0xc33dc000}, {0xc33de000}, {0xc33e0000}, {0xc33e2000}, {0xc33e4000}, {0xc33e6000}, {0xc33e8000}, {0xc33ea000}, {0xc33ec000}, {0xc33ee000}, {0xc33f0000}, {0xc33f2000}, {0xc33f4000}, {0xc33f6000}, {0xc33f8000}, {0xc33fa000}, {0xc33fc000}, {0xc33fe000}, {0xc3400000}, {0xc3402000}, {0xc3404000}, {0xc3406000}, {0xc3408000}, {0xc340a000}, {0xc340c000}, {0xc340e000}, {0xc3410000}, {0xc3412000}, {0xc3414000}, {0xc3416000}, {0xc3418000}, {0xc341a000}, {0xc341c000}, {0xc341e000}, {0xc3420000}, {0xc3422000}, {0xc3424000}, {0xc3426000}, {0xc3428000}, {0xc342a000}, {0xc342c000}, {0xc342e000}, {0xc3430000}, {0xc3432000}, {0xc3434000}, {0xc3436000}, {0xc3438000}, {0xc343a000}, {0xc343c000}, {0xc343e000}, {0xc3440000}, {0xc3442000}, {0xc3444000}, {0xc3446000}, {0xc3448000}, {0xc344a000}, {0xc344c000}, {0xc344e000}, {0xc3450000}, {0xc3452000}, {0xc3454000}, {0xc3456000}, {0xc3458000}, {0xc345a000}, {0xc345c000}, {0xc345e000}, {0xc3460000}, {0xc3462000}, {0xc3464000}, {0xc3466000}, {0xc3468000}, {0xc346a000}, {0xc346c000}, {0xc346e000}, {0xc3470000}, {0xc3472000}, {0xc3474000}, {0xc3476000}, {0xc3478000}, {0xc347a000}, {0xc347c000}, {0xc347e000}, {0xc3480000}, {0xc3482000}, {0xc3484000}, {0xc3486000}, {0xc3488000}, {0xc348a000}, {0xc348c000}, {0xc348e000}, {0xc3490000}, {0xc3492000}, {0xc3494000}, {0xc3496000}, {0xc3498000}, {0xc349a000}, {0xc349c000}, {0xc349e000}, {0xc34a0000}, {0xc34a2000}, {0xc34a4000}, {0xc34a6000}, {0xc34a8000}, {0xc34aa000}, {0xc34ac000}, {0xc34ae000}, {0xc34b0000}, {0xc34b2000}, {0xc34b4000}, {0xc34b6000}, {0xc34b8000}, {0xc34ba000}, {0xc34bc000}, {0xc34be000}, {0xc34c0000}, {0xc34c2000}, {0xc34c4000}, {0xc34c6000}, {0xc34c8000}, {0xc34ca000}, {0xc34cc000}, {0xc34ce000}, {0xc34d0000}, {0xc34d2000}, {0xc34d4000}, {0xc34d6000}, {0xc34d8000}, {0xc34da000}, {0xc34dc000}, {0xc34de000}, {0xc34e0000}, {0xc34e2000}, {0xc34e4000}, {0xc34e6000}, {0xc34e8000}, {0xc34ea000}, {0xc34ec000}, {0xc34ee000}, {0xc34f0000}, {0xc34f2000}, {0xc34f4000}, {0xc34f6000}, {0xc34f8000}, {0xc34fa000}, {0xc34fc000}, {0xc34fe000}, {0xc3500000}, {0xc3502000}, {0xc3504000}, {0xc3506000}, {0xc3508000}, {0xc350a000}, {0xc350c000}, {0xc350e000}, {0xc3510000}, {0xc3512000}, {0xc3514000}, {0xc3516000}, {0xc3518000}, {0xc351a000}, {0xc351c000}, {0xc351e000}, {0xc3520000}, {0xc3522000}, {0xc3524000}, {0xc3526000}, {0xc3528000}, {0xc352a000}, {0xc352c000}, {0xc352e000}, {0xc3530000}, {0xc3532000}, {0xc3534000}, {0xc3536000}, {0xc3538000}, {0xc353a000}, {0xc353c000}, {0xc353e000}, {0xc3540000}, {0xc3542000}, {0xc3544000}, {0xc3546000}, {0xc3548000}, {0xc354a000}, {0xc354c000}, {0xc354e000}, {0xc3550000}, {0xc3552000}, {0xc3554000}, {0xc3556000}, {0xc3558000}, {0xc355a000}, {0xc355c000}, {0xc355e000}, {0xc3560000}, {0xc3562000}, {0xc3564000}, {0xc3566000}, {0xc3568000}, {0xc356a000}, {0xc356c000}, {0xc356e000}, {0xc3570000}, {0xc3572000}, {0xc3574000}, {0xc3576000}, {0xc3578000}, {0xc357a000}, {0xc357c000}, {0xc357e000}, {0xc3580000}, {0xc3582000}, {0xc3584000}, {0xc3586000}, {0xc3588000}, {0xc358a000}, {0xc358c000}, {0xc358e000}, {0xc3590000}, {0xc3592000}, {0xc3594000}, {0xc3596000}, {0xc3598000}, {0xc359a000}, {0xc359c000}, {0xc359e000}, {0xc35a0000}, {0xc35a2000}, {0xc35a4000}, {0xc35a6000}, {0xc35a8000}, {0xc35aa000}, {0xc35ac000}, {0xc35ae000}, {0xc35b0000}, {0xc35b2000}, {0xc35b4000}, {0xc35b6000}, {0xc35b8000}, {0xc35ba000}, {0xc35bc000}, {0xc35be000}, {0xc35c0000}, {0xc35c2000}, {0xc35c4000}, {0xc35c6000}, {0xc35c8000}, {0xc35ca000}, {0xc35cc000}, {0xc35ce000}, {0xc35d0000}, {0xc35d2000}, {0xc35d4000}, {0xc35d6000}, {0xc35d8000}, {0xc35da000}, {0xc35dc000}, {0xc35de000}, {0xc35e0000}, {0xc35e2000}, {0xc35e4000}, {0xc35e6000}, {0xc35e8000}, {0xc35ea000}, {0xc35ec000}, {0xc35ee000}, {0xc35f0000}, {0xc35f2000}, {0xc35f4000}, {0xc35f6000}, {0xc35f8000}, {0xc35fa000}, {0xc35fc000}, {0xc35fe000}, {0xc3600000}, {0xc3602000}, {0xc3604000}, {0xc3606000}, {0xc3608000}, {0xc360a000}, {0xc360c000}, {0xc360e000}, {0xc3610000}, {0xc3612000}, {0xc3614000}, {0xc3616000}, {0xc3618000}, {0xc361a000}, {0xc361c000}, {0xc361e000}, {0xc3620000}, {0xc3622000}, {0xc3624000}, {0xc3626000}, {0xc3628000}, {0xc362a000}, {0xc362c000}, {0xc362e000}, {0xc3630000}, {0xc3632000}, {0xc3634000}, {0xc3636000}, {0xc3638000}, {0xc363a000}, {0xc363c000}, {0xc363e000}, {0xc3640000}, {0xc3642000}, {0xc3644000}, {0xc3646000}, {0xc3648000}, {0xc364a000}, {0xc364c000}, {0xc364e000}, {0xc3650000}, {0xc3652000}, {0xc3654000}, {0xc3656000}, {0xc3658000}, {0xc365a000}, {0xc365c000}, {0xc365e000}, {0xc3660000}, {0xc3662000}, {0xc3664000}, {0xc3666000}, {0xc3668000}, {0xc366a000}, {0xc366c000}, {0xc366e000}, {0xc3670000}, {0xc3672000}, {0xc3674000}, {0xc3676000}, {0xc3678000}, {0xc367a000}, {0xc367c000}, {0xc367e000}, {0xc3680000}, {0xc3682000}, {0xc3684000}, {0xc3686000}, {0xc3688000}, {0xc368a000}, {0xc368c000}, {0xc368e000}, {0xc3690000}, {0xc3692000}, {0xc3694000}, {0xc3696000}, {0xc3698000}, {0xc369a000}, {0xc369c000}, {0xc369e000}, {0xc36a0000}, {0xc36a2000}, {0xc36a4000}, {0xc36a6000}, {0xc36a8000}, {0xc36aa000}, {0xc36ac000}, {0xc36ae000}, {0xc36b0000}, {0xc36b2000}, {0xc36b4000}, {0xc36b6000}, {0xc36b8000}, {0xc36ba000}, {0xc36bc000}, {0xc36be000}, {0xc36c0000}, {0xc36c2000}, {0xc36c4000}, {0xc36c6000}, {0xc36c8000}, {0xc36ca000}, {0xc36cc000}, {0xc36ce000}, {0xc36d0000}, {0xc36d2000}, {0xc36d4000}, {0xc36d6000}, {0xc36d8000}, {0xc36da000}, {0xc36dc000}, {0xc36de000}, {0xc36e0000}, {0xc36e2000}, {0xc36e4000}, {0xc36e6000}, {0xc36e8000}, {0xc36ea000}, {0xc36ec000}, {0xc36ee000}, {0xc36f0000}, {0xc36f2000}, {0xc36f4000}, {0xc36f6000}, {0xc36f8000}, {0xc36fa000}, {0xc36fc000}, {0xc36fe000}, {0xc3700000}, {0xc3702000}, {0xc3704000}, {0xc3706000}, {0xc3708000}, {0xc370a000}, {0xc370c000}, {0xc370e000}, {0xc3710000}, {0xc3712000}, {0xc3714000}, {0xc3716000}, {0xc3718000}, {0xc371a000}, {0xc371c000}, {0xc371e000}, {0xc3720000}, {0xc3722000}, {0xc3724000}, {0xc3726000}, {0xc3728000}, {0xc372a000}, {0xc372c000}, {0xc372e000}, {0xc3730000}, {0xc3732000}, {0xc3734000}, {0xc3736000}, {0xc3738000}, {0xc373a000}, {0xc373c000}, {0xc373e000}, {0xc3740000}, {0xc3742000}, {0xc3744000}, {0xc3746000}, {0xc3748000}, {0xc374a000}, {0xc374c000}, {0xc374e000}, {0xc3750000}, {0xc3752000}, {0xc3754000}, {0xc3756000}, {0xc3758000}, {0xc375a000}, {0xc375c000}, {0xc375e000}, {0xc3760000}, {0xc3762000}, {0xc3764000}, {0xc3766000}, {0xc3768000}, {0xc376a000}, {0xc376c000}, {0xc376e000}, {0xc3770000}, {0xc3772000}, {0xc3774000}, {0xc3776000}, {0xc3778000}, {0xc377a000}, {0xc377c000}, {0xc377e000}, {0xc3780000}, {0xc3782000}, {0xc3784000}, {0xc3786000}, {0xc3788000}, {0xc378a000}, {0xc378c000}, {0xc378e000}, {0xc3790000}, {0xc3792000}, {0xc3794000}, {0xc3796000}, {0xc3798000}, {0xc379a000}, {0xc379c000}, {0xc379e000}, {0xc37a0000}, {0xc37a2000}, {0xc37a4000}, {0xc37a6000}, {0xc37a8000}, {0xc37aa000}, {0xc37ac000}, {0xc37ae000}, {0xc37b0000}, {0xc37b2000}, {0xc37b4000}, {0xc37b6000}, {0xc37b8000}, {0xc37ba000}, {0xc37bc000}, {0xc37be000}, {0xc37c0000}, {0xc37c2000}, {0xc37c4000}, {0xc37c6000}, {0xc37c8000}, {0xc37ca000}, {0xc37cc000}, {0xc37ce000}, {0xc37d0000}, {0xc37d2000}, {0xc37d4000}, {0xc37d6000}, {0xc37d8000}, {0xc37da000}, {0xc37dc000}, {0xc37de000}, {0xc37e0000}, {0xc37e2000}, {0xc37e4000}, {0xc37e6000}, {0xc37e8000}, {0xc37ea000}, {0xc37ec000}, {0xc37ee000}, {0xc37f0000}, {0xc37f2000}, {0xc37f4000}, {0xc37f6000}, {0xc37f8000}, {0xc37fa000}, {0xc37fc000}, {0xc37fe000}, {0xc3800000}, {0xc3802000}, {0xc3804000}, {0xc3806000}, {0xc3808000}, {0xc380a000}, {0xc380c000}, {0xc380e000}, {0xc3810000}, {0xc3812000}, {0xc3814000}, {0xc3816000}, {0xc3818000}, {0xc381a000}, {0xc381c000}, {0xc381e000}, {0xc3820000}, {0xc3822000}, {0xc3824000}, {0xc3826000}, {0xc3828000}, {0xc382a000}, {0xc382c000}, {0xc382e000}, {0xc3830000}, {0xc3832000}, {0xc3834000}, {0xc3836000}, {0xc3838000}, {0xc383a000}, {0xc383c000}, {0xc383e000}, {0xc3840000}, {0xc3842000}, {0xc3844000}, {0xc3846000}, {0xc3848000}, {0xc384a000}, {0xc384c000}, {0xc384e000}, {0xc3850000}, {0xc3852000}, {0xc3854000}, {0xc3856000}, {0xc3858000}, {0xc385a000}, {0xc385c000}, {0xc385e000}, {0xc3860000}, {0xc3862000}, {0xc3864000}, {0xc3866000}, {0xc3868000}, {0xc386a000}, {0xc386c000}, {0xc386e000}, {0xc3870000}, {0xc3872000}, {0xc3874000}, {0xc3876000}, {0xc3878000}, {0xc387a000}, {0xc387c000}, {0xc387e000}, {0xc3880000}, {0xc3882000}, {0xc3884000}, {0xc3886000}, {0xc3888000}, {0xc388a000}, {0xc388c000}, {0xc388e000}, {0xc3890000}, {0xc3892000}, {0xc3894000}, {0xc3896000}, {0xc3898000}, {0xc389a000}, {0xc389c000}, {0xc389e000}, {0xc38a0000}, {0xc38a2000}, {0xc38a4000}, {0xc38a6000}, {0xc38a8000}, {0xc38aa000}, {0xc38ac000}, {0xc38ae000}, {0xc38b0000}, {0xc38b2000}, {0xc38b4000}, {0xc38b6000}, {0xc38b8000}, {0xc38ba000}, {0xc38bc000}, {0xc38be000}, {0xc38c0000}, {0xc38c2000}, {0xc38c4000}, {0xc38c6000}, {0xc38c8000}, {0xc38ca000}, {0xc38cc000}, {0xc38ce000}, {0xc38d0000}, {0xc38d2000}, {0xc38d4000}, {0xc38d6000}, {0xc38d8000}, {0xc38da000}, {0xc38dc000}, {0xc38de000}, {0xc38e0000}, {0xc38e2000}, {0xc38e4000}, {0xc38e6000}, {0xc38e8000}, {0xc38ea000}, {0xc38ec000}, {0xc38ee000}, {0xc38f0000}, {0xc38f2000}, {0xc38f4000}, {0xc38f6000}, {0xc38f8000}, {0xc38fa000}, {0xc38fc000}, {0xc38fe000}, {0xc3900000}, {0xc3902000}, {0xc3904000}, {0xc3906000}, {0xc3908000}, {0xc390a000}, {0xc390c000}, {0xc390e000}, {0xc3910000}, {0xc3912000}, {0xc3914000}, {0xc3916000}, {0xc3918000}, {0xc391a000}, {0xc391c000}, {0xc391e000}, {0xc3920000}, {0xc3922000}, {0xc3924000}, {0xc3926000}, {0xc3928000}, {0xc392a000}, {0xc392c000}, {0xc392e000}, {0xc3930000}, {0xc3932000}, {0xc3934000}, {0xc3936000}, {0xc3938000}, {0xc393a000}, {0xc393c000}, {0xc393e000}, {0xc3940000}, {0xc3942000}, {0xc3944000}, {0xc3946000}, {0xc3948000}, {0xc394a000}, {0xc394c000}, {0xc394e000}, {0xc3950000}, {0xc3952000}, {0xc3954000}, {0xc3956000}, {0xc3958000}, {0xc395a000}, {0xc395c000}, {0xc395e000}, {0xc3960000}, {0xc3962000}, {0xc3964000}, {0xc3966000}, {0xc3968000}, {0xc396a000}, {0xc396c000}, {0xc396e000}, {0xc3970000}, {0xc3972000}, {0xc3974000}, {0xc3976000}, {0xc3978000}, {0xc397a000}, {0xc397c000}, {0xc397e000}, {0xc3980000}, {0xc3982000}, {0xc3984000}, {0xc3986000}, {0xc3988000}, {0xc398a000}, {0xc398c000}, {0xc398e000}, {0xc3990000}, {0xc3992000}, {0xc3994000}, {0xc3996000}, {0xc3998000}, {0xc399a000}, {0xc399c000}, {0xc399e000}, {0xc39a0000}, {0xc39a2000}, {0xc39a4000}, {0xc39a6000}, {0xc39a8000}, {0xc39aa000}, {0xc39ac000}, {0xc39ae000}, {0xc39b0000}, {0xc39b2000}, {0xc39b4000}, {0xc39b6000}, {0xc39b8000}, {0xc39ba000}, {0xc39bc000}, {0xc39be000}, {0xc39c0000}, {0xc39c2000}, {0xc39c4000}, {0xc39c6000}, {0xc39c8000}, {0xc39ca000}, {0xc39cc000}, {0xc39ce000}, {0xc39d0000}, {0xc39d2000}, {0xc39d4000}, {0xc39d6000}, {0xc39d8000}, {0xc39da000}, {0xc39dc000}, {0xc39de000}, {0xc39e0000}, {0xc39e2000}, {0xc39e4000}, {0xc39e6000}, {0xc39e8000}, {0xc39ea000}, {0xc39ec000}, {0xc39ee000}, {0xc39f0000}, {0xc39f2000}, {0xc39f4000}, {0xc39f6000}, {0xc39f8000}, {0xc39fa000}, {0xc39fc000}, {0xc39fe000}, {0xc3a00000}, {0xc3a02000}, {0xc3a04000}, {0xc3a06000}, {0xc3a08000}, {0xc3a0a000}, {0xc3a0c000}, {0xc3a0e000}, {0xc3a10000}, {0xc3a12000}, {0xc3a14000}, {0xc3a16000}, {0xc3a18000}, {0xc3a1a000}, {0xc3a1c000}, {0xc3a1e000}, {0xc3a20000}, {0xc3a22000}, {0xc3a24000}, {0xc3a26000}, {0xc3a28000}, {0xc3a2a000}, {0xc3a2c000}, {0xc3a2e000}, {0xc3a30000}, {0xc3a32000}, {0xc3a34000}, {0xc3a36000}, {0xc3a38000}, {0xc3a3a000}, {0xc3a3c000}, {0xc3a3e000}, {0xc3a40000}, {0xc3a42000}, {0xc3a44000}, {0xc3a46000}, {0xc3a48000}, {0xc3a4a000}, {0xc3a4c000}, {0xc3a4e000}, {0xc3a50000}, {0xc3a52000}, {0xc3a54000}, {0xc3a56000}, {0xc3a58000}, {0xc3a5a000}, {0xc3a5c000}, {0xc3a5e000}, {0xc3a60000}, {0xc3a62000}, {0xc3a64000}, {0xc3a66000}, {0xc3a68000}, {0xc3a6a000}, {0xc3a6c000}, {0xc3a6e000}, {0xc3a70000}, {0xc3a72000}, {0xc3a74000}, {0xc3a76000}, {0xc3a78000}, {0xc3a7a000}, {0xc3a7c000}, {0xc3a7e000}, {0xc3a80000}, {0xc3a82000}, {0xc3a84000}, {0xc3a86000}, {0xc3a88000}, {0xc3a8a000}, {0xc3a8c000}, {0xc3a8e000}, {0xc3a90000}, {0xc3a92000}, {0xc3a94000}, {0xc3a96000}, {0xc3a98000}, {0xc3a9a000}, {0xc3a9c000}, {0xc3a9e000}, {0xc3aa0000}, {0xc3aa2000}, {0xc3aa4000}, {0xc3aa6000}, {0xc3aa8000}, {0xc3aaa000}, {0xc3aac000}, {0xc3aae000}, {0xc3ab0000}, {0xc3ab2000}, {0xc3ab4000}, {0xc3ab6000}, {0xc3ab8000}, {0xc3aba000}, {0xc3abc000}, {0xc3abe000}, {0xc3ac0000}, {0xc3ac2000}, {0xc3ac4000}, {0xc3ac6000}, {0xc3ac8000}, {0xc3aca000}, {0xc3acc000}, {0xc3ace000}, {0xc3ad0000}, {0xc3ad2000}, {0xc3ad4000}, {0xc3ad6000}, {0xc3ad8000}, {0xc3ada000}, {0xc3adc000}, {0xc3ade000}, {0xc3ae0000}, {0xc3ae2000}, {0xc3ae4000}, {0xc3ae6000}, {0xc3ae8000}, {0xc3aea000}, {0xc3aec000}, {0xc3aee000}, {0xc3af0000}, {0xc3af2000}, {0xc3af4000}, {0xc3af6000}, {0xc3af8000}, {0xc3afa000}, {0xc3afc000}, {0xc3afe000}, {0xc3b00000}, {0xc3b02000}, {0xc3b04000}, {0xc3b06000}, {0xc3b08000}, {0xc3b0a000}, {0xc3b0c000}, {0xc3b0e000}, {0xc3b10000}, {0xc3b12000}, {0xc3b14000}, {0xc3b16000}, {0xc3b18000}, {0xc3b1a000}, {0xc3b1c000}, {0xc3b1e000}, {0xc3b20000}, {0xc3b22000}, {0xc3b24000}, {0xc3b26000}, {0xc3b28000}, {0xc3b2a000}, {0xc3b2c000}, {0xc3b2e000}, {0xc3b30000}, {0xc3b32000}, {0xc3b34000}, {0xc3b36000}, {0xc3b38000}, {0xc3b3a000}, {0xc3b3c000}, {0xc3b3e000}, {0xc3b40000}, {0xc3b42000}, {0xc3b44000}, {0xc3b46000}, {0xc3b48000}, {0xc3b4a000}, {0xc3b4c000}, {0xc3b4e000}, {0xc3b50000}, {0xc3b52000}, {0xc3b54000}, {0xc3b56000}, {0xc3b58000}, {0xc3b5a000}, {0xc3b5c000}, {0xc3b5e000}, {0xc3b60000}, {0xc3b62000}, {0xc3b64000}, {0xc3b66000}, {0xc3b68000}, {0xc3b6a000}, {0xc3b6c000}, {0xc3b6e000}, {0xc3b70000}, {0xc3b72000}, {0xc3b74000}, {0xc3b76000}, {0xc3b78000}, {0xc3b7a000}, {0xc3b7c000}, {0xc3b7e000}, {0xc3b80000}, {0xc3b82000}, {0xc3b84000}, {0xc3b86000}, {0xc3b88000}, {0xc3b8a000}, {0xc3b8c000}, {0xc3b8e000}, {0xc3b90000}, {0xc3b92000}, {0xc3b94000}, {0xc3b96000}, {0xc3b98000}, {0xc3b9a000}, {0xc3b9c000}, {0xc3b9e000}, {0xc3ba0000}, {0xc3ba2000}, {0xc3ba4000}, {0xc3ba6000}, {0xc3ba8000}, {0xc3baa000}, {0xc3bac000}, {0xc3bae000}, {0xc3bb0000}, {0xc3bb2000}, {0xc3bb4000}, {0xc3bb6000}, {0xc3bb8000}, {0xc3bba000}, {0xc3bbc000}, {0xc3bbe000}, {0xc3bc0000}, {0xc3bc2000}, {0xc3bc4000}, {0xc3bc6000}, {0xc3bc8000}, {0xc3bca000}, {0xc3bcc000}, {0xc3bce000}, {0xc3bd0000}, {0xc3bd2000}, {0xc3bd4000}, {0xc3bd6000}, {0xc3bd8000}, {0xc3bda000}, {0xc3bdc000}, {0xc3bde000}, {0xc3be0000}, {0xc3be2000}, {0xc3be4000}, {0xc3be6000}, {0xc3be8000}, {0xc3bea000}, {0xc3bec000}, {0xc3bee000}, {0xc3bf0000}, {0xc3bf2000}, {0xc3bf4000}, {0xc3bf6000}, {0xc3bf8000}, {0xc3bfa000}, {0xc3bfc000}, {0xc3bfe000}, {0xc3c00000}, {0xc3c02000}, {0xc3c04000}, {0xc3c06000}, {0xc3c08000}, {0xc3c0a000}, {0xc3c0c000}, {0xc3c0e000}, {0xc3c10000}, {0xc3c12000}, {0xc3c14000}, {0xc3c16000}, {0xc3c18000}, {0xc3c1a000}, {0xc3c1c000}, {0xc3c1e000}, {0xc3c20000}, {0xc3c22000}, {0xc3c24000}, {0xc3c26000}, {0xc3c28000}, {0xc3c2a000}, {0xc3c2c000}, {0xc3c2e000}, {0xc3c30000}, {0xc3c32000}, {0xc3c34000}, {0xc3c36000}, {0xc3c38000}, {0xc3c3a000}, {0xc3c3c000}, {0xc3c3e000}, {0xc3c40000}, {0xc3c42000}, {0xc3c44000}, {0xc3c46000}, {0xc3c48000}, {0xc3c4a000}, {0xc3c4c000}, {0xc3c4e000}, {0xc3c50000}, {0xc3c52000}, {0xc3c54000}, {0xc3c56000}, {0xc3c58000}, {0xc3c5a000}, {0xc3c5c000}, {0xc3c5e000}, {0xc3c60000}, {0xc3c62000}, {0xc3c64000}, {0xc3c66000}, {0xc3c68000}, {0xc3c6a000}, {0xc3c6c000}, {0xc3c6e000}, {0xc3c70000}, {0xc3c72000}, {0xc3c74000}, {0xc3c76000}, {0xc3c78000}, {0xc3c7a000}, {0xc3c7c000}, {0xc3c7e000}, {0xc3c80000}, {0xc3c82000}, {0xc3c84000}, {0xc3c86000}, {0xc3c88000}, {0xc3c8a000}, {0xc3c8c000}, {0xc3c8e000}, {0xc3c90000}, {0xc3c92000}, {0xc3c94000}, {0xc3c96000}, {0xc3c98000}, {0xc3c9a000}, {0xc3c9c000}, {0xc3c9e000}, {0xc3ca0000}, {0xc3ca2000}, {0xc3ca4000}, {0xc3ca6000}, {0xc3ca8000}, {0xc3caa000}, {0xc3cac000}, {0xc3cae000}, {0xc3cb0000}, {0xc3cb2000}, {0xc3cb4000}, {0xc3cb6000}, {0xc3cb8000}, {0xc3cba000}, {0xc3cbc000}, {0xc3cbe000}, {0xc3cc0000}, {0xc3cc2000}, {0xc3cc4000}, {0xc3cc6000}, {0xc3cc8000}, {0xc3cca000}, {0xc3ccc000}, {0xc3cce000}, {0xc3cd0000}, {0xc3cd2000}, {0xc3cd4000}, {0xc3cd6000}, {0xc3cd8000}, {0xc3cda000}, {0xc3cdc000}, {0xc3cde000}, {0xc3ce0000}, {0xc3ce2000}, {0xc3ce4000}, {0xc3ce6000}, {0xc3ce8000}, {0xc3cea000}, {0xc3cec000}, {0xc3cee000}, {0xc3cf0000}, {0xc3cf2000}, {0xc3cf4000}, {0xc3cf6000}, {0xc3cf8000}, {0xc3cfa000}, {0xc3cfc000}, {0xc3cfe000}, {0xc3d00000}, {0xc3d02000}, {0xc3d04000}, {0xc3d06000}, {0xc3d08000}, {0xc3d0a000}, {0xc3d0c000}, {0xc3d0e000}, {0xc3d10000}, {0xc3d12000}, {0xc3d14000}, {0xc3d16000}, {0xc3d18000}, {0xc3d1a000}, {0xc3d1c000}, {0xc3d1e000}, {0xc3d20000}, {0xc3d22000}, {0xc3d24000}, {0xc3d26000}, {0xc3d28000}, {0xc3d2a000}, {0xc3d2c000}, {0xc3d2e000}, {0xc3d30000}, {0xc3d32000}, {0xc3d34000}, {0xc3d36000}, {0xc3d38000}, {0xc3d3a000}, {0xc3d3c000}, {0xc3d3e000}, {0xc3d40000}, {0xc3d42000}, {0xc3d44000}, {0xc3d46000}, {0xc3d48000}, {0xc3d4a000}, {0xc3d4c000}, {0xc3d4e000}, {0xc3d50000}, {0xc3d52000}, {0xc3d54000}, {0xc3d56000}, {0xc3d58000}, {0xc3d5a000}, {0xc3d5c000}, {0xc3d5e000}, {0xc3d60000}, {0xc3d62000}, {0xc3d64000}, {0xc3d66000}, {0xc3d68000}, {0xc3d6a000}, {0xc3d6c000}, {0xc3d6e000}, {0xc3d70000}, {0xc3d72000}, {0xc3d74000}, {0xc3d76000}, {0xc3d78000}, {0xc3d7a000}, {0xc3d7c000}, {0xc3d7e000}, {0xc3d80000}, {0xc3d82000}, {0xc3d84000}, {0xc3d86000}, {0xc3d88000}, {0xc3d8a000}, {0xc3d8c000}, {0xc3d8e000}, {0xc3d90000}, {0xc3d92000}, {0xc3d94000}, {0xc3d96000}, {0xc3d98000}, {0xc3d9a000}, {0xc3d9c000}, {0xc3d9e000}, {0xc3da0000}, {0xc3da2000}, {0xc3da4000}, {0xc3da6000}, {0xc3da8000}, {0xc3daa000}, {0xc3dac000}, {0xc3dae000}, {0xc3db0000}, {0xc3db2000}, {0xc3db4000}, {0xc3db6000}, {0xc3db8000}, {0xc3dba000}, {0xc3dbc000}, {0xc3dbe000}, {0xc3dc0000}, {0xc3dc2000}, {0xc3dc4000}, {0xc3dc6000}, {0xc3dc8000}, {0xc3dca000}, {0xc3dcc000}, {0xc3dce000}, {0xc3dd0000}, {0xc3dd2000}, {0xc3dd4000}, {0xc3dd6000}, {0xc3dd8000}, {0xc3dda000}, {0xc3ddc000}, {0xc3dde000}, {0xc3de0000}, {0xc3de2000}, {0xc3de4000}, {0xc3de6000}, {0xc3de8000}, {0xc3dea000}, {0xc3dec000}, {0xc3dee000}, {0xc3df0000}, {0xc3df2000}, {0xc3df4000}, {0xc3df6000}, {0xc3df8000}, {0xc3dfa000}, {0xc3dfc000}, {0xc3dfe000}, {0xc3e00000}, {0xc3e02000}, {0xc3e04000}, {0xc3e06000}, {0xc3e08000}, {0xc3e0a000}, {0xc3e0c000}, {0xc3e0e000}, {0xc3e10000}, {0xc3e12000}, {0xc3e14000}, {0xc3e16000}, {0xc3e18000}, {0xc3e1a000}, {0xc3e1c000}, {0xc3e1e000}, {0xc3e20000}, {0xc3e22000}, {0xc3e24000}, {0xc3e26000}, {0xc3e28000}, {0xc3e2a000}, {0xc3e2c000}, {0xc3e2e000}, {0xc3e30000}, {0xc3e32000}, {0xc3e34000}, {0xc3e36000}, {0xc3e38000}, {0xc3e3a000}, {0xc3e3c000}, {0xc3e3e000}, {0xc3e40000}, {0xc3e42000}, {0xc3e44000}, {0xc3e46000}, {0xc3e48000}, {0xc3e4a000}, {0xc3e4c000}, {0xc3e4e000}, {0xc3e50000}, {0xc3e52000}, {0xc3e54000}, {0xc3e56000}, {0xc3e58000}, {0xc3e5a000}, {0xc3e5c000}, {0xc3e5e000}, {0xc3e60000}, {0xc3e62000}, {0xc3e64000}, {0xc3e66000}, {0xc3e68000}, {0xc3e6a000}, {0xc3e6c000}, {0xc3e6e000}, {0xc3e70000}, {0xc3e72000}, {0xc3e74000}, {0xc3e76000}, {0xc3e78000}, {0xc3e7a000}, {0xc3e7c000}, {0xc3e7e000}, {0xc3e80000}, {0xc3e82000}, {0xc3e84000}, {0xc3e86000}, {0xc3e88000}, {0xc3e8a000}, {0xc3e8c000}, {0xc3e8e000}, {0xc3e90000}, {0xc3e92000}, {0xc3e94000}, {0xc3e96000}, {0xc3e98000}, {0xc3e9a000}, {0xc3e9c000}, {0xc3e9e000}, {0xc3ea0000}, {0xc3ea2000}, {0xc3ea4000}, {0xc3ea6000}, {0xc3ea8000}, {0xc3eaa000}, {0xc3eac000}, {0xc3eae000}, {0xc3eb0000}, {0xc3eb2000}, {0xc3eb4000}, {0xc3eb6000}, {0xc3eb8000}, {0xc3eba000}, {0xc3ebc000}, {0xc3ebe000}, {0xc3ec0000}, {0xc3ec2000}, {0xc3ec4000}, {0xc3ec6000}, {0xc3ec8000}, {0xc3eca000}, {0xc3ecc000}, {0xc3ece000}, {0xc3ed0000}, {0xc3ed2000}, {0xc3ed4000}, {0xc3ed6000}, {0xc3ed8000}, {0xc3eda000}, {0xc3edc000}, {0xc3ede000}, {0xc3ee0000}, {0xc3ee2000}, {0xc3ee4000}, {0xc3ee6000}, {0xc3ee8000}, {0xc3eea000}, {0xc3eec000}, {0xc3eee000}, {0xc3ef0000}, {0xc3ef2000}, {0xc3ef4000}, {0xc3ef6000}, {0xc3ef8000}, {0xc3efa000}, {0xc3efc000}, {0xc3efe000}, {0xc3f00000}, {0xc3f02000}, {0xc3f04000}, {0xc3f06000}, {0xc3f08000}, {0xc3f0a000}, {0xc3f0c000}, {0xc3f0e000}, {0xc3f10000}, {0xc3f12000}, {0xc3f14000}, {0xc3f16000}, {0xc3f18000}, {0xc3f1a000}, {0xc3f1c000}, {0xc3f1e000}, {0xc3f20000}, {0xc3f22000}, {0xc3f24000}, {0xc3f26000}, {0xc3f28000}, {0xc3f2a000}, {0xc3f2c000}, {0xc3f2e000}, {0xc3f30000}, {0xc3f32000}, {0xc3f34000}, {0xc3f36000}, {0xc3f38000}, {0xc3f3a000}, {0xc3f3c000}, {0xc3f3e000}, {0xc3f40000}, {0xc3f42000}, {0xc3f44000}, {0xc3f46000}, {0xc3f48000}, {0xc3f4a000}, {0xc3f4c000}, {0xc3f4e000}, {0xc3f50000}, {0xc3f52000}, {0xc3f54000}, {0xc3f56000}, {0xc3f58000}, {0xc3f5a000}, {0xc3f5c000}, {0xc3f5e000}, {0xc3f60000}, {0xc3f62000}, {0xc3f64000}, {0xc3f66000}, {0xc3f68000}, {0xc3f6a000}, {0xc3f6c000}, {0xc3f6e000}, {0xc3f70000}, {0xc3f72000}, {0xc3f74000}, {0xc3f76000}, {0xc3f78000}, {0xc3f7a000}, {0xc3f7c000}, {0xc3f7e000}, {0xc3f80000}, {0xc3f82000}, {0xc3f84000}, {0xc3f86000}, {0xc3f88000}, {0xc3f8a000}, {0xc3f8c000}, {0xc3f8e000}, {0xc3f90000}, {0xc3f92000}, {0xc3f94000}, {0xc3f96000}, {0xc3f98000}, {0xc3f9a000}, {0xc3f9c000}, {0xc3f9e000}, {0xc3fa0000}, {0xc3fa2000}, {0xc3fa4000}, {0xc3fa6000}, {0xc3fa8000}, {0xc3faa000}, {0xc3fac000}, {0xc3fae000}, {0xc3fb0000}, {0xc3fb2000}, {0xc3fb4000}, {0xc3fb6000}, {0xc3fb8000}, {0xc3fba000}, {0xc3fbc000}, {0xc3fbe000}, {0xc3fc0000}, {0xc3fc2000}, {0xc3fc4000}, {0xc3fc6000}, {0xc3fc8000}, {0xc3fca000}, {0xc3fcc000}, {0xc3fce000}, {0xc3fd0000}, {0xc3fd2000}, {0xc3fd4000}, {0xc3fd6000}, {0xc3fd8000}, {0xc3fda000}, {0xc3fdc000}, {0xc3fde000}, {0xc3fe0000}, {0xc3fe2000}, {0xc3fe4000}, {0xc3fe6000}, {0xc3fe8000}, {0xc3fea000}, {0xc3fec000}, {0xc3fee000}, {0xc3ff0000}, {0xc3ff2000}, {0xc3ff4000}, {0xc3ff6000}, {0xc3ff8000}, {0xc3ffa000}, {0xc3ffc000}, {0xc3ffe000}, {0xc4000000}, {0xc4002000}, {0xc4004000}, {0xc4006000}, {0xc4008000}, {0xc400a000}, {0xc400c000}, {0xc400e000}, {0xc4010000}, {0xc4012000}, {0xc4014000}, {0xc4016000}, {0xc4018000}, {0xc401a000}, {0xc401c000}, {0xc401e000}, {0xc4020000}, {0xc4022000}, {0xc4024000}, {0xc4026000}, {0xc4028000}, {0xc402a000}, {0xc402c000}, {0xc402e000}, {0xc4030000}, {0xc4032000}, {0xc4034000}, {0xc4036000}, {0xc4038000}, {0xc403a000}, {0xc403c000}, {0xc403e000}, {0xc4040000}, {0xc4042000}, {0xc4044000}, {0xc4046000}, {0xc4048000}, {0xc404a000}, {0xc404c000}, {0xc404e000}, {0xc4050000}, {0xc4052000}, {0xc4054000}, {0xc4056000}, {0xc4058000}, {0xc405a000}, {0xc405c000}, {0xc405e000}, {0xc4060000}, {0xc4062000}, {0xc4064000}, {0xc4066000}, {0xc4068000}, {0xc406a000}, {0xc406c000}, {0xc406e000}, {0xc4070000}, {0xc4072000}, {0xc4074000}, {0xc4076000}, {0xc4078000}, {0xc407a000}, {0xc407c000}, {0xc407e000}, {0xc4080000}, {0xc4082000}, {0xc4084000}, {0xc4086000}, {0xc4088000}, {0xc408a000}, {0xc408c000}, {0xc408e000}, {0xc4090000}, {0xc4092000}, {0xc4094000}, {0xc4096000}, {0xc4098000}, {0xc409a000}, {0xc409c000}, {0xc409e000}, {0xc40a0000}, {0xc40a2000}, {0xc40a4000}, {0xc40a6000}, {0xc40a8000}, {0xc40aa000}, {0xc40ac000}, {0xc40ae000}, {0xc40b0000}, {0xc40b2000}, {0xc40b4000}, {0xc40b6000}, {0xc40b8000}, {0xc40ba000}, {0xc40bc000}, {0xc40be000}, {0xc40c0000}, {0xc40c2000}, {0xc40c4000}, {0xc40c6000}, {0xc40c8000}, {0xc40ca000}, {0xc40cc000}, {0xc40ce000}, {0xc40d0000}, {0xc40d2000}, {0xc40d4000}, {0xc40d6000}, {0xc40d8000}, {0xc40da000}, {0xc40dc000}, {0xc40de000}, {0xc40e0000}, {0xc40e2000}, {0xc40e4000}, {0xc40e6000}, {0xc40e8000}, {0xc40ea000}, {0xc40ec000}, {0xc40ee000}, {0xc40f0000}, {0xc40f2000}, {0xc40f4000}, {0xc40f6000}, {0xc40f8000}, {0xc40fa000}, {0xc40fc000}, {0xc40fe000}, {0xc4100000}, {0xc4102000}, {0xc4104000}, {0xc4106000}, {0xc4108000}, {0xc410a000}, {0xc410c000}, {0xc410e000}, {0xc4110000}, {0xc4112000}, {0xc4114000}, {0xc4116000}, {0xc4118000}, {0xc411a000}, {0xc411c000}, {0xc411e000}, {0xc4120000}, {0xc4122000}, {0xc4124000}, {0xc4126000}, {0xc4128000}, {0xc412a000}, {0xc412c000}, {0xc412e000}, {0xc4130000}, {0xc4132000}, {0xc4134000}, {0xc4136000}, {0xc4138000}, {0xc413a000}, {0xc413c000}, {0xc413e000}, {0xc4140000}, {0xc4142000}, {0xc4144000}, {0xc4146000}, {0xc4148000}, {0xc414a000}, {0xc414c000}, {0xc414e000}, {0xc4150000}, {0xc4152000}, {0xc4154000}, {0xc4156000}, {0xc4158000}, {0xc415a000}, {0xc415c000}, {0xc415e000}, {0xc4160000}, {0xc4162000}, {0xc4164000}, {0xc4166000}, {0xc4168000}, {0xc416a000}, {0xc416c000}, {0xc416e000}, {0xc4170000}, {0xc4172000}, {0xc4174000}, {0xc4176000}, {0xc4178000}, {0xc417a000}, {0xc417c000}, {0xc417e000}, {0xc4180000}, {0xc4182000}, {0xc4184000}, {0xc4186000}, {0xc4188000}, {0xc418a000}, {0xc418c000}, {0xc418e000}, {0xc4190000}, {0xc4192000}, {0xc4194000}, {0xc4196000}, {0xc4198000}, {0xc419a000}, {0xc419c000}, {0xc419e000}, {0xc41a0000}, {0xc41a2000}, {0xc41a4000}, {0xc41a6000}, {0xc41a8000}, {0xc41aa000}, {0xc41ac000}, {0xc41ae000}, {0xc41b0000}, {0xc41b2000}, {0xc41b4000}, {0xc41b6000}, {0xc41b8000}, {0xc41ba000}, {0xc41bc000}, {0xc41be000}, {0xc41c0000}, {0xc41c2000}, {0xc41c4000}, {0xc41c6000}, {0xc41c8000}, {0xc41ca000}, {0xc41cc000}, {0xc41ce000}, {0xc41d0000}, {0xc41d2000}, {0xc41d4000}, {0xc41d6000}, {0xc41d8000}, {0xc41da000}, {0xc41dc000}, {0xc41de000}, {0xc41e0000}, {0xc41e2000}, {0xc41e4000}, {0xc41e6000}, {0xc41e8000}, {0xc41ea000}, {0xc41ec000}, {0xc41ee000}, {0xc41f0000}, {0xc41f2000}, {0xc41f4000}, {0xc41f6000}, {0xc41f8000}, {0xc41fa000}, {0xc41fc000}, {0xc41fe000}, {0xc4200000}, {0xc4202000}, {0xc4204000}, {0xc4206000}, {0xc4208000}, {0xc420a000}, {0xc420c000}, {0xc420e000}, {0xc4210000}, {0xc4212000}, {0xc4214000}, {0xc4216000}, {0xc4218000}, {0xc421a000}, {0xc421c000}, {0xc421e000}, {0xc4220000}, {0xc4222000}, {0xc4224000}, {0xc4226000}, {0xc4228000}, {0xc422a000}, {0xc422c000}, {0xc422e000}, {0xc4230000}, {0xc4232000}, {0xc4234000}, {0xc4236000}, {0xc4238000}, {0xc423a000}, {0xc423c000}, {0xc423e000}, {0xc4240000}, {0xc4242000}, {0xc4244000}, {0xc4246000}, {0xc4248000}, {0xc424a000}, {0xc424c000}, {0xc424e000}, {0xc4250000}, {0xc4252000}, {0xc4254000}, {0xc4256000}, {0xc4258000}, {0xc425a000}, {0xc425c000}, {0xc425e000}, {0xc4260000}, {0xc4262000}, {0xc4264000}, {0xc4266000}, {0xc4268000}, {0xc426a000}, {0xc426c000}, {0xc426e000}, {0xc4270000}, {0xc4272000}, {0xc4274000}, {0xc4276000}, {0xc4278000}, {0xc427a000}, {0xc427c000}, {0xc427e000}, {0xc4280000}, {0xc4282000}, {0xc4284000}, {0xc4286000}, {0xc4288000}, {0xc428a000}, {0xc428c000}, {0xc428e000}, {0xc4290000}, {0xc4292000}, {0xc4294000}, {0xc4296000}, {0xc4298000}, {0xc429a000}, {0xc429c000}, {0xc429e000}, {0xc42a0000}, {0xc42a2000}, {0xc42a4000}, {0xc42a6000}, {0xc42a8000}, {0xc42aa000}, {0xc42ac000}, {0xc42ae000}, {0xc42b0000}, {0xc42b2000}, {0xc42b4000}, {0xc42b6000}, {0xc42b8000}, {0xc42ba000}, {0xc42bc000}, {0xc42be000}, {0xc42c0000}, {0xc42c2000}, {0xc42c4000}, {0xc42c6000}, {0xc42c8000}, {0xc42ca000}, {0xc42cc000}, {0xc42ce000}, {0xc42d0000}, {0xc42d2000}, {0xc42d4000}, {0xc42d6000}, {0xc42d8000}, {0xc42da000}, {0xc42dc000}, {0xc42de000}, {0xc42e0000}, {0xc42e2000}, {0xc42e4000}, {0xc42e6000}, {0xc42e8000}, {0xc42ea000}, {0xc42ec000}, {0xc42ee000}, {0xc42f0000}, {0xc42f2000}, {0xc42f4000}, {0xc42f6000}, {0xc42f8000}, {0xc42fa000}, {0xc42fc000}, {0xc42fe000}, {0xc4300000}, {0xc4302000}, {0xc4304000}, {0xc4306000}, {0xc4308000}, {0xc430a000}, {0xc430c000}, {0xc430e000}, {0xc4310000}, {0xc4312000}, {0xc4314000}, {0xc4316000}, {0xc4318000}, {0xc431a000}, {0xc431c000}, {0xc431e000}, {0xc4320000}, {0xc4322000}, {0xc4324000}, {0xc4326000}, {0xc4328000}, {0xc432a000}, {0xc432c000}, {0xc432e000}, {0xc4330000}, {0xc4332000}, {0xc4334000}, {0xc4336000}, {0xc4338000}, {0xc433a000}, {0xc433c000}, {0xc433e000}, {0xc4340000}, {0xc4342000}, {0xc4344000}, {0xc4346000}, {0xc4348000}, {0xc434a000}, {0xc434c000}, {0xc434e000}, {0xc4350000}, {0xc4352000}, {0xc4354000}, {0xc4356000}, {0xc4358000}, {0xc435a000}, {0xc435c000}, {0xc435e000}, {0xc4360000}, {0xc4362000}, {0xc4364000}, {0xc4366000}, {0xc4368000}, {0xc436a000}, {0xc436c000}, {0xc436e000}, {0xc4370000}, {0xc4372000}, {0xc4374000}, {0xc4376000}, {0xc4378000}, {0xc437a000}, {0xc437c000}, {0xc437e000}, {0xc4380000}, {0xc4382000}, {0xc4384000}, {0xc4386000}, {0xc4388000}, {0xc438a000}, {0xc438c000}, {0xc438e000}, {0xc4390000}, {0xc4392000}, {0xc4394000}, {0xc4396000}, {0xc4398000}, {0xc439a000}, {0xc439c000}, {0xc439e000}, {0xc43a0000}, {0xc43a2000}, {0xc43a4000}, {0xc43a6000}, {0xc43a8000}, {0xc43aa000}, {0xc43ac000}, {0xc43ae000}, {0xc43b0000}, {0xc43b2000}, {0xc43b4000}, {0xc43b6000}, {0xc43b8000}, {0xc43ba000}, {0xc43bc000}, {0xc43be000}, {0xc43c0000}, {0xc43c2000}, {0xc43c4000}, {0xc43c6000}, {0xc43c8000}, {0xc43ca000}, {0xc43cc000}, {0xc43ce000}, {0xc43d0000}, {0xc43d2000}, {0xc43d4000}, {0xc43d6000}, {0xc43d8000}, {0xc43da000}, {0xc43dc000}, {0xc43de000}, {0xc43e0000}, {0xc43e2000}, {0xc43e4000}, {0xc43e6000}, {0xc43e8000}, {0xc43ea000}, {0xc43ec000}, {0xc43ee000}, {0xc43f0000}, {0xc43f2000}, {0xc43f4000}, {0xc43f6000}, {0xc43f8000}, {0xc43fa000}, {0xc43fc000}, {0xc43fe000}, {0xc4400000}, {0xc4402000}, {0xc4404000}, {0xc4406000}, {0xc4408000}, {0xc440a000}, {0xc440c000}, {0xc440e000}, {0xc4410000}, {0xc4412000}, {0xc4414000}, {0xc4416000}, {0xc4418000}, {0xc441a000}, {0xc441c000}, {0xc441e000}, {0xc4420000}, {0xc4422000}, {0xc4424000}, {0xc4426000}, {0xc4428000}, {0xc442a000}, {0xc442c000}, {0xc442e000}, {0xc4430000}, {0xc4432000}, {0xc4434000}, {0xc4436000}, {0xc4438000}, {0xc443a000}, {0xc443c000}, {0xc443e000}, {0xc4440000}, {0xc4442000}, {0xc4444000}, {0xc4446000}, {0xc4448000}, {0xc444a000}, {0xc444c000}, {0xc444e000}, {0xc4450000}, {0xc4452000}, {0xc4454000}, {0xc4456000}, {0xc4458000}, {0xc445a000}, {0xc445c000}, {0xc445e000}, {0xc4460000}, {0xc4462000}, {0xc4464000}, {0xc4466000}, {0xc4468000}, {0xc446a000}, {0xc446c000}, {0xc446e000}, {0xc4470000}, {0xc4472000}, {0xc4474000}, {0xc4476000}, {0xc4478000}, {0xc447a000}, {0xc447c000}, {0xc447e000}, {0xc4480000}, {0xc4482000}, {0xc4484000}, {0xc4486000}, {0xc4488000}, {0xc448a000}, {0xc448c000}, {0xc448e000}, {0xc4490000}, {0xc4492000}, {0xc4494000}, {0xc4496000}, {0xc4498000}, {0xc449a000}, {0xc449c000}, {0xc449e000}, {0xc44a0000}, {0xc44a2000}, {0xc44a4000}, {0xc44a6000}, {0xc44a8000}, {0xc44aa000}, {0xc44ac000}, {0xc44ae000}, {0xc44b0000}, {0xc44b2000}, {0xc44b4000}, {0xc44b6000}, {0xc44b8000}, {0xc44ba000}, {0xc44bc000}, {0xc44be000}, {0xc44c0000}, {0xc44c2000}, {0xc44c4000}, {0xc44c6000}, {0xc44c8000}, {0xc44ca000}, {0xc44cc000}, {0xc44ce000}, {0xc44d0000}, {0xc44d2000}, {0xc44d4000}, {0xc44d6000}, {0xc44d8000}, {0xc44da000}, {0xc44dc000}, {0xc44de000}, {0xc44e0000}, {0xc44e2000}, {0xc44e4000}, {0xc44e6000}, {0xc44e8000}, {0xc44ea000}, {0xc44ec000}, {0xc44ee000}, {0xc44f0000}, {0xc44f2000}, {0xc44f4000}, {0xc44f6000}, {0xc44f8000}, {0xc44fa000}, {0xc44fc000}, {0xc44fe000}, {0xc4500000}, {0xc4502000}, {0xc4504000}, {0xc4506000}, {0xc4508000}, {0xc450a000}, {0xc450c000}, {0xc450e000}, {0xc4510000}, {0xc4512000}, {0xc4514000}, {0xc4516000}, {0xc4518000}, {0xc451a000}, {0xc451c000}, {0xc451e000}, {0xc4520000}, {0xc4522000}, {0xc4524000}, {0xc4526000}, {0xc4528000}, {0xc452a000}, {0xc452c000}, {0xc452e000}, {0xc4530000}, {0xc4532000}, {0xc4534000}, {0xc4536000}, {0xc4538000}, {0xc453a000}, {0xc453c000}, {0xc453e000}, {0xc4540000}, {0xc4542000}, {0xc4544000}, {0xc4546000}, {0xc4548000}, {0xc454a000}, {0xc454c000}, {0xc454e000}, {0xc4550000}, {0xc4552000}, {0xc4554000}, {0xc4556000}, {0xc4558000}, {0xc455a000}, {0xc455c000}, {0xc455e000}, {0xc4560000}, {0xc4562000}, {0xc4564000}, {0xc4566000}, {0xc4568000}, {0xc456a000}, {0xc456c000}, {0xc456e000}, {0xc4570000}, {0xc4572000}, {0xc4574000}, {0xc4576000}, {0xc4578000}, {0xc457a000}, {0xc457c000}, {0xc457e000}, {0xc4580000}, {0xc4582000}, {0xc4584000}, {0xc4586000}, {0xc4588000}, {0xc458a000}, {0xc458c000}, {0xc458e000}, {0xc4590000}, {0xc4592000}, {0xc4594000}, {0xc4596000}, {0xc4598000}, {0xc459a000}, {0xc459c000}, {0xc459e000}, {0xc45a0000}, {0xc45a2000}, {0xc45a4000}, {0xc45a6000}, {0xc45a8000}, {0xc45aa000}, {0xc45ac000}, {0xc45ae000}, {0xc45b0000}, {0xc45b2000}, {0xc45b4000}, {0xc45b6000}, {0xc45b8000}, {0xc45ba000}, {0xc45bc000}, {0xc45be000}, {0xc45c0000}, {0xc45c2000}, {0xc45c4000}, {0xc45c6000}, {0xc45c8000}, {0xc45ca000}, {0xc45cc000}, {0xc45ce000}, {0xc45d0000}, {0xc45d2000}, {0xc45d4000}, {0xc45d6000}, {0xc45d8000}, {0xc45da000}, {0xc45dc000}, {0xc45de000}, {0xc45e0000}, {0xc45e2000}, {0xc45e4000}, {0xc45e6000}, {0xc45e8000}, {0xc45ea000}, {0xc45ec000}, {0xc45ee000}, {0xc45f0000}, {0xc45f2000}, {0xc45f4000}, {0xc45f6000}, {0xc45f8000}, {0xc45fa000}, {0xc45fc000}, {0xc45fe000}, {0xc4600000}, {0xc4602000}, {0xc4604000}, {0xc4606000}, {0xc4608000}, {0xc460a000}, {0xc460c000}, {0xc460e000}, {0xc4610000}, {0xc4612000}, {0xc4614000}, {0xc4616000}, {0xc4618000}, {0xc461a000}, {0xc461c000}, {0xc461e000}, {0xc4620000}, {0xc4622000}, {0xc4624000}, {0xc4626000}, {0xc4628000}, {0xc462a000}, {0xc462c000}, {0xc462e000}, {0xc4630000}, {0xc4632000}, {0xc4634000}, {0xc4636000}, {0xc4638000}, {0xc463a000}, {0xc463c000}, {0xc463e000}, {0xc4640000}, {0xc4642000}, {0xc4644000}, {0xc4646000}, {0xc4648000}, {0xc464a000}, {0xc464c000}, {0xc464e000}, {0xc4650000}, {0xc4652000}, {0xc4654000}, {0xc4656000}, {0xc4658000}, {0xc465a000}, {0xc465c000}, {0xc465e000}, {0xc4660000}, {0xc4662000}, {0xc4664000}, {0xc4666000}, {0xc4668000}, {0xc466a000}, {0xc466c000}, {0xc466e000}, {0xc4670000}, {0xc4672000}, {0xc4674000}, {0xc4676000}, {0xc4678000}, {0xc467a000}, {0xc467c000}, {0xc467e000}, {0xc4680000}, {0xc4682000}, {0xc4684000}, {0xc4686000}, {0xc4688000}, {0xc468a000}, {0xc468c000}, {0xc468e000}, {0xc4690000}, {0xc4692000}, {0xc4694000}, {0xc4696000}, {0xc4698000}, {0xc469a000}, {0xc469c000}, {0xc469e000}, {0xc46a0000}, {0xc46a2000}, {0xc46a4000}, {0xc46a6000}, {0xc46a8000}, {0xc46aa000}, {0xc46ac000}, {0xc46ae000}, {0xc46b0000}, {0xc46b2000}, {0xc46b4000}, {0xc46b6000}, {0xc46b8000}, {0xc46ba000}, {0xc46bc000}, {0xc46be000}, {0xc46c0000}, {0xc46c2000}, {0xc46c4000}, {0xc46c6000}, {0xc46c8000}, {0xc46ca000}, {0xc46cc000}, {0xc46ce000}, {0xc46d0000}, {0xc46d2000}, {0xc46d4000}, {0xc46d6000}, {0xc46d8000}, {0xc46da000}, {0xc46dc000}, {0xc46de000}, {0xc46e0000}, {0xc46e2000}, {0xc46e4000}, {0xc46e6000}, {0xc46e8000}, {0xc46ea000}, {0xc46ec000}, {0xc46ee000}, {0xc46f0000}, {0xc46f2000}, {0xc46f4000}, {0xc46f6000}, {0xc46f8000}, {0xc46fa000}, {0xc46fc000}, {0xc46fe000}, {0xc4700000}, {0xc4702000}, {0xc4704000}, {0xc4706000}, {0xc4708000}, {0xc470a000}, {0xc470c000}, {0xc470e000}, {0xc4710000}, {0xc4712000}, {0xc4714000}, {0xc4716000}, {0xc4718000}, {0xc471a000}, {0xc471c000}, {0xc471e000}, {0xc4720000}, {0xc4722000}, {0xc4724000}, {0xc4726000}, {0xc4728000}, {0xc472a000}, {0xc472c000}, {0xc472e000}, {0xc4730000}, {0xc4732000}, {0xc4734000}, {0xc4736000}, {0xc4738000}, {0xc473a000}, {0xc473c000}, {0xc473e000}, {0xc4740000}, {0xc4742000}, {0xc4744000}, {0xc4746000}, {0xc4748000}, {0xc474a000}, {0xc474c000}, {0xc474e000}, {0xc4750000}, {0xc4752000}, {0xc4754000}, {0xc4756000}, {0xc4758000}, {0xc475a000}, {0xc475c000}, {0xc475e000}, {0xc4760000}, {0xc4762000}, {0xc4764000}, {0xc4766000}, {0xc4768000}, {0xc476a000}, {0xc476c000}, {0xc476e000}, {0xc4770000}, {0xc4772000}, {0xc4774000}, {0xc4776000}, {0xc4778000}, {0xc477a000}, {0xc477c000}, {0xc477e000}, {0xc4780000}, {0xc4782000}, {0xc4784000}, {0xc4786000}, {0xc4788000}, {0xc478a000}, {0xc478c000}, {0xc478e000}, {0xc4790000}, {0xc4792000}, {0xc4794000}, {0xc4796000}, {0xc4798000}, {0xc479a000}, {0xc479c000}, {0xc479e000}, {0xc47a0000}, {0xc47a2000}, {0xc47a4000}, {0xc47a6000}, {0xc47a8000}, {0xc47aa000}, {0xc47ac000}, {0xc47ae000}, {0xc47b0000}, {0xc47b2000}, {0xc47b4000}, {0xc47b6000}, {0xc47b8000}, {0xc47ba000}, {0xc47bc000}, {0xc47be000}, {0xc47c0000}, {0xc47c2000}, {0xc47c4000}, {0xc47c6000}, {0xc47c8000}, {0xc47ca000}, {0xc47cc000}, {0xc47ce000}, {0xc47d0000}, {0xc47d2000}, {0xc47d4000}, {0xc47d6000}, {0xc47d8000}, {0xc47da000}, {0xc47dc000}, {0xc47de000}, {0xc47e0000}, {0xc47e2000}, {0xc47e4000}, {0xc47e6000}, {0xc47e8000}, {0xc47ea000}, {0xc47ec000}, {0xc47ee000}, {0xc47f0000}, {0xc47f2000}, {0xc47f4000}, {0xc47f6000}, {0xc47f8000}, {0xc47fa000}, {0xc47fc000}, {0xc47fe000}, {0xc4800000}, {0xc4802000}, {0xc4804000}, {0xc4806000}, {0xc4808000}, {0xc480a000}, {0xc480c000}, {0xc480e000}, {0xc4810000}, {0xc4812000}, {0xc4814000}, {0xc4816000}, {0xc4818000}, {0xc481a000}, {0xc481c000}, {0xc481e000}, {0xc4820000}, {0xc4822000}, {0xc4824000}, {0xc4826000}, {0xc4828000}, {0xc482a000}, {0xc482c000}, {0xc482e000}, {0xc4830000}, {0xc4832000}, {0xc4834000}, {0xc4836000}, {0xc4838000}, {0xc483a000}, {0xc483c000}, {0xc483e000}, {0xc4840000}, {0xc4842000}, {0xc4844000}, {0xc4846000}, {0xc4848000}, {0xc484a000}, {0xc484c000}, {0xc484e000}, {0xc4850000}, {0xc4852000}, {0xc4854000}, {0xc4856000}, {0xc4858000}, {0xc485a000}, {0xc485c000}, {0xc485e000}, {0xc4860000}, {0xc4862000}, {0xc4864000}, {0xc4866000}, {0xc4868000}, {0xc486a000}, {0xc486c000}, {0xc486e000}, {0xc4870000}, {0xc4872000}, {0xc4874000}, {0xc4876000}, {0xc4878000}, {0xc487a000}, {0xc487c000}, {0xc487e000}, {0xc4880000}, {0xc4882000}, {0xc4884000}, {0xc4886000}, {0xc4888000}, {0xc488a000}, {0xc488c000}, {0xc488e000}, {0xc4890000}, {0xc4892000}, {0xc4894000}, {0xc4896000}, {0xc4898000}, {0xc489a000}, {0xc489c000}, {0xc489e000}, {0xc48a0000}, {0xc48a2000}, {0xc48a4000}, {0xc48a6000}, {0xc48a8000}, {0xc48aa000}, {0xc48ac000}, {0xc48ae000}, {0xc48b0000}, {0xc48b2000}, {0xc48b4000}, {0xc48b6000}, {0xc48b8000}, {0xc48ba000}, {0xc48bc000}, {0xc48be000}, {0xc48c0000}, {0xc48c2000}, {0xc48c4000}, {0xc48c6000}, {0xc48c8000}, {0xc48ca000}, {0xc48cc000}, {0xc48ce000}, {0xc48d0000}, {0xc48d2000}, {0xc48d4000}, {0xc48d6000}, {0xc48d8000}, {0xc48da000}, {0xc48dc000}, {0xc48de000}, {0xc48e0000}, {0xc48e2000}, {0xc48e4000}, {0xc48e6000}, {0xc48e8000}, {0xc48ea000}, {0xc48ec000}, {0xc48ee000}, {0xc48f0000}, {0xc48f2000}, {0xc48f4000}, {0xc48f6000}, {0xc48f8000}, {0xc48fa000}, {0xc48fc000}, {0xc48fe000}, {0xc4900000}, {0xc4902000}, {0xc4904000}, {0xc4906000}, {0xc4908000}, {0xc490a000}, {0xc490c000}, {0xc490e000}, {0xc4910000}, {0xc4912000}, {0xc4914000}, {0xc4916000}, {0xc4918000}, {0xc491a000}, {0xc491c000}, {0xc491e000}, {0xc4920000}, {0xc4922000}, {0xc4924000}, {0xc4926000}, {0xc4928000}, {0xc492a000}, {0xc492c000}, {0xc492e000}, {0xc4930000}, {0xc4932000}, {0xc4934000}, {0xc4936000}, {0xc4938000}, {0xc493a000}, {0xc493c000}, {0xc493e000}, {0xc4940000}, {0xc4942000}, {0xc4944000}, {0xc4946000}, {0xc4948000}, {0xc494a000}, {0xc494c000}, {0xc494e000}, {0xc4950000}, {0xc4952000}, {0xc4954000}, {0xc4956000}, {0xc4958000}, {0xc495a000}, {0xc495c000}, {0xc495e000}, {0xc4960000}, {0xc4962000}, {0xc4964000}, {0xc4966000}, {0xc4968000}, {0xc496a000}, {0xc496c000}, {0xc496e000}, {0xc4970000}, {0xc4972000}, {0xc4974000}, {0xc4976000}, {0xc4978000}, {0xc497a000}, {0xc497c000}, {0xc497e000}, {0xc4980000}, {0xc4982000}, {0xc4984000}, {0xc4986000}, {0xc4988000}, {0xc498a000}, {0xc498c000}, {0xc498e000}, {0xc4990000}, {0xc4992000}, {0xc4994000}, {0xc4996000}, {0xc4998000}, {0xc499a000}, {0xc499c000}, {0xc499e000}, {0xc49a0000}, {0xc49a2000}, {0xc49a4000}, {0xc49a6000}, {0xc49a8000}, {0xc49aa000}, {0xc49ac000}, {0xc49ae000}, {0xc49b0000}, {0xc49b2000}, {0xc49b4000}, {0xc49b6000}, {0xc49b8000}, {0xc49ba000}, {0xc49bc000}, {0xc49be000}, {0xc49c0000}, {0xc49c2000}, {0xc49c4000}, {0xc49c6000}, {0xc49c8000}, {0xc49ca000}, {0xc49cc000}, {0xc49ce000}, {0xc49d0000}, {0xc49d2000}, {0xc49d4000}, {0xc49d6000}, {0xc49d8000}, {0xc49da000}, {0xc49dc000}, {0xc49de000}, {0xc49e0000}, {0xc49e2000}, {0xc49e4000}, {0xc49e6000}, {0xc49e8000}, {0xc49ea000}, {0xc49ec000}, {0xc49ee000}, {0xc49f0000}, {0xc49f2000}, {0xc49f4000}, {0xc49f6000}, {0xc49f8000}, {0xc49fa000}, {0xc49fc000}, {0xc49fe000}, {0xc4a00000}, {0xc4a02000}, {0xc4a04000}, {0xc4a06000}, {0xc4a08000}, {0xc4a0a000}, {0xc4a0c000}, {0xc4a0e000}, {0xc4a10000}, {0xc4a12000}, {0xc4a14000}, {0xc4a16000}, {0xc4a18000}, {0xc4a1a000}, {0xc4a1c000}, {0xc4a1e000}, {0xc4a20000}, {0xc4a22000}, {0xc4a24000}, {0xc4a26000}, {0xc4a28000}, {0xc4a2a000}, {0xc4a2c000}, {0xc4a2e000}, {0xc4a30000}, {0xc4a32000}, {0xc4a34000}, {0xc4a36000}, {0xc4a38000}, {0xc4a3a000}, {0xc4a3c000}, {0xc4a3e000}, {0xc4a40000}, {0xc4a42000}, {0xc4a44000}, {0xc4a46000}, {0xc4a48000}, {0xc4a4a000}, {0xc4a4c000}, {0xc4a4e000}, {0xc4a50000}, {0xc4a52000}, {0xc4a54000}, {0xc4a56000}, {0xc4a58000}, {0xc4a5a000}, {0xc4a5c000}, {0xc4a5e000}, {0xc4a60000}, {0xc4a62000}, {0xc4a64000}, {0xc4a66000}, {0xc4a68000}, {0xc4a6a000}, {0xc4a6c000}, {0xc4a6e000}, {0xc4a70000}, {0xc4a72000}, {0xc4a74000}, {0xc4a76000}, {0xc4a78000}, {0xc4a7a000}, {0xc4a7c000}, {0xc4a7e000}, {0xc4a80000}, {0xc4a82000}, {0xc4a84000}, {0xc4a86000}, {0xc4a88000}, {0xc4a8a000}, {0xc4a8c000}, {0xc4a8e000}, {0xc4a90000}, {0xc4a92000}, {0xc4a94000}, {0xc4a96000}, {0xc4a98000}, {0xc4a9a000}, {0xc4a9c000}, {0xc4a9e000}, {0xc4aa0000}, {0xc4aa2000}, {0xc4aa4000}, {0xc4aa6000}, {0xc4aa8000}, {0xc4aaa000}, {0xc4aac000}, {0xc4aae000}, {0xc4ab0000}, {0xc4ab2000}, {0xc4ab4000}, {0xc4ab6000}, {0xc4ab8000}, {0xc4aba000}, {0xc4abc000}, {0xc4abe000}, {0xc4ac0000}, {0xc4ac2000}, {0xc4ac4000}, {0xc4ac6000}, {0xc4ac8000}, {0xc4aca000}, {0xc4acc000}, {0xc4ace000}, {0xc4ad0000}, {0xc4ad2000}, {0xc4ad4000}, {0xc4ad6000}, {0xc4ad8000}, {0xc4ada000}, {0xc4adc000}, {0xc4ade000}, {0xc4ae0000}, {0xc4ae2000}, {0xc4ae4000}, {0xc4ae6000}, {0xc4ae8000}, {0xc4aea000}, {0xc4aec000}, {0xc4aee000}, {0xc4af0000}, {0xc4af2000}, {0xc4af4000}, {0xc4af6000}, {0xc4af8000}, {0xc4afa000}, {0xc4afc000}, {0xc4afe000}, {0xc4b00000}, {0xc4b02000}, {0xc4b04000}, {0xc4b06000}, {0xc4b08000}, {0xc4b0a000}, {0xc4b0c000}, {0xc4b0e000}, {0xc4b10000}, {0xc4b12000}, {0xc4b14000}, {0xc4b16000}, {0xc4b18000}, {0xc4b1a000}, {0xc4b1c000}, {0xc4b1e000}, {0xc4b20000}, {0xc4b22000}, {0xc4b24000}, {0xc4b26000}, {0xc4b28000}, {0xc4b2a000}, {0xc4b2c000}, {0xc4b2e000}, {0xc4b30000}, {0xc4b32000}, {0xc4b34000}, {0xc4b36000}, {0xc4b38000}, {0xc4b3a000}, {0xc4b3c000}, {0xc4b3e000}, {0xc4b40000}, {0xc4b42000}, {0xc4b44000}, {0xc4b46000}, {0xc4b48000}, {0xc4b4a000}, {0xc4b4c000}, {0xc4b4e000}, {0xc4b50000}, {0xc4b52000}, {0xc4b54000}, {0xc4b56000}, {0xc4b58000}, {0xc4b5a000}, {0xc4b5c000}, {0xc4b5e000}, {0xc4b60000}, {0xc4b62000}, {0xc4b64000}, {0xc4b66000}, {0xc4b68000}, {0xc4b6a000}, {0xc4b6c000}, {0xc4b6e000}, {0xc4b70000}, {0xc4b72000}, {0xc4b74000}, {0xc4b76000}, {0xc4b78000}, {0xc4b7a000}, {0xc4b7c000}, {0xc4b7e000}, {0xc4b80000}, {0xc4b82000}, {0xc4b84000}, {0xc4b86000}, {0xc4b88000}, {0xc4b8a000}, {0xc4b8c000}, {0xc4b8e000}, {0xc4b90000}, {0xc4b92000}, {0xc4b94000}, {0xc4b96000}, {0xc4b98000}, {0xc4b9a000}, {0xc4b9c000}, {0xc4b9e000}, {0xc4ba0000}, {0xc4ba2000}, {0xc4ba4000}, {0xc4ba6000}, {0xc4ba8000}, {0xc4baa000}, {0xc4bac000}, {0xc4bae000}, {0xc4bb0000}, {0xc4bb2000}, {0xc4bb4000}, {0xc4bb6000}, {0xc4bb8000}, {0xc4bba000}, {0xc4bbc000}, {0xc4bbe000}, {0xc4bc0000}, {0xc4bc2000}, {0xc4bc4000}, {0xc4bc6000}, {0xc4bc8000}, {0xc4bca000}, {0xc4bcc000}, {0xc4bce000}, {0xc4bd0000}, {0xc4bd2000}, {0xc4bd4000}, {0xc4bd6000}, {0xc4bd8000}, {0xc4bda000}, {0xc4bdc000}, {0xc4bde000}, {0xc4be0000}, {0xc4be2000}, {0xc4be4000}, {0xc4be6000}, {0xc4be8000}, {0xc4bea000}, {0xc4bec000}, {0xc4bee000}, {0xc4bf0000}, {0xc4bf2000}, {0xc4bf4000}, {0xc4bf6000}, {0xc4bf8000}, {0xc4bfa000}, {0xc4bfc000}, {0xc4bfe000}, {0xc4c00000}, {0xc4c02000}, {0xc4c04000}, {0xc4c06000}, {0xc4c08000}, {0xc4c0a000}, {0xc4c0c000}, {0xc4c0e000}, {0xc4c10000}, {0xc4c12000}, {0xc4c14000}, {0xc4c16000}, {0xc4c18000}, {0xc4c1a000}, {0xc4c1c000}, {0xc4c1e000}, {0xc4c20000}, {0xc4c22000}, {0xc4c24000}, {0xc4c26000}, {0xc4c28000}, {0xc4c2a000}, {0xc4c2c000}, {0xc4c2e000}, {0xc4c30000}, {0xc4c32000}, {0xc4c34000}, {0xc4c36000}, {0xc4c38000}, {0xc4c3a000}, {0xc4c3c000}, {0xc4c3e000}, {0xc4c40000}, {0xc4c42000}, {0xc4c44000}, {0xc4c46000}, {0xc4c48000}, {0xc4c4a000}, {0xc4c4c000}, {0xc4c4e000}, {0xc4c50000}, {0xc4c52000}, {0xc4c54000}, {0xc4c56000}, {0xc4c58000}, {0xc4c5a000}, {0xc4c5c000}, {0xc4c5e000}, {0xc4c60000}, {0xc4c62000}, {0xc4c64000}, {0xc4c66000}, {0xc4c68000}, {0xc4c6a000}, {0xc4c6c000}, {0xc4c6e000}, {0xc4c70000}, {0xc4c72000}, {0xc4c74000}, {0xc4c76000}, {0xc4c78000}, {0xc4c7a000}, {0xc4c7c000}, {0xc4c7e000}, {0xc4c80000}, {0xc4c82000}, {0xc4c84000}, {0xc4c86000}, {0xc4c88000}, {0xc4c8a000}, {0xc4c8c000}, {0xc4c8e000}, {0xc4c90000}, {0xc4c92000}, {0xc4c94000}, {0xc4c96000}, {0xc4c98000}, {0xc4c9a000}, {0xc4c9c000}, {0xc4c9e000}, {0xc4ca0000}, {0xc4ca2000}, {0xc4ca4000}, {0xc4ca6000}, {0xc4ca8000}, {0xc4caa000}, {0xc4cac000}, {0xc4cae000}, {0xc4cb0000}, {0xc4cb2000}, {0xc4cb4000}, {0xc4cb6000}, {0xc4cb8000}, {0xc4cba000}, {0xc4cbc000}, {0xc4cbe000}, {0xc4cc0000}, {0xc4cc2000}, {0xc4cc4000}, {0xc4cc6000}, {0xc4cc8000}, {0xc4cca000}, {0xc4ccc000}, {0xc4cce000}, {0xc4cd0000}, {0xc4cd2000}, {0xc4cd4000}, {0xc4cd6000}, {0xc4cd8000}, {0xc4cda000}, {0xc4cdc000}, {0xc4cde000}, {0xc4ce0000}, {0xc4ce2000}, {0xc4ce4000}, {0xc4ce6000}, {0xc4ce8000}, {0xc4cea000}, {0xc4cec000}, {0xc4cee000}, {0xc4cf0000}, {0xc4cf2000}, {0xc4cf4000}, {0xc4cf6000}, {0xc4cf8000}, {0xc4cfa000}, {0xc4cfc000}, {0xc4cfe000}, {0xc4d00000}, {0xc4d02000}, {0xc4d04000}, {0xc4d06000}, {0xc4d08000}, {0xc4d0a000}, {0xc4d0c000}, {0xc4d0e000}, {0xc4d10000}, {0xc4d12000}, {0xc4d14000}, {0xc4d16000}, {0xc4d18000}, {0xc4d1a000}, {0xc4d1c000}, {0xc4d1e000}, {0xc4d20000}, {0xc4d22000}, {0xc4d24000}, {0xc4d26000}, {0xc4d28000}, {0xc4d2a000}, {0xc4d2c000}, {0xc4d2e000}, {0xc4d30000}, {0xc4d32000}, {0xc4d34000}, {0xc4d36000}, {0xc4d38000}, {0xc4d3a000}, {0xc4d3c000}, {0xc4d3e000}, {0xc4d40000}, {0xc4d42000}, {0xc4d44000}, {0xc4d46000}, {0xc4d48000}, {0xc4d4a000}, {0xc4d4c000}, {0xc4d4e000}, {0xc4d50000}, {0xc4d52000}, {0xc4d54000}, {0xc4d56000}, {0xc4d58000}, {0xc4d5a000}, {0xc4d5c000}, {0xc4d5e000}, {0xc4d60000}, {0xc4d62000}, {0xc4d64000}, {0xc4d66000}, {0xc4d68000}, {0xc4d6a000}, {0xc4d6c000}, {0xc4d6e000}, {0xc4d70000}, {0xc4d72000}, {0xc4d74000}, {0xc4d76000}, {0xc4d78000}, {0xc4d7a000}, {0xc4d7c000}, {0xc4d7e000}, {0xc4d80000}, {0xc4d82000}, {0xc4d84000}, {0xc4d86000}, {0xc4d88000}, {0xc4d8a000}, {0xc4d8c000}, {0xc4d8e000}, {0xc4d90000}, {0xc4d92000}, {0xc4d94000}, {0xc4d96000}, {0xc4d98000}, {0xc4d9a000}, {0xc4d9c000}, {0xc4d9e000}, {0xc4da0000}, {0xc4da2000}, {0xc4da4000}, {0xc4da6000}, {0xc4da8000}, {0xc4daa000}, {0xc4dac000}, {0xc4dae000}, {0xc4db0000}, {0xc4db2000}, {0xc4db4000}, {0xc4db6000}, {0xc4db8000}, {0xc4dba000}, {0xc4dbc000}, {0xc4dbe000}, {0xc4dc0000}, {0xc4dc2000}, {0xc4dc4000}, {0xc4dc6000}, {0xc4dc8000}, {0xc4dca000}, {0xc4dcc000}, {0xc4dce000}, {0xc4dd0000}, {0xc4dd2000}, {0xc4dd4000}, {0xc4dd6000}, {0xc4dd8000}, {0xc4dda000}, {0xc4ddc000}, {0xc4dde000}, {0xc4de0000}, {0xc4de2000}, {0xc4de4000}, {0xc4de6000}, {0xc4de8000}, {0xc4dea000}, {0xc4dec000}, {0xc4dee000}, {0xc4df0000}, {0xc4df2000}, {0xc4df4000}, {0xc4df6000}, {0xc4df8000}, {0xc4dfa000}, {0xc4dfc000}, {0xc4dfe000}, {0xc4e00000}, {0xc4e02000}, {0xc4e04000}, {0xc4e06000}, {0xc4e08000}, {0xc4e0a000}, {0xc4e0c000}, {0xc4e0e000}, {0xc4e10000}, {0xc4e12000}, {0xc4e14000}, {0xc4e16000}, {0xc4e18000}, {0xc4e1a000}, {0xc4e1c000}, {0xc4e1e000}, {0xc4e20000}, {0xc4e22000}, {0xc4e24000}, {0xc4e26000}, {0xc4e28000}, {0xc4e2a000}, {0xc4e2c000}, {0xc4e2e000}, {0xc4e30000}, {0xc4e32000}, {0xc4e34000}, {0xc4e36000}, {0xc4e38000}, {0xc4e3a000}, {0xc4e3c000}, {0xc4e3e000}, {0xc4e40000}, {0xc4e42000}, {0xc4e44000}, {0xc4e46000}, {0xc4e48000}, {0xc4e4a000}, {0xc4e4c000}, {0xc4e4e000}, {0xc4e50000}, {0xc4e52000}, {0xc4e54000}, {0xc4e56000}, {0xc4e58000}, {0xc4e5a000}, {0xc4e5c000}, {0xc4e5e000}, {0xc4e60000}, {0xc4e62000}, {0xc4e64000}, {0xc4e66000}, {0xc4e68000}, {0xc4e6a000}, {0xc4e6c000}, {0xc4e6e000}, {0xc4e70000}, {0xc4e72000}, {0xc4e74000}, {0xc4e76000}, {0xc4e78000}, {0xc4e7a000}, {0xc4e7c000}, {0xc4e7e000}, {0xc4e80000}, {0xc4e82000}, {0xc4e84000}, {0xc4e86000}, {0xc4e88000}, {0xc4e8a000}, {0xc4e8c000}, {0xc4e8e000}, {0xc4e90000}, {0xc4e92000}, {0xc4e94000}, {0xc4e96000}, {0xc4e98000}, {0xc4e9a000}, {0xc4e9c000}, {0xc4e9e000}, {0xc4ea0000}, {0xc4ea2000}, {0xc4ea4000}, {0xc4ea6000}, {0xc4ea8000}, {0xc4eaa000}, {0xc4eac000}, {0xc4eae000}, {0xc4eb0000}, {0xc4eb2000}, {0xc4eb4000}, {0xc4eb6000}, {0xc4eb8000}, {0xc4eba000}, {0xc4ebc000}, {0xc4ebe000}, {0xc4ec0000}, {0xc4ec2000}, {0xc4ec4000}, {0xc4ec6000}, {0xc4ec8000}, {0xc4eca000}, {0xc4ecc000}, {0xc4ece000}, {0xc4ed0000}, {0xc4ed2000}, {0xc4ed4000}, {0xc4ed6000}, {0xc4ed8000}, {0xc4eda000}, {0xc4edc000}, {0xc4ede000}, {0xc4ee0000}, {0xc4ee2000}, {0xc4ee4000}, {0xc4ee6000}, {0xc4ee8000}, {0xc4eea000}, {0xc4eec000}, {0xc4eee000}, {0xc4ef0000}, {0xc4ef2000}, {0xc4ef4000}, {0xc4ef6000}, {0xc4ef8000}, {0xc4efa000}, {0xc4efc000}, {0xc4efe000}, {0xc4f00000}, {0xc4f02000}, {0xc4f04000}, {0xc4f06000}, {0xc4f08000}, {0xc4f0a000}, {0xc4f0c000}, {0xc4f0e000}, {0xc4f10000}, {0xc4f12000}, {0xc4f14000}, {0xc4f16000}, {0xc4f18000}, {0xc4f1a000}, {0xc4f1c000}, {0xc4f1e000}, {0xc4f20000}, {0xc4f22000}, {0xc4f24000}, {0xc4f26000}, {0xc4f28000}, {0xc4f2a000}, {0xc4f2c000}, {0xc4f2e000}, {0xc4f30000}, {0xc4f32000}, {0xc4f34000}, {0xc4f36000}, {0xc4f38000}, {0xc4f3a000}, {0xc4f3c000}, {0xc4f3e000}, {0xc4f40000}, {0xc4f42000}, {0xc4f44000}, {0xc4f46000}, {0xc4f48000}, {0xc4f4a000}, {0xc4f4c000}, {0xc4f4e000}, {0xc4f50000}, {0xc4f52000}, {0xc4f54000}, {0xc4f56000}, {0xc4f58000}, {0xc4f5a000}, {0xc4f5c000}, {0xc4f5e000}, {0xc4f60000}, {0xc4f62000}, {0xc4f64000}, {0xc4f66000}, {0xc4f68000}, {0xc4f6a000}, {0xc4f6c000}, {0xc4f6e000}, {0xc4f70000}, {0xc4f72000}, {0xc4f74000}, {0xc4f76000}, {0xc4f78000}, {0xc4f7a000}, {0xc4f7c000}, {0xc4f7e000}, {0xc4f80000}, {0xc4f82000}, {0xc4f84000}, {0xc4f86000}, {0xc4f88000}, {0xc4f8a000}, {0xc4f8c000}, {0xc4f8e000}, {0xc4f90000}, {0xc4f92000}, {0xc4f94000}, {0xc4f96000}, {0xc4f98000}, {0xc4f9a000}, {0xc4f9c000}, {0xc4f9e000}, {0xc4fa0000}, {0xc4fa2000}, {0xc4fa4000}, {0xc4fa6000}, {0xc4fa8000}, {0xc4faa000}, {0xc4fac000}, {0xc4fae000}, {0xc4fb0000}, {0xc4fb2000}, {0xc4fb4000}, {0xc4fb6000}, {0xc4fb8000}, {0xc4fba000}, {0xc4fbc000}, {0xc4fbe000}, {0xc4fc0000}, {0xc4fc2000}, {0xc4fc4000}, {0xc4fc6000}, {0xc4fc8000}, {0xc4fca000}, {0xc4fcc000}, {0xc4fce000}, {0xc4fd0000}, {0xc4fd2000}, {0xc4fd4000}, {0xc4fd6000}, {0xc4fd8000}, {0xc4fda000}, {0xc4fdc000}, {0xc4fde000}, {0xc4fe0000}, {0xc4fe2000}, {0xc4fe4000}, {0xc4fe6000}, {0xc4fe8000}, {0xc4fea000}, {0xc4fec000}, {0xc4fee000}, {0xc4ff0000}, {0xc4ff2000}, {0xc4ff4000}, {0xc4ff6000}, {0xc4ff8000}, {0xc4ffa000}, {0xc4ffc000}, {0xc4ffe000}, {0xc5000000}, {0xc5002000}, {0xc5004000}, {0xc5006000}, {0xc5008000}, {0xc500a000}, {0xc500c000}, {0xc500e000}, {0xc5010000}, {0xc5012000}, {0xc5014000}, {0xc5016000}, {0xc5018000}, {0xc501a000}, {0xc501c000}, {0xc501e000}, {0xc5020000}, {0xc5022000}, {0xc5024000}, {0xc5026000}, {0xc5028000}, {0xc502a000}, {0xc502c000}, {0xc502e000}, {0xc5030000}, {0xc5032000}, {0xc5034000}, {0xc5036000}, {0xc5038000}, {0xc503a000}, {0xc503c000}, {0xc503e000}, {0xc5040000}, {0xc5042000}, {0xc5044000}, {0xc5046000}, {0xc5048000}, {0xc504a000}, {0xc504c000}, {0xc504e000}, {0xc5050000}, {0xc5052000}, {0xc5054000}, {0xc5056000}, {0xc5058000}, {0xc505a000}, {0xc505c000}, {0xc505e000}, {0xc5060000}, {0xc5062000}, {0xc5064000}, {0xc5066000}, {0xc5068000}, {0xc506a000}, {0xc506c000}, {0xc506e000}, {0xc5070000}, {0xc5072000}, {0xc5074000}, {0xc5076000}, {0xc5078000}, {0xc507a000}, {0xc507c000}, {0xc507e000}, {0xc5080000}, {0xc5082000}, {0xc5084000}, {0xc5086000}, {0xc5088000}, {0xc508a000}, {0xc508c000}, {0xc508e000}, {0xc5090000}, {0xc5092000}, {0xc5094000}, {0xc5096000}, {0xc5098000}, {0xc509a000}, {0xc509c000}, {0xc509e000}, {0xc50a0000}, {0xc50a2000}, {0xc50a4000}, {0xc50a6000}, {0xc50a8000}, {0xc50aa000}, {0xc50ac000}, {0xc50ae000}, {0xc50b0000}, {0xc50b2000}, {0xc50b4000}, {0xc50b6000}, {0xc50b8000}, {0xc50ba000}, {0xc50bc000}, {0xc50be000}, {0xc50c0000}, {0xc50c2000}, {0xc50c4000}, {0xc50c6000}, {0xc50c8000}, {0xc50ca000}, {0xc50cc000}, {0xc50ce000}, {0xc50d0000}, {0xc50d2000}, {0xc50d4000}, {0xc50d6000}, {0xc50d8000}, {0xc50da000}, {0xc50dc000}, {0xc50de000}, {0xc50e0000}, {0xc50e2000}, {0xc50e4000}, {0xc50e6000}, {0xc50e8000}, {0xc50ea000}, {0xc50ec000}, {0xc50ee000}, {0xc50f0000}, {0xc50f2000}, {0xc50f4000}, {0xc50f6000}, {0xc50f8000}, {0xc50fa000}, {0xc50fc000}, {0xc50fe000}, {0xc5100000}, {0xc5102000}, {0xc5104000}, {0xc5106000}, {0xc5108000}, {0xc510a000}, {0xc510c000}, {0xc510e000}, {0xc5110000}, {0xc5112000}, {0xc5114000}, {0xc5116000}, {0xc5118000}, {0xc511a000}, {0xc511c000}, {0xc511e000}, {0xc5120000}, {0xc5122000}, {0xc5124000}, {0xc5126000}, {0xc5128000}, {0xc512a000}, {0xc512c000}, {0xc512e000}, {0xc5130000}, {0xc5132000}, {0xc5134000}, {0xc5136000}, {0xc5138000}, {0xc513a000}, {0xc513c000}, {0xc513e000}, {0xc5140000}, {0xc5142000}, {0xc5144000}, {0xc5146000}, {0xc5148000}, {0xc514a000}, {0xc514c000}, {0xc514e000}, {0xc5150000}, {0xc5152000}, {0xc5154000}, {0xc5156000}, {0xc5158000}, {0xc515a000}, {0xc515c000}, {0xc515e000}, {0xc5160000}, {0xc5162000}, {0xc5164000}, {0xc5166000}, {0xc5168000}, {0xc516a000}, {0xc516c000}, {0xc516e000}, {0xc5170000}, {0xc5172000}, {0xc5174000}, {0xc5176000}, {0xc5178000}, {0xc517a000}, {0xc517c000}, {0xc517e000}, {0xc5180000}, {0xc5182000}, {0xc5184000}, {0xc5186000}, {0xc5188000}, {0xc518a000}, {0xc518c000}, {0xc518e000}, {0xc5190000}, {0xc5192000}, {0xc5194000}, {0xc5196000}, {0xc5198000}, {0xc519a000}, {0xc519c000}, {0xc519e000}, {0xc51a0000}, {0xc51a2000}, {0xc51a4000}, {0xc51a6000}, {0xc51a8000}, {0xc51aa000}, {0xc51ac000}, {0xc51ae000}, {0xc51b0000}, {0xc51b2000}, {0xc51b4000}, {0xc51b6000}, {0xc51b8000}, {0xc51ba000}, {0xc51bc000}, {0xc51be000}, {0xc51c0000}, {0xc51c2000}, {0xc51c4000}, {0xc51c6000}, {0xc51c8000}, {0xc51ca000}, {0xc51cc000}, {0xc51ce000}, {0xc51d0000}, {0xc51d2000}, {0xc51d4000}, {0xc51d6000}, {0xc51d8000}, {0xc51da000}, {0xc51dc000}, {0xc51de000}, {0xc51e0000}, {0xc51e2000}, {0xc51e4000}, {0xc51e6000}, {0xc51e8000}, {0xc51ea000}, {0xc51ec000}, {0xc51ee000}, {0xc51f0000}, {0xc51f2000}, {0xc51f4000}, {0xc51f6000}, {0xc51f8000}, {0xc51fa000}, {0xc51fc000}, {0xc51fe000}, {0xc5200000}, {0xc5202000}, {0xc5204000}, {0xc5206000}, {0xc5208000}, {0xc520a000}, {0xc520c000}, {0xc520e000}, {0xc5210000}, {0xc5212000}, {0xc5214000}, {0xc5216000}, {0xc5218000}, {0xc521a000}, {0xc521c000}, {0xc521e000}, {0xc5220000}, {0xc5222000}, {0xc5224000}, {0xc5226000}, {0xc5228000}, {0xc522a000}, {0xc522c000}, {0xc522e000}, {0xc5230000}, {0xc5232000}, {0xc5234000}, {0xc5236000}, {0xc5238000}, {0xc523a000}, {0xc523c000}, {0xc523e000}, {0xc5240000}, {0xc5242000}, {0xc5244000}, {0xc5246000}, {0xc5248000}, {0xc524a000}, {0xc524c000}, {0xc524e000}, {0xc5250000}, {0xc5252000}, {0xc5254000}, {0xc5256000}, {0xc5258000}, {0xc525a000}, {0xc525c000}, {0xc525e000}, {0xc5260000}, {0xc5262000}, {0xc5264000}, {0xc5266000}, {0xc5268000}, {0xc526a000}, {0xc526c000}, {0xc526e000}, {0xc5270000}, {0xc5272000}, {0xc5274000}, {0xc5276000}, {0xc5278000}, {0xc527a000}, {0xc527c000}, {0xc527e000}, {0xc5280000}, {0xc5282000}, {0xc5284000}, {0xc5286000}, {0xc5288000}, {0xc528a000}, {0xc528c000}, {0xc528e000}, {0xc5290000}, {0xc5292000}, {0xc5294000}, {0xc5296000}, {0xc5298000}, {0xc529a000}, {0xc529c000}, {0xc529e000}, {0xc52a0000}, {0xc52a2000}, {0xc52a4000}, {0xc52a6000}, {0xc52a8000}, {0xc52aa000}, {0xc52ac000}, {0xc52ae000}, {0xc52b0000}, {0xc52b2000}, {0xc52b4000}, {0xc52b6000}, {0xc52b8000}, {0xc52ba000}, {0xc52bc000}, {0xc52be000}, {0xc52c0000}, {0xc52c2000}, {0xc52c4000}, {0xc52c6000}, {0xc52c8000}, {0xc52ca000}, {0xc52cc000}, {0xc52ce000}, {0xc52d0000}, {0xc52d2000}, {0xc52d4000}, {0xc52d6000}, {0xc52d8000}, {0xc52da000}, {0xc52dc000}, {0xc52de000}, {0xc52e0000}, {0xc52e2000}, {0xc52e4000}, {0xc52e6000}, {0xc52e8000}, {0xc52ea000}, {0xc52ec000}, {0xc52ee000}, {0xc52f0000}, {0xc52f2000}, {0xc52f4000}, {0xc52f6000}, {0xc52f8000}, {0xc52fa000}, {0xc52fc000}, {0xc52fe000}, {0xc5300000}, {0xc5302000}, {0xc5304000}, {0xc5306000}, {0xc5308000}, {0xc530a000}, {0xc530c000}, {0xc530e000}, {0xc5310000}, {0xc5312000}, {0xc5314000}, {0xc5316000}, {0xc5318000}, {0xc531a000}, {0xc531c000}, {0xc531e000}, {0xc5320000}, {0xc5322000}, {0xc5324000}, {0xc5326000}, {0xc5328000}, {0xc532a000}, {0xc532c000}, {0xc532e000}, {0xc5330000}, {0xc5332000}, {0xc5334000}, {0xc5336000}, {0xc5338000}, {0xc533a000}, {0xc533c000}, {0xc533e000}, {0xc5340000}, {0xc5342000}, {0xc5344000}, {0xc5346000}, {0xc5348000}, {0xc534a000}, {0xc534c000}, {0xc534e000}, {0xc5350000}, {0xc5352000}, {0xc5354000}, {0xc5356000}, {0xc5358000}, {0xc535a000}, {0xc535c000}, {0xc535e000}, {0xc5360000}, {0xc5362000}, {0xc5364000}, {0xc5366000}, {0xc5368000}, {0xc536a000}, {0xc536c000}, {0xc536e000}, {0xc5370000}, {0xc5372000}, {0xc5374000}, {0xc5376000}, {0xc5378000}, {0xc537a000}, {0xc537c000}, {0xc537e000}, {0xc5380000}, {0xc5382000}, {0xc5384000}, {0xc5386000}, {0xc5388000}, {0xc538a000}, {0xc538c000}, {0xc538e000}, {0xc5390000}, {0xc5392000}, {0xc5394000}, {0xc5396000}, {0xc5398000}, {0xc539a000}, {0xc539c000}, {0xc539e000}, {0xc53a0000}, {0xc53a2000}, {0xc53a4000}, {0xc53a6000}, {0xc53a8000}, {0xc53aa000}, {0xc53ac000}, {0xc53ae000}, {0xc53b0000}, {0xc53b2000}, {0xc53b4000}, {0xc53b6000}, {0xc53b8000}, {0xc53ba000}, {0xc53bc000}, {0xc53be000}, {0xc53c0000}, {0xc53c2000}, {0xc53c4000}, {0xc53c6000}, {0xc53c8000}, {0xc53ca000}, {0xc53cc000}, {0xc53ce000}, {0xc53d0000}, {0xc53d2000}, {0xc53d4000}, {0xc53d6000}, {0xc53d8000}, {0xc53da000}, {0xc53dc000}, {0xc53de000}, {0xc53e0000}, {0xc53e2000}, {0xc53e4000}, {0xc53e6000}, {0xc53e8000}, {0xc53ea000}, {0xc53ec000}, {0xc53ee000}, {0xc53f0000}, {0xc53f2000}, {0xc53f4000}, {0xc53f6000}, {0xc53f8000}, {0xc53fa000}, {0xc53fc000}, {0xc53fe000}, {0xc5400000}, {0xc5402000}, {0xc5404000}, {0xc5406000}, {0xc5408000}, {0xc540a000}, {0xc540c000}, {0xc540e000}, {0xc5410000}, {0xc5412000}, {0xc5414000}, {0xc5416000}, {0xc5418000}, {0xc541a000}, {0xc541c000}, {0xc541e000}, {0xc5420000}, {0xc5422000}, {0xc5424000}, {0xc5426000}, {0xc5428000}, {0xc542a000}, {0xc542c000}, {0xc542e000}, {0xc5430000}, {0xc5432000}, {0xc5434000}, {0xc5436000}, {0xc5438000}, {0xc543a000}, {0xc543c000}, {0xc543e000}, {0xc5440000}, {0xc5442000}, {0xc5444000}, {0xc5446000}, {0xc5448000}, {0xc544a000}, {0xc544c000}, {0xc544e000}, {0xc5450000}, {0xc5452000}, {0xc5454000}, {0xc5456000}, {0xc5458000}, {0xc545a000}, {0xc545c000}, {0xc545e000}, {0xc5460000}, {0xc5462000}, {0xc5464000}, {0xc5466000}, {0xc5468000}, {0xc546a000}, {0xc546c000}, {0xc546e000}, {0xc5470000}, {0xc5472000}, {0xc5474000}, {0xc5476000}, {0xc5478000}, {0xc547a000}, {0xc547c000}, {0xc547e000}, {0xc5480000}, {0xc5482000}, {0xc5484000}, {0xc5486000}, {0xc5488000}, {0xc548a000}, {0xc548c000}, {0xc548e000}, {0xc5490000}, {0xc5492000}, {0xc5494000}, {0xc5496000}, {0xc5498000}, {0xc549a000}, {0xc549c000}, {0xc549e000}, {0xc54a0000}, {0xc54a2000}, {0xc54a4000}, {0xc54a6000}, {0xc54a8000}, {0xc54aa000}, {0xc54ac000}, {0xc54ae000}, {0xc54b0000}, {0xc54b2000}, {0xc54b4000}, {0xc54b6000}, {0xc54b8000}, {0xc54ba000}, {0xc54bc000}, {0xc54be000}, {0xc54c0000}, {0xc54c2000}, {0xc54c4000}, {0xc54c6000}, {0xc54c8000}, {0xc54ca000}, {0xc54cc000}, {0xc54ce000}, {0xc54d0000}, {0xc54d2000}, {0xc54d4000}, {0xc54d6000}, {0xc54d8000}, {0xc54da000}, {0xc54dc000}, {0xc54de000}, {0xc54e0000}, {0xc54e2000}, {0xc54e4000}, {0xc54e6000}, {0xc54e8000}, {0xc54ea000}, {0xc54ec000}, {0xc54ee000}, {0xc54f0000}, {0xc54f2000}, {0xc54f4000}, {0xc54f6000}, {0xc54f8000}, {0xc54fa000}, {0xc54fc000}, {0xc54fe000}, {0xc5500000}, {0xc5502000}, {0xc5504000}, {0xc5506000}, {0xc5508000}, {0xc550a000}, {0xc550c000}, {0xc550e000}, {0xc5510000}, {0xc5512000}, {0xc5514000}, {0xc5516000}, {0xc5518000}, {0xc551a000}, {0xc551c000}, {0xc551e000}, {0xc5520000}, {0xc5522000}, {0xc5524000}, {0xc5526000}, {0xc5528000}, {0xc552a000}, {0xc552c000}, {0xc552e000}, {0xc5530000}, {0xc5532000}, {0xc5534000}, {0xc5536000}, {0xc5538000}, {0xc553a000}, {0xc553c000}, {0xc553e000}, {0xc5540000}, {0xc5542000}, {0xc5544000}, {0xc5546000}, {0xc5548000}, {0xc554a000}, {0xc554c000}, {0xc554e000}, {0xc5550000}, {0xc5552000}, {0xc5554000}, {0xc5556000}, {0xc5558000}, {0xc555a000}, {0xc555c000}, {0xc555e000}, {0xc5560000}, {0xc5562000}, {0xc5564000}, {0xc5566000}, {0xc5568000}, {0xc556a000}, {0xc556c000}, {0xc556e000}, {0xc5570000}, {0xc5572000}, {0xc5574000}, {0xc5576000}, {0xc5578000}, {0xc557a000}, {0xc557c000}, {0xc557e000}, {0xc5580000}, {0xc5582000}, {0xc5584000}, {0xc5586000}, {0xc5588000}, {0xc558a000}, {0xc558c000}, {0xc558e000}, {0xc5590000}, {0xc5592000}, {0xc5594000}, {0xc5596000}, {0xc5598000}, {0xc559a000}, {0xc559c000}, {0xc559e000}, {0xc55a0000}, {0xc55a2000}, {0xc55a4000}, {0xc55a6000}, {0xc55a8000}, {0xc55aa000}, {0xc55ac000}, {0xc55ae000}, {0xc55b0000}, {0xc55b2000}, {0xc55b4000}, {0xc55b6000}, {0xc55b8000}, {0xc55ba000}, {0xc55bc000}, {0xc55be000}, {0xc55c0000}, {0xc55c2000}, {0xc55c4000}, {0xc55c6000}, {0xc55c8000}, {0xc55ca000}, {0xc55cc000}, {0xc55ce000}, {0xc55d0000}, {0xc55d2000}, {0xc55d4000}, {0xc55d6000}, {0xc55d8000}, {0xc55da000}, {0xc55dc000}, {0xc55de000}, {0xc55e0000}, {0xc55e2000}, {0xc55e4000}, {0xc55e6000}, {0xc55e8000}, {0xc55ea000}, {0xc55ec000}, {0xc55ee000}, {0xc55f0000}, {0xc55f2000}, {0xc55f4000}, {0xc55f6000}, {0xc55f8000}, {0xc55fa000}, {0xc55fc000}, {0xc55fe000}, {0xc5600000}, {0xc5602000}, {0xc5604000}, {0xc5606000}, {0xc5608000}, {0xc560a000}, {0xc560c000}, {0xc560e000}, {0xc5610000}, {0xc5612000}, {0xc5614000}, {0xc5616000}, {0xc5618000}, {0xc561a000}, {0xc561c000}, {0xc561e000}, {0xc5620000}, {0xc5622000}, {0xc5624000}, {0xc5626000}, {0xc5628000}, {0xc562a000}, {0xc562c000}, {0xc562e000}, {0xc5630000}, {0xc5632000}, {0xc5634000}, {0xc5636000}, {0xc5638000}, {0xc563a000}, {0xc563c000}, {0xc563e000}, {0xc5640000}, {0xc5642000}, {0xc5644000}, {0xc5646000}, {0xc5648000}, {0xc564a000}, {0xc564c000}, {0xc564e000}, {0xc5650000}, {0xc5652000}, {0xc5654000}, {0xc5656000}, {0xc5658000}, {0xc565a000}, {0xc565c000}, {0xc565e000}, {0xc5660000}, {0xc5662000}, {0xc5664000}, {0xc5666000}, {0xc5668000}, {0xc566a000}, {0xc566c000}, {0xc566e000}, {0xc5670000}, {0xc5672000}, {0xc5674000}, {0xc5676000}, {0xc5678000}, {0xc567a000}, {0xc567c000}, {0xc567e000}, {0xc5680000}, {0xc5682000}, {0xc5684000}, {0xc5686000}, {0xc5688000}, {0xc568a000}, {0xc568c000}, {0xc568e000}, {0xc5690000}, {0xc5692000}, {0xc5694000}, {0xc5696000}, {0xc5698000}, {0xc569a000}, {0xc569c000}, {0xc569e000}, {0xc56a0000}, {0xc56a2000}, {0xc56a4000}, {0xc56a6000}, {0xc56a8000}, {0xc56aa000}, {0xc56ac000}, {0xc56ae000}, {0xc56b0000}, {0xc56b2000}, {0xc56b4000}, {0xc56b6000}, {0xc56b8000}, {0xc56ba000}, {0xc56bc000}, {0xc56be000}, {0xc56c0000}, {0xc56c2000}, {0xc56c4000}, {0xc56c6000}, {0xc56c8000}, {0xc56ca000}, {0xc56cc000}, {0xc56ce000}, {0xc56d0000}, {0xc56d2000}, {0xc56d4000}, {0xc56d6000}, {0xc56d8000}, {0xc56da000}, {0xc56dc000}, {0xc56de000}, {0xc56e0000}, {0xc56e2000}, {0xc56e4000}, {0xc56e6000}, {0xc56e8000}, {0xc56ea000}, {0xc56ec000}, {0xc56ee000}, {0xc56f0000}, {0xc56f2000}, {0xc56f4000}, {0xc56f6000}, {0xc56f8000}, {0xc56fa000}, {0xc56fc000}, {0xc56fe000}, {0xc5700000}, {0xc5702000}, {0xc5704000}, {0xc5706000}, {0xc5708000}, {0xc570a000}, {0xc570c000}, {0xc570e000}, {0xc5710000}, {0xc5712000}, {0xc5714000}, {0xc5716000}, {0xc5718000}, {0xc571a000}, {0xc571c000}, {0xc571e000}, {0xc5720000}, {0xc5722000}, {0xc5724000}, {0xc5726000}, {0xc5728000}, {0xc572a000}, {0xc572c000}, {0xc572e000}, {0xc5730000}, {0xc5732000}, {0xc5734000}, {0xc5736000}, {0xc5738000}, {0xc573a000}, {0xc573c000}, {0xc573e000}, {0xc5740000}, {0xc5742000}, {0xc5744000}, {0xc5746000}, {0xc5748000}, {0xc574a000}, {0xc574c000}, {0xc574e000}, {0xc5750000}, {0xc5752000}, {0xc5754000}, {0xc5756000}, {0xc5758000}, {0xc575a000}, {0xc575c000}, {0xc575e000}, {0xc5760000}, {0xc5762000}, {0xc5764000}, {0xc5766000}, {0xc5768000}, {0xc576a000}, {0xc576c000}, {0xc576e000}, {0xc5770000}, {0xc5772000}, {0xc5774000}, {0xc5776000}, {0xc5778000}, {0xc577a000}, {0xc577c000}, {0xc577e000}, {0xc5780000}, {0xc5782000}, {0xc5784000}, {0xc5786000}, {0xc5788000}, {0xc578a000}, {0xc578c000}, {0xc578e000}, {0xc5790000}, {0xc5792000}, {0xc5794000}, {0xc5796000}, {0xc5798000}, {0xc579a000}, {0xc579c000}, {0xc579e000}, {0xc57a0000}, {0xc57a2000}, {0xc57a4000}, {0xc57a6000}, {0xc57a8000}, {0xc57aa000}, {0xc57ac000}, {0xc57ae000}, {0xc57b0000}, {0xc57b2000}, {0xc57b4000}, {0xc57b6000}, {0xc57b8000}, {0xc57ba000}, {0xc57bc000}, {0xc57be000}, {0xc57c0000}, {0xc57c2000}, {0xc57c4000}, {0xc57c6000}, {0xc57c8000}, {0xc57ca000}, {0xc57cc000}, {0xc57ce000}, {0xc57d0000}, {0xc57d2000}, {0xc57d4000}, {0xc57d6000}, {0xc57d8000}, {0xc57da000}, {0xc57dc000}, {0xc57de000}, {0xc57e0000}, {0xc57e2000}, {0xc57e4000}, {0xc57e6000}, {0xc57e8000}, {0xc57ea000}, {0xc57ec000}, {0xc57ee000}, {0xc57f0000}, {0xc57f2000}, {0xc57f4000}, {0xc57f6000}, {0xc57f8000}, {0xc57fa000}, {0xc57fc000}, {0xc57fe000}, {0xc5800000}, {0xc5802000}, {0xc5804000}, {0xc5806000}, {0xc5808000}, {0xc580a000}, {0xc580c000}, {0xc580e000}, {0xc5810000}, {0xc5812000}, {0xc5814000}, {0xc5816000}, {0xc5818000}, {0xc581a000}, {0xc581c000}, {0xc581e000}, {0xc5820000}, {0xc5822000}, {0xc5824000}, {0xc5826000}, {0xc5828000}, {0xc582a000}, {0xc582c000}, {0xc582e000}, {0xc5830000}, {0xc5832000}, {0xc5834000}, {0xc5836000}, {0xc5838000}, {0xc583a000}, {0xc583c000}, {0xc583e000}, {0xc5840000}, {0xc5842000}, {0xc5844000}, {0xc5846000}, {0xc5848000}, {0xc584a000}, {0xc584c000}, {0xc584e000}, {0xc5850000}, {0xc5852000}, {0xc5854000}, {0xc5856000}, {0xc5858000}, {0xc585a000}, {0xc585c000}, {0xc585e000}, {0xc5860000}, {0xc5862000}, {0xc5864000}, {0xc5866000}, {0xc5868000}, {0xc586a000}, {0xc586c000}, {0xc586e000}, {0xc5870000}, {0xc5872000}, {0xc5874000}, {0xc5876000}, {0xc5878000}, {0xc587a000}, {0xc587c000}, {0xc587e000}, {0xc5880000}, {0xc5882000}, {0xc5884000}, {0xc5886000}, {0xc5888000}, {0xc588a000}, {0xc588c000}, {0xc588e000}, {0xc5890000}, {0xc5892000}, {0xc5894000}, {0xc5896000}, {0xc5898000}, {0xc589a000}, {0xc589c000}, {0xc589e000}, {0xc58a0000}, {0xc58a2000}, {0xc58a4000}, {0xc58a6000}, {0xc58a8000}, {0xc58aa000}, {0xc58ac000}, {0xc58ae000}, {0xc58b0000}, {0xc58b2000}, {0xc58b4000}, {0xc58b6000}, {0xc58b8000}, {0xc58ba000}, {0xc58bc000}, {0xc58be000}, {0xc58c0000}, {0xc58c2000}, {0xc58c4000}, {0xc58c6000}, {0xc58c8000}, {0xc58ca000}, {0xc58cc000}, {0xc58ce000}, {0xc58d0000}, {0xc58d2000}, {0xc58d4000}, {0xc58d6000}, {0xc58d8000}, {0xc58da000}, {0xc58dc000}, {0xc58de000}, {0xc58e0000}, {0xc58e2000}, {0xc58e4000}, {0xc58e6000}, {0xc58e8000}, {0xc58ea000}, {0xc58ec000}, {0xc58ee000}, {0xc58f0000}, {0xc58f2000}, {0xc58f4000}, {0xc58f6000}, {0xc58f8000}, {0xc58fa000}, {0xc58fc000}, {0xc58fe000}, {0xc5900000}, {0xc5902000}, {0xc5904000}, {0xc5906000}, {0xc5908000}, {0xc590a000}, {0xc590c000}, {0xc590e000}, {0xc5910000}, {0xc5912000}, {0xc5914000}, {0xc5916000}, {0xc5918000}, {0xc591a000}, {0xc591c000}, {0xc591e000}, {0xc5920000}, {0xc5922000}, {0xc5924000}, {0xc5926000}, {0xc5928000}, {0xc592a000}, {0xc592c000}, {0xc592e000}, {0xc5930000}, {0xc5932000}, {0xc5934000}, {0xc5936000}, {0xc5938000}, {0xc593a000}, {0xc593c000}, {0xc593e000}, {0xc5940000}, {0xc5942000}, {0xc5944000}, {0xc5946000}, {0xc5948000}, {0xc594a000}, {0xc594c000}, {0xc594e000}, {0xc5950000}, {0xc5952000}, {0xc5954000}, {0xc5956000}, {0xc5958000}, {0xc595a000}, {0xc595c000}, {0xc595e000}, {0xc5960000}, {0xc5962000}, {0xc5964000}, {0xc5966000}, {0xc5968000}, {0xc596a000}, {0xc596c000}, {0xc596e000}, {0xc5970000}, {0xc5972000}, {0xc5974000}, {0xc5976000}, {0xc5978000}, {0xc597a000}, {0xc597c000}, {0xc597e000}, {0xc5980000}, {0xc5982000}, {0xc5984000}, {0xc5986000}, {0xc5988000}, {0xc598a000}, {0xc598c000}, {0xc598e000}, {0xc5990000}, {0xc5992000}, {0xc5994000}, {0xc5996000}, {0xc5998000}, {0xc599a000}, {0xc599c000}, {0xc599e000}, {0xc59a0000}, {0xc59a2000}, {0xc59a4000}, {0xc59a6000}, {0xc59a8000}, {0xc59aa000}, {0xc59ac000}, {0xc59ae000}, {0xc59b0000}, {0xc59b2000}, {0xc59b4000}, {0xc59b6000}, {0xc59b8000}, {0xc59ba000}, {0xc59bc000}, {0xc59be000}, {0xc59c0000}, {0xc59c2000}, {0xc59c4000}, {0xc59c6000}, {0xc59c8000}, {0xc59ca000}, {0xc59cc000}, {0xc59ce000}, {0xc59d0000}, {0xc59d2000}, {0xc59d4000}, {0xc59d6000}, {0xc59d8000}, {0xc59da000}, {0xc59dc000}, {0xc59de000}, {0xc59e0000}, {0xc59e2000}, {0xc59e4000}, {0xc59e6000}, {0xc59e8000}, {0xc59ea000}, {0xc59ec000}, {0xc59ee000}, {0xc59f0000}, {0xc59f2000}, {0xc59f4000}, {0xc59f6000}, {0xc59f8000}, {0xc59fa000}, {0xc59fc000}, {0xc59fe000}, {0xc5a00000}, {0xc5a02000}, {0xc5a04000}, {0xc5a06000}, {0xc5a08000}, {0xc5a0a000}, {0xc5a0c000}, {0xc5a0e000}, {0xc5a10000}, {0xc5a12000}, {0xc5a14000}, {0xc5a16000}, {0xc5a18000}, {0xc5a1a000}, {0xc5a1c000}, {0xc5a1e000}, {0xc5a20000}, {0xc5a22000}, {0xc5a24000}, {0xc5a26000}, {0xc5a28000}, {0xc5a2a000}, {0xc5a2c000}, {0xc5a2e000}, {0xc5a30000}, {0xc5a32000}, {0xc5a34000}, {0xc5a36000}, {0xc5a38000}, {0xc5a3a000}, {0xc5a3c000}, {0xc5a3e000}, {0xc5a40000}, {0xc5a42000}, {0xc5a44000}, {0xc5a46000}, {0xc5a48000}, {0xc5a4a000}, {0xc5a4c000}, {0xc5a4e000}, {0xc5a50000}, {0xc5a52000}, {0xc5a54000}, {0xc5a56000}, {0xc5a58000}, {0xc5a5a000}, {0xc5a5c000}, {0xc5a5e000}, {0xc5a60000}, {0xc5a62000}, {0xc5a64000}, {0xc5a66000}, {0xc5a68000}, {0xc5a6a000}, {0xc5a6c000}, {0xc5a6e000}, {0xc5a70000}, {0xc5a72000}, {0xc5a74000}, {0xc5a76000}, {0xc5a78000}, {0xc5a7a000}, {0xc5a7c000}, {0xc5a7e000}, {0xc5a80000}, {0xc5a82000}, {0xc5a84000}, {0xc5a86000}, {0xc5a88000}, {0xc5a8a000}, {0xc5a8c000}, {0xc5a8e000}, {0xc5a90000}, {0xc5a92000}, {0xc5a94000}, {0xc5a96000}, {0xc5a98000}, {0xc5a9a000}, {0xc5a9c000}, {0xc5a9e000}, {0xc5aa0000}, {0xc5aa2000}, {0xc5aa4000}, {0xc5aa6000}, {0xc5aa8000}, {0xc5aaa000}, {0xc5aac000}, {0xc5aae000}, {0xc5ab0000}, {0xc5ab2000}, {0xc5ab4000}, {0xc5ab6000}, {0xc5ab8000}, {0xc5aba000}, {0xc5abc000}, {0xc5abe000}, {0xc5ac0000}, {0xc5ac2000}, {0xc5ac4000}, {0xc5ac6000}, {0xc5ac8000}, {0xc5aca000}, {0xc5acc000}, {0xc5ace000}, {0xc5ad0000}, {0xc5ad2000}, {0xc5ad4000}, {0xc5ad6000}, {0xc5ad8000}, {0xc5ada000}, {0xc5adc000}, {0xc5ade000}, {0xc5ae0000}, {0xc5ae2000}, {0xc5ae4000}, {0xc5ae6000}, {0xc5ae8000}, {0xc5aea000}, {0xc5aec000}, {0xc5aee000}, {0xc5af0000}, {0xc5af2000}, {0xc5af4000}, {0xc5af6000}, {0xc5af8000}, {0xc5afa000}, {0xc5afc000}, {0xc5afe000}, {0xc5b00000}, {0xc5b02000}, {0xc5b04000}, {0xc5b06000}, {0xc5b08000}, {0xc5b0a000}, {0xc5b0c000}, {0xc5b0e000}, {0xc5b10000}, {0xc5b12000}, {0xc5b14000}, {0xc5b16000}, {0xc5b18000}, {0xc5b1a000}, {0xc5b1c000}, {0xc5b1e000}, {0xc5b20000}, {0xc5b22000}, {0xc5b24000}, {0xc5b26000}, {0xc5b28000}, {0xc5b2a000}, {0xc5b2c000}, {0xc5b2e000}, {0xc5b30000}, {0xc5b32000}, {0xc5b34000}, {0xc5b36000}, {0xc5b38000}, {0xc5b3a000}, {0xc5b3c000}, {0xc5b3e000}, {0xc5b40000}, {0xc5b42000}, {0xc5b44000}, {0xc5b46000}, {0xc5b48000}, {0xc5b4a000}, {0xc5b4c000}, {0xc5b4e000}, {0xc5b50000}, {0xc5b52000}, {0xc5b54000}, {0xc5b56000}, {0xc5b58000}, {0xc5b5a000}, {0xc5b5c000}, {0xc5b5e000}, {0xc5b60000}, {0xc5b62000}, {0xc5b64000}, {0xc5b66000}, {0xc5b68000}, {0xc5b6a000}, {0xc5b6c000}, {0xc5b6e000}, {0xc5b70000}, {0xc5b72000}, {0xc5b74000}, {0xc5b76000}, {0xc5b78000}, {0xc5b7a000}, {0xc5b7c000}, {0xc5b7e000}, {0xc5b80000}, {0xc5b82000}, {0xc5b84000}, {0xc5b86000}, {0xc5b88000}, {0xc5b8a000}, {0xc5b8c000}, {0xc5b8e000}, {0xc5b90000}, {0xc5b92000}, {0xc5b94000}, {0xc5b96000}, {0xc5b98000}, {0xc5b9a000}, {0xc5b9c000}, {0xc5b9e000}, {0xc5ba0000}, {0xc5ba2000}, {0xc5ba4000}, {0xc5ba6000}, {0xc5ba8000}, {0xc5baa000}, {0xc5bac000}, {0xc5bae000}, {0xc5bb0000}, {0xc5bb2000}, {0xc5bb4000}, {0xc5bb6000}, {0xc5bb8000}, {0xc5bba000}, {0xc5bbc000}, {0xc5bbe000}, {0xc5bc0000}, {0xc5bc2000}, {0xc5bc4000}, {0xc5bc6000}, {0xc5bc8000}, {0xc5bca000}, {0xc5bcc000}, {0xc5bce000}, {0xc5bd0000}, {0xc5bd2000}, {0xc5bd4000}, {0xc5bd6000}, {0xc5bd8000}, {0xc5bda000}, {0xc5bdc000}, {0xc5bde000}, {0xc5be0000}, {0xc5be2000}, {0xc5be4000}, {0xc5be6000}, {0xc5be8000}, {0xc5bea000}, {0xc5bec000}, {0xc5bee000}, {0xc5bf0000}, {0xc5bf2000}, {0xc5bf4000}, {0xc5bf6000}, {0xc5bf8000}, {0xc5bfa000}, {0xc5bfc000}, {0xc5bfe000}, {0xc5c00000}, {0xc5c02000}, {0xc5c04000}, {0xc5c06000}, {0xc5c08000}, {0xc5c0a000}, {0xc5c0c000}, {0xc5c0e000}, {0xc5c10000}, {0xc5c12000}, {0xc5c14000}, {0xc5c16000}, {0xc5c18000}, {0xc5c1a000}, {0xc5c1c000}, {0xc5c1e000}, {0xc5c20000}, {0xc5c22000}, {0xc5c24000}, {0xc5c26000}, {0xc5c28000}, {0xc5c2a000}, {0xc5c2c000}, {0xc5c2e000}, {0xc5c30000}, {0xc5c32000}, {0xc5c34000}, {0xc5c36000}, {0xc5c38000}, {0xc5c3a000}, {0xc5c3c000}, {0xc5c3e000}, {0xc5c40000}, {0xc5c42000}, {0xc5c44000}, {0xc5c46000}, {0xc5c48000}, {0xc5c4a000}, {0xc5c4c000}, {0xc5c4e000}, {0xc5c50000}, {0xc5c52000}, {0xc5c54000}, {0xc5c56000}, {0xc5c58000}, {0xc5c5a000}, {0xc5c5c000}, {0xc5c5e000}, {0xc5c60000}, {0xc5c62000}, {0xc5c64000}, {0xc5c66000}, {0xc5c68000}, {0xc5c6a000}, {0xc5c6c000}, {0xc5c6e000}, {0xc5c70000}, {0xc5c72000}, {0xc5c74000}, {0xc5c76000}, {0xc5c78000}, {0xc5c7a000}, {0xc5c7c000}, {0xc5c7e000}, {0xc5c80000}, {0xc5c82000}, {0xc5c84000}, {0xc5c86000}, {0xc5c88000}, {0xc5c8a000}, {0xc5c8c000}, {0xc5c8e000}, {0xc5c90000}, {0xc5c92000}, {0xc5c94000}, {0xc5c96000}, {0xc5c98000}, {0xc5c9a000}, {0xc5c9c000}, {0xc5c9e000}, {0xc5ca0000}, {0xc5ca2000}, {0xc5ca4000}, {0xc5ca6000}, {0xc5ca8000}, {0xc5caa000}, {0xc5cac000}, {0xc5cae000}, {0xc5cb0000}, {0xc5cb2000}, {0xc5cb4000}, {0xc5cb6000}, {0xc5cb8000}, {0xc5cba000}, {0xc5cbc000}, {0xc5cbe000}, {0xc5cc0000}, {0xc5cc2000}, {0xc5cc4000}, {0xc5cc6000}, {0xc5cc8000}, {0xc5cca000}, {0xc5ccc000}, {0xc5cce000}, {0xc5cd0000}, {0xc5cd2000}, {0xc5cd4000}, {0xc5cd6000}, {0xc5cd8000}, {0xc5cda000}, {0xc5cdc000}, {0xc5cde000}, {0xc5ce0000}, {0xc5ce2000}, {0xc5ce4000}, {0xc5ce6000}, {0xc5ce8000}, {0xc5cea000}, {0xc5cec000}, {0xc5cee000}, {0xc5cf0000}, {0xc5cf2000}, {0xc5cf4000}, {0xc5cf6000}, {0xc5cf8000}, {0xc5cfa000}, {0xc5cfc000}, {0xc5cfe000}, {0xc5d00000}, {0xc5d02000}, {0xc5d04000}, {0xc5d06000}, {0xc5d08000}, {0xc5d0a000}, {0xc5d0c000}, {0xc5d0e000}, {0xc5d10000}, {0xc5d12000}, {0xc5d14000}, {0xc5d16000}, {0xc5d18000}, {0xc5d1a000}, {0xc5d1c000}, {0xc5d1e000}, {0xc5d20000}, {0xc5d22000}, {0xc5d24000}, {0xc5d26000}, {0xc5d28000}, {0xc5d2a000}, {0xc5d2c000}, {0xc5d2e000}, {0xc5d30000}, {0xc5d32000}, {0xc5d34000}, {0xc5d36000}, {0xc5d38000}, {0xc5d3a000}, {0xc5d3c000}, {0xc5d3e000}, {0xc5d40000}, {0xc5d42000}, {0xc5d44000}, {0xc5d46000}, {0xc5d48000}, {0xc5d4a000}, {0xc5d4c000}, {0xc5d4e000}, {0xc5d50000}, {0xc5d52000}, {0xc5d54000}, {0xc5d56000}, {0xc5d58000}, {0xc5d5a000}, {0xc5d5c000}, {0xc5d5e000}, {0xc5d60000}, {0xc5d62000}, {0xc5d64000}, {0xc5d66000}, {0xc5d68000}, {0xc5d6a000}, {0xc5d6c000}, {0xc5d6e000}, {0xc5d70000}, {0xc5d72000}, {0xc5d74000}, {0xc5d76000}, {0xc5d78000}, {0xc5d7a000}, {0xc5d7c000}, {0xc5d7e000}, {0xc5d80000}, {0xc5d82000}, {0xc5d84000}, {0xc5d86000}, {0xc5d88000}, {0xc5d8a000}, {0xc5d8c000}, {0xc5d8e000}, {0xc5d90000}, {0xc5d92000}, {0xc5d94000}, {0xc5d96000}, {0xc5d98000}, {0xc5d9a000}, {0xc5d9c000}, {0xc5d9e000}, {0xc5da0000}, {0xc5da2000}, {0xc5da4000}, {0xc5da6000}, {0xc5da8000}, {0xc5daa000}, {0xc5dac000}, {0xc5dae000}, {0xc5db0000}, {0xc5db2000}, {0xc5db4000}, {0xc5db6000}, {0xc5db8000}, {0xc5dba000}, {0xc5dbc000}, {0xc5dbe000}, {0xc5dc0000}, {0xc5dc2000}, {0xc5dc4000}, {0xc5dc6000}, {0xc5dc8000}, {0xc5dca000}, {0xc5dcc000}, {0xc5dce000}, {0xc5dd0000}, {0xc5dd2000}, {0xc5dd4000}, {0xc5dd6000}, {0xc5dd8000}, {0xc5dda000}, {0xc5ddc000}, {0xc5dde000}, {0xc5de0000}, {0xc5de2000}, {0xc5de4000}, {0xc5de6000}, {0xc5de8000}, {0xc5dea000}, {0xc5dec000}, {0xc5dee000}, {0xc5df0000}, {0xc5df2000}, {0xc5df4000}, {0xc5df6000}, {0xc5df8000}, {0xc5dfa000}, {0xc5dfc000}, {0xc5dfe000}, {0xc5e00000}, {0xc5e02000}, {0xc5e04000}, {0xc5e06000}, {0xc5e08000}, {0xc5e0a000}, {0xc5e0c000}, {0xc5e0e000}, {0xc5e10000}, {0xc5e12000}, {0xc5e14000}, {0xc5e16000}, {0xc5e18000}, {0xc5e1a000}, {0xc5e1c000}, {0xc5e1e000}, {0xc5e20000}, {0xc5e22000}, {0xc5e24000}, {0xc5e26000}, {0xc5e28000}, {0xc5e2a000}, {0xc5e2c000}, {0xc5e2e000}, {0xc5e30000}, {0xc5e32000}, {0xc5e34000}, {0xc5e36000}, {0xc5e38000}, {0xc5e3a000}, {0xc5e3c000}, {0xc5e3e000}, {0xc5e40000}, {0xc5e42000}, {0xc5e44000}, {0xc5e46000}, {0xc5e48000}, {0xc5e4a000}, {0xc5e4c000}, {0xc5e4e000}, {0xc5e50000}, {0xc5e52000}, {0xc5e54000}, {0xc5e56000}, {0xc5e58000}, {0xc5e5a000}, {0xc5e5c000}, {0xc5e5e000}, {0xc5e60000}, {0xc5e62000}, {0xc5e64000}, {0xc5e66000}, {0xc5e68000}, {0xc5e6a000}, {0xc5e6c000}, {0xc5e6e000}, {0xc5e70000}, {0xc5e72000}, {0xc5e74000}, {0xc5e76000}, {0xc5e78000}, {0xc5e7a000}, {0xc5e7c000}, {0xc5e7e000}, {0xc5e80000}, {0xc5e82000}, {0xc5e84000}, {0xc5e86000}, {0xc5e88000}, {0xc5e8a000}, {0xc5e8c000}, {0xc5e8e000}, {0xc5e90000}, {0xc5e92000}, {0xc5e94000}, {0xc5e96000}, {0xc5e98000}, {0xc5e9a000}, {0xc5e9c000}, {0xc5e9e000}, {0xc5ea0000}, {0xc5ea2000}, {0xc5ea4000}, {0xc5ea6000}, {0xc5ea8000}, {0xc5eaa000}, {0xc5eac000}, {0xc5eae000}, {0xc5eb0000}, {0xc5eb2000}, {0xc5eb4000}, {0xc5eb6000}, {0xc5eb8000}, {0xc5eba000}, {0xc5ebc000}, {0xc5ebe000}, {0xc5ec0000}, {0xc5ec2000}, {0xc5ec4000}, {0xc5ec6000}, {0xc5ec8000}, {0xc5eca000}, {0xc5ecc000}, {0xc5ece000}, {0xc5ed0000}, {0xc5ed2000}, {0xc5ed4000}, {0xc5ed6000}, {0xc5ed8000}, {0xc5eda000}, {0xc5edc000}, {0xc5ede000}, {0xc5ee0000}, {0xc5ee2000}, {0xc5ee4000}, {0xc5ee6000}, {0xc5ee8000}, {0xc5eea000}, {0xc5eec000}, {0xc5eee000}, {0xc5ef0000}, {0xc5ef2000}, {0xc5ef4000}, {0xc5ef6000}, {0xc5ef8000}, {0xc5efa000}, {0xc5efc000}, {0xc5efe000}, {0xc5f00000}, {0xc5f02000}, {0xc5f04000}, {0xc5f06000}, {0xc5f08000}, {0xc5f0a000}, {0xc5f0c000}, {0xc5f0e000}, {0xc5f10000}, {0xc5f12000}, {0xc5f14000}, {0xc5f16000}, {0xc5f18000}, {0xc5f1a000}, {0xc5f1c000}, {0xc5f1e000}, {0xc5f20000}, {0xc5f22000}, {0xc5f24000}, {0xc5f26000}, {0xc5f28000}, {0xc5f2a000}, {0xc5f2c000}, {0xc5f2e000}, {0xc5f30000}, {0xc5f32000}, {0xc5f34000}, {0xc5f36000}, {0xc5f38000}, {0xc5f3a000}, {0xc5f3c000}, {0xc5f3e000}, {0xc5f40000}, {0xc5f42000}, {0xc5f44000}, {0xc5f46000}, {0xc5f48000}, {0xc5f4a000}, {0xc5f4c000}, {0xc5f4e000}, {0xc5f50000}, {0xc5f52000}, {0xc5f54000}, {0xc5f56000}, {0xc5f58000}, {0xc5f5a000}, {0xc5f5c000}, {0xc5f5e000}, {0xc5f60000}, {0xc5f62000}, {0xc5f64000}, {0xc5f66000}, {0xc5f68000}, {0xc5f6a000}, {0xc5f6c000}, {0xc5f6e000}, {0xc5f70000}, {0xc5f72000}, {0xc5f74000}, {0xc5f76000}, {0xc5f78000}, {0xc5f7a000}, {0xc5f7c000}, {0xc5f7e000}, {0xc5f80000}, {0xc5f82000}, {0xc5f84000}, {0xc5f86000}, {0xc5f88000}, {0xc5f8a000}, {0xc5f8c000}, {0xc5f8e000}, {0xc5f90000}, {0xc5f92000}, {0xc5f94000}, {0xc5f96000}, {0xc5f98000}, {0xc5f9a000}, {0xc5f9c000}, {0xc5f9e000}, {0xc5fa0000}, {0xc5fa2000}, {0xc5fa4000}, {0xc5fa6000}, {0xc5fa8000}, {0xc5faa000}, {0xc5fac000}, {0xc5fae000}, {0xc5fb0000}, {0xc5fb2000}, {0xc5fb4000}, {0xc5fb6000}, {0xc5fb8000}, {0xc5fba000}, {0xc5fbc000}, {0xc5fbe000}, {0xc5fc0000}, {0xc5fc2000}, {0xc5fc4000}, {0xc5fc6000}, {0xc5fc8000}, {0xc5fca000}, {0xc5fcc000}, {0xc5fce000}, {0xc5fd0000}, {0xc5fd2000}, {0xc5fd4000}, {0xc5fd6000}, {0xc5fd8000}, {0xc5fda000}, {0xc5fdc000}, {0xc5fde000}, {0xc5fe0000}, {0xc5fe2000}, {0xc5fe4000}, {0xc5fe6000}, {0xc5fe8000}, {0xc5fea000}, {0xc5fec000}, {0xc5fee000}, {0xc5ff0000}, {0xc5ff2000}, {0xc5ff4000}, {0xc5ff6000}, {0xc5ff8000}, {0xc5ffa000}, {0xc5ffc000}, {0xc5ffe000}, {0xc6000000}, {0xc6002000}, {0xc6004000}, {0xc6006000}, {0xc6008000}, {0xc600a000}, {0xc600c000}, {0xc600e000}, {0xc6010000}, {0xc6012000}, {0xc6014000}, {0xc6016000}, {0xc6018000}, {0xc601a000}, {0xc601c000}, {0xc601e000}, {0xc6020000}, {0xc6022000}, {0xc6024000}, {0xc6026000}, {0xc6028000}, {0xc602a000}, {0xc602c000}, {0xc602e000}, {0xc6030000}, {0xc6032000}, {0xc6034000}, {0xc6036000}, {0xc6038000}, {0xc603a000}, {0xc603c000}, {0xc603e000}, {0xc6040000}, {0xc6042000}, {0xc6044000}, {0xc6046000}, {0xc6048000}, {0xc604a000}, {0xc604c000}, {0xc604e000}, {0xc6050000}, {0xc6052000}, {0xc6054000}, {0xc6056000}, {0xc6058000}, {0xc605a000}, {0xc605c000}, {0xc605e000}, {0xc6060000}, {0xc6062000}, {0xc6064000}, {0xc6066000}, {0xc6068000}, {0xc606a000}, {0xc606c000}, {0xc606e000}, {0xc6070000}, {0xc6072000}, {0xc6074000}, {0xc6076000}, {0xc6078000}, {0xc607a000}, {0xc607c000}, {0xc607e000}, {0xc6080000}, {0xc6082000}, {0xc6084000}, {0xc6086000}, {0xc6088000}, {0xc608a000}, {0xc608c000}, {0xc608e000}, {0xc6090000}, {0xc6092000}, {0xc6094000}, {0xc6096000}, {0xc6098000}, {0xc609a000}, {0xc609c000}, {0xc609e000}, {0xc60a0000}, {0xc60a2000}, {0xc60a4000}, {0xc60a6000}, {0xc60a8000}, {0xc60aa000}, {0xc60ac000}, {0xc60ae000}, {0xc60b0000}, {0xc60b2000}, {0xc60b4000}, {0xc60b6000}, {0xc60b8000}, {0xc60ba000}, {0xc60bc000}, {0xc60be000}, {0xc60c0000}, {0xc60c2000}, {0xc60c4000}, {0xc60c6000}, {0xc60c8000}, {0xc60ca000}, {0xc60cc000}, {0xc60ce000}, {0xc60d0000}, {0xc60d2000}, {0xc60d4000}, {0xc60d6000}, {0xc60d8000}, {0xc60da000}, {0xc60dc000}, {0xc60de000}, {0xc60e0000}, {0xc60e2000}, {0xc60e4000}, {0xc60e6000}, {0xc60e8000}, {0xc60ea000}, {0xc60ec000}, {0xc60ee000}, {0xc60f0000}, {0xc60f2000}, {0xc60f4000}, {0xc60f6000}, {0xc60f8000}, {0xc60fa000}, {0xc60fc000}, {0xc60fe000}, {0xc6100000}, {0xc6102000}, {0xc6104000}, {0xc6106000}, {0xc6108000}, {0xc610a000}, {0xc610c000}, {0xc610e000}, {0xc6110000}, {0xc6112000}, {0xc6114000}, {0xc6116000}, {0xc6118000}, {0xc611a000}, {0xc611c000}, {0xc611e000}, {0xc6120000}, {0xc6122000}, {0xc6124000}, {0xc6126000}, {0xc6128000}, {0xc612a000}, {0xc612c000}, {0xc612e000}, {0xc6130000}, {0xc6132000}, {0xc6134000}, {0xc6136000}, {0xc6138000}, {0xc613a000}, {0xc613c000}, {0xc613e000}, {0xc6140000}, {0xc6142000}, {0xc6144000}, {0xc6146000}, {0xc6148000}, {0xc614a000}, {0xc614c000}, {0xc614e000}, {0xc6150000}, {0xc6152000}, {0xc6154000}, {0xc6156000}, {0xc6158000}, {0xc615a000}, {0xc615c000}, {0xc615e000}, {0xc6160000}, {0xc6162000}, {0xc6164000}, {0xc6166000}, {0xc6168000}, {0xc616a000}, {0xc616c000}, {0xc616e000}, {0xc6170000}, {0xc6172000}, {0xc6174000}, {0xc6176000}, {0xc6178000}, {0xc617a000}, {0xc617c000}, {0xc617e000}, {0xc6180000}, {0xc6182000}, {0xc6184000}, {0xc6186000}, {0xc6188000}, {0xc618a000}, {0xc618c000}, {0xc618e000}, {0xc6190000}, {0xc6192000}, {0xc6194000}, {0xc6196000}, {0xc6198000}, {0xc619a000}, {0xc619c000}, {0xc619e000}, {0xc61a0000}, {0xc61a2000}, {0xc61a4000}, {0xc61a6000}, {0xc61a8000}, {0xc61aa000}, {0xc61ac000}, {0xc61ae000}, {0xc61b0000}, {0xc61b2000}, {0xc61b4000}, {0xc61b6000}, {0xc61b8000}, {0xc61ba000}, {0xc61bc000}, {0xc61be000}, {0xc61c0000}, {0xc61c2000}, {0xc61c4000}, {0xc61c6000}, {0xc61c8000}, {0xc61ca000}, {0xc61cc000}, {0xc61ce000}, {0xc61d0000}, {0xc61d2000}, {0xc61d4000}, {0xc61d6000}, {0xc61d8000}, {0xc61da000}, {0xc61dc000}, {0xc61de000}, {0xc61e0000}, {0xc61e2000}, {0xc61e4000}, {0xc61e6000}, {0xc61e8000}, {0xc61ea000}, {0xc61ec000}, {0xc61ee000}, {0xc61f0000}, {0xc61f2000}, {0xc61f4000}, {0xc61f6000}, {0xc61f8000}, {0xc61fa000}, {0xc61fc000}, {0xc61fe000}, {0xc6200000}, {0xc6202000}, {0xc6204000}, {0xc6206000}, {0xc6208000}, {0xc620a000}, {0xc620c000}, {0xc620e000}, {0xc6210000}, {0xc6212000}, {0xc6214000}, {0xc6216000}, {0xc6218000}, {0xc621a000}, {0xc621c000}, {0xc621e000}, {0xc6220000}, {0xc6222000}, {0xc6224000}, {0xc6226000}, {0xc6228000}, {0xc622a000}, {0xc622c000}, {0xc622e000}, {0xc6230000}, {0xc6232000}, {0xc6234000}, {0xc6236000}, {0xc6238000}, {0xc623a000}, {0xc623c000}, {0xc623e000}, {0xc6240000}, {0xc6242000}, {0xc6244000}, {0xc6246000}, {0xc6248000}, {0xc624a000}, {0xc624c000}, {0xc624e000}, {0xc6250000}, {0xc6252000}, {0xc6254000}, {0xc6256000}, {0xc6258000}, {0xc625a000}, {0xc625c000}, {0xc625e000}, {0xc6260000}, {0xc6262000}, {0xc6264000}, {0xc6266000}, {0xc6268000}, {0xc626a000}, {0xc626c000}, {0xc626e000}, {0xc6270000}, {0xc6272000}, {0xc6274000}, {0xc6276000}, {0xc6278000}, {0xc627a000}, {0xc627c000}, {0xc627e000}, {0xc6280000}, {0xc6282000}, {0xc6284000}, {0xc6286000}, {0xc6288000}, {0xc628a000}, {0xc628c000}, {0xc628e000}, {0xc6290000}, {0xc6292000}, {0xc6294000}, {0xc6296000}, {0xc6298000}, {0xc629a000}, {0xc629c000}, {0xc629e000}, {0xc62a0000}, {0xc62a2000}, {0xc62a4000}, {0xc62a6000}, {0xc62a8000}, {0xc62aa000}, {0xc62ac000}, {0xc62ae000}, {0xc62b0000}, {0xc62b2000}, {0xc62b4000}, {0xc62b6000}, {0xc62b8000}, {0xc62ba000}, {0xc62bc000}, {0xc62be000}, {0xc62c0000}, {0xc62c2000}, {0xc62c4000}, {0xc62c6000}, {0xc62c8000}, {0xc62ca000}, {0xc62cc000}, {0xc62ce000}, {0xc62d0000}, {0xc62d2000}, {0xc62d4000}, {0xc62d6000}, {0xc62d8000}, {0xc62da000}, {0xc62dc000}, {0xc62de000}, {0xc62e0000}, {0xc62e2000}, {0xc62e4000}, {0xc62e6000}, {0xc62e8000}, {0xc62ea000}, {0xc62ec000}, {0xc62ee000}, {0xc62f0000}, {0xc62f2000}, {0xc62f4000}, {0xc62f6000}, {0xc62f8000}, {0xc62fa000}, {0xc62fc000}, {0xc62fe000}, {0xc6300000}, {0xc6302000}, {0xc6304000}, {0xc6306000}, {0xc6308000}, {0xc630a000}, {0xc630c000}, {0xc630e000}, {0xc6310000}, {0xc6312000}, {0xc6314000}, {0xc6316000}, {0xc6318000}, {0xc631a000}, {0xc631c000}, {0xc631e000}, {0xc6320000}, {0xc6322000}, {0xc6324000}, {0xc6326000}, {0xc6328000}, {0xc632a000}, {0xc632c000}, {0xc632e000}, {0xc6330000}, {0xc6332000}, {0xc6334000}, {0xc6336000}, {0xc6338000}, {0xc633a000}, {0xc633c000}, {0xc633e000}, {0xc6340000}, {0xc6342000}, {0xc6344000}, {0xc6346000}, {0xc6348000}, {0xc634a000}, {0xc634c000}, {0xc634e000}, {0xc6350000}, {0xc6352000}, {0xc6354000}, {0xc6356000}, {0xc6358000}, {0xc635a000}, {0xc635c000}, {0xc635e000}, {0xc6360000}, {0xc6362000}, {0xc6364000}, {0xc6366000}, {0xc6368000}, {0xc636a000}, {0xc636c000}, {0xc636e000}, {0xc6370000}, {0xc6372000}, {0xc6374000}, {0xc6376000}, {0xc6378000}, {0xc637a000}, {0xc637c000}, {0xc637e000}, {0xc6380000}, {0xc6382000}, {0xc6384000}, {0xc6386000}, {0xc6388000}, {0xc638a000}, {0xc638c000}, {0xc638e000}, {0xc6390000}, {0xc6392000}, {0xc6394000}, {0xc6396000}, {0xc6398000}, {0xc639a000}, {0xc639c000}, {0xc639e000}, {0xc63a0000}, {0xc63a2000}, {0xc63a4000}, {0xc63a6000}, {0xc63a8000}, {0xc63aa000}, {0xc63ac000}, {0xc63ae000}, {0xc63b0000}, {0xc63b2000}, {0xc63b4000}, {0xc63b6000}, {0xc63b8000}, {0xc63ba000}, {0xc63bc000}, {0xc63be000}, {0xc63c0000}, {0xc63c2000}, {0xc63c4000}, {0xc63c6000}, {0xc63c8000}, {0xc63ca000}, {0xc63cc000}, {0xc63ce000}, {0xc63d0000}, {0xc63d2000}, {0xc63d4000}, {0xc63d6000}, {0xc63d8000}, {0xc63da000}, {0xc63dc000}, {0xc63de000}, {0xc63e0000}, {0xc63e2000}, {0xc63e4000}, {0xc63e6000}, {0xc63e8000}, {0xc63ea000}, {0xc63ec000}, {0xc63ee000}, {0xc63f0000}, {0xc63f2000}, {0xc63f4000}, {0xc63f6000}, {0xc63f8000}, {0xc63fa000}, {0xc63fc000}, {0xc63fe000}, {0xc6400000}, {0xc6402000}, {0xc6404000}, {0xc6406000}, {0xc6408000}, {0xc640a000}, {0xc640c000}, {0xc640e000}, {0xc6410000}, {0xc6412000}, {0xc6414000}, {0xc6416000}, {0xc6418000}, {0xc641a000}, {0xc641c000}, {0xc641e000}, {0xc6420000}, {0xc6422000}, {0xc6424000}, {0xc6426000}, {0xc6428000}, {0xc642a000}, {0xc642c000}, {0xc642e000}, {0xc6430000}, {0xc6432000}, {0xc6434000}, {0xc6436000}, {0xc6438000}, {0xc643a000}, {0xc643c000}, {0xc643e000}, {0xc6440000}, {0xc6442000}, {0xc6444000}, {0xc6446000}, {0xc6448000}, {0xc644a000}, {0xc644c000}, {0xc644e000}, {0xc6450000}, {0xc6452000}, {0xc6454000}, {0xc6456000}, {0xc6458000}, {0xc645a000}, {0xc645c000}, {0xc645e000}, {0xc6460000}, {0xc6462000}, {0xc6464000}, {0xc6466000}, {0xc6468000}, {0xc646a000}, {0xc646c000}, {0xc646e000}, {0xc6470000}, {0xc6472000}, {0xc6474000}, {0xc6476000}, {0xc6478000}, {0xc647a000}, {0xc647c000}, {0xc647e000}, {0xc6480000}, {0xc6482000}, {0xc6484000}, {0xc6486000}, {0xc6488000}, {0xc648a000}, {0xc648c000}, {0xc648e000}, {0xc6490000}, {0xc6492000}, {0xc6494000}, {0xc6496000}, {0xc6498000}, {0xc649a000}, {0xc649c000}, {0xc649e000}, {0xc64a0000}, {0xc64a2000}, {0xc64a4000}, {0xc64a6000}, {0xc64a8000}, {0xc64aa000}, {0xc64ac000}, {0xc64ae000}, {0xc64b0000}, {0xc64b2000}, {0xc64b4000}, {0xc64b6000}, {0xc64b8000}, {0xc64ba000}, {0xc64bc000}, {0xc64be000}, {0xc64c0000}, {0xc64c2000}, {0xc64c4000}, {0xc64c6000}, {0xc64c8000}, {0xc64ca000}, {0xc64cc000}, {0xc64ce000}, {0xc64d0000}, {0xc64d2000}, {0xc64d4000}, {0xc64d6000}, {0xc64d8000}, {0xc64da000}, {0xc64dc000}, {0xc64de000}, {0xc64e0000}, {0xc64e2000}, {0xc64e4000}, {0xc64e6000}, {0xc64e8000}, {0xc64ea000}, {0xc64ec000}, {0xc64ee000}, {0xc64f0000}, {0xc64f2000}, {0xc64f4000}, {0xc64f6000}, {0xc64f8000}, {0xc64fa000}, {0xc64fc000}, {0xc64fe000}, {0xc6500000}, {0xc6502000}, {0xc6504000}, {0xc6506000}, {0xc6508000}, {0xc650a000}, {0xc650c000}, {0xc650e000}, {0xc6510000}, {0xc6512000}, {0xc6514000}, {0xc6516000}, {0xc6518000}, {0xc651a000}, {0xc651c000}, {0xc651e000}, {0xc6520000}, {0xc6522000}, {0xc6524000}, {0xc6526000}, {0xc6528000}, {0xc652a000}, {0xc652c000}, {0xc652e000}, {0xc6530000}, {0xc6532000}, {0xc6534000}, {0xc6536000}, {0xc6538000}, {0xc653a000}, {0xc653c000}, {0xc653e000}, {0xc6540000}, {0xc6542000}, {0xc6544000}, {0xc6546000}, {0xc6548000}, {0xc654a000}, {0xc654c000}, {0xc654e000}, {0xc6550000}, {0xc6552000}, {0xc6554000}, {0xc6556000}, {0xc6558000}, {0xc655a000}, {0xc655c000}, {0xc655e000}, {0xc6560000}, {0xc6562000}, {0xc6564000}, {0xc6566000}, {0xc6568000}, {0xc656a000}, {0xc656c000}, {0xc656e000}, {0xc6570000}, {0xc6572000}, {0xc6574000}, {0xc6576000}, {0xc6578000}, {0xc657a000}, {0xc657c000}, {0xc657e000}, {0xc6580000}, {0xc6582000}, {0xc6584000}, {0xc6586000}, {0xc6588000}, {0xc658a000}, {0xc658c000}, {0xc658e000}, {0xc6590000}, {0xc6592000}, {0xc6594000}, {0xc6596000}, {0xc6598000}, {0xc659a000}, {0xc659c000}, {0xc659e000}, {0xc65a0000}, {0xc65a2000}, {0xc65a4000}, {0xc65a6000}, {0xc65a8000}, {0xc65aa000}, {0xc65ac000}, {0xc65ae000}, {0xc65b0000}, {0xc65b2000}, {0xc65b4000}, {0xc65b6000}, {0xc65b8000}, {0xc65ba000}, {0xc65bc000}, {0xc65be000}, {0xc65c0000}, {0xc65c2000}, {0xc65c4000}, {0xc65c6000}, {0xc65c8000}, {0xc65ca000}, {0xc65cc000}, {0xc65ce000}, {0xc65d0000}, {0xc65d2000}, {0xc65d4000}, {0xc65d6000}, {0xc65d8000}, {0xc65da000}, {0xc65dc000}, {0xc65de000}, {0xc65e0000}, {0xc65e2000}, {0xc65e4000}, {0xc65e6000}, {0xc65e8000}, {0xc65ea000}, {0xc65ec000}, {0xc65ee000}, {0xc65f0000}, {0xc65f2000}, {0xc65f4000}, {0xc65f6000}, {0xc65f8000}, {0xc65fa000}, {0xc65fc000}, {0xc65fe000}, {0xc6600000}, {0xc6602000}, {0xc6604000}, {0xc6606000}, {0xc6608000}, {0xc660a000}, {0xc660c000}, {0xc660e000}, {0xc6610000}, {0xc6612000}, {0xc6614000}, {0xc6616000}, {0xc6618000}, {0xc661a000}, {0xc661c000}, {0xc661e000}, {0xc6620000}, {0xc6622000}, {0xc6624000}, {0xc6626000}, {0xc6628000}, {0xc662a000}, {0xc662c000}, {0xc662e000}, {0xc6630000}, {0xc6632000}, {0xc6634000}, {0xc6636000}, {0xc6638000}, {0xc663a000}, {0xc663c000}, {0xc663e000}, {0xc6640000}, {0xc6642000}, {0xc6644000}, {0xc6646000}, {0xc6648000}, {0xc664a000}, {0xc664c000}, {0xc664e000}, {0xc6650000}, {0xc6652000}, {0xc6654000}, {0xc6656000}, {0xc6658000}, {0xc665a000}, {0xc665c000}, {0xc665e000}, {0xc6660000}, {0xc6662000}, {0xc6664000}, {0xc6666000}, {0xc6668000}, {0xc666a000}, {0xc666c000}, {0xc666e000}, {0xc6670000}, {0xc6672000}, {0xc6674000}, {0xc6676000}, {0xc6678000}, {0xc667a000}, {0xc667c000}, {0xc667e000}, {0xc6680000}, {0xc6682000}, {0xc6684000}, {0xc6686000}, {0xc6688000}, {0xc668a000}, {0xc668c000}, {0xc668e000}, {0xc6690000}, {0xc6692000}, {0xc6694000}, {0xc6696000}, {0xc6698000}, {0xc669a000}, {0xc669c000}, {0xc669e000}, {0xc66a0000}, {0xc66a2000}, {0xc66a4000}, {0xc66a6000}, {0xc66a8000}, {0xc66aa000}, {0xc66ac000}, {0xc66ae000}, {0xc66b0000}, {0xc66b2000}, {0xc66b4000}, {0xc66b6000}, {0xc66b8000}, {0xc66ba000}, {0xc66bc000}, {0xc66be000}, {0xc66c0000}, {0xc66c2000}, {0xc66c4000}, {0xc66c6000}, {0xc66c8000}, {0xc66ca000}, {0xc66cc000}, {0xc66ce000}, {0xc66d0000}, {0xc66d2000}, {0xc66d4000}, {0xc66d6000}, {0xc66d8000}, {0xc66da000}, {0xc66dc000}, {0xc66de000}, {0xc66e0000}, {0xc66e2000}, {0xc66e4000}, {0xc66e6000}, {0xc66e8000}, {0xc66ea000}, {0xc66ec000}, {0xc66ee000}, {0xc66f0000}, {0xc66f2000}, {0xc66f4000}, {0xc66f6000}, {0xc66f8000}, {0xc66fa000}, {0xc66fc000}, {0xc66fe000}, {0xc6700000}, {0xc6702000}, {0xc6704000}, {0xc6706000}, {0xc6708000}, {0xc670a000}, {0xc670c000}, {0xc670e000}, {0xc6710000}, {0xc6712000}, {0xc6714000}, {0xc6716000}, {0xc6718000}, {0xc671a000}, {0xc671c000}, {0xc671e000}, {0xc6720000}, {0xc6722000}, {0xc6724000}, {0xc6726000}, {0xc6728000}, {0xc672a000}, {0xc672c000}, {0xc672e000}, {0xc6730000}, {0xc6732000}, {0xc6734000}, {0xc6736000}, {0xc6738000}, {0xc673a000}, {0xc673c000}, {0xc673e000}, {0xc6740000}, {0xc6742000}, {0xc6744000}, {0xc6746000}, {0xc6748000}, {0xc674a000}, {0xc674c000}, {0xc674e000}, {0xc6750000}, {0xc6752000}, {0xc6754000}, {0xc6756000}, {0xc6758000}, {0xc675a000}, {0xc675c000}, {0xc675e000}, {0xc6760000}, {0xc6762000}, {0xc6764000}, {0xc6766000}, {0xc6768000}, {0xc676a000}, {0xc676c000}, {0xc676e000}, {0xc6770000}, {0xc6772000}, {0xc6774000}, {0xc6776000}, {0xc6778000}, {0xc677a000}, {0xc677c000}, {0xc677e000}, {0xc6780000}, {0xc6782000}, {0xc6784000}, {0xc6786000}, {0xc6788000}, {0xc678a000}, {0xc678c000}, {0xc678e000}, {0xc6790000}, {0xc6792000}, {0xc6794000}, {0xc6796000}, {0xc6798000}, {0xc679a000}, {0xc679c000}, {0xc679e000}, {0xc67a0000}, {0xc67a2000}, {0xc67a4000}, {0xc67a6000}, {0xc67a8000}, {0xc67aa000}, {0xc67ac000}, {0xc67ae000}, {0xc67b0000}, {0xc67b2000}, {0xc67b4000}, {0xc67b6000}, {0xc67b8000}, {0xc67ba000}, {0xc67bc000}, {0xc67be000}, {0xc67c0000}, {0xc67c2000}, {0xc67c4000}, {0xc67c6000}, {0xc67c8000}, {0xc67ca000}, {0xc67cc000}, {0xc67ce000}, {0xc67d0000}, {0xc67d2000}, {0xc67d4000}, {0xc67d6000}, {0xc67d8000}, {0xc67da000}, {0xc67dc000}, {0xc67de000}, {0xc67e0000}, {0xc67e2000}, {0xc67e4000}, {0xc67e6000}, {0xc67e8000}, {0xc67ea000}, {0xc67ec000}, {0xc67ee000}, {0xc67f0000}, {0xc67f2000}, {0xc67f4000}, {0xc67f6000}, {0xc67f8000}, {0xc67fa000}, {0xc67fc000}, {0xc67fe000}, {0xc6800000}, {0xc6802000}, {0xc6804000}, {0xc6806000}, {0xc6808000}, {0xc680a000}, {0xc680c000}, {0xc680e000}, {0xc6810000}, {0xc6812000}, {0xc6814000}, {0xc6816000}, {0xc6818000}, {0xc681a000}, {0xc681c000}, {0xc681e000}, {0xc6820000}, {0xc6822000}, {0xc6824000}, {0xc6826000}, {0xc6828000}, {0xc682a000}, {0xc682c000}, {0xc682e000}, {0xc6830000}, {0xc6832000}, {0xc6834000}, {0xc6836000}, {0xc6838000}, {0xc683a000}, {0xc683c000}, {0xc683e000}, {0xc6840000}, {0xc6842000}, {0xc6844000}, {0xc6846000}, {0xc6848000}, {0xc684a000}, {0xc684c000}, {0xc684e000}, {0xc6850000}, {0xc6852000}, {0xc6854000}, {0xc6856000}, {0xc6858000}, {0xc685a000}, {0xc685c000}, {0xc685e000}, {0xc6860000}, {0xc6862000}, {0xc6864000}, {0xc6866000}, {0xc6868000}, {0xc686a000}, {0xc686c000}, {0xc686e000}, {0xc6870000}, {0xc6872000}, {0xc6874000}, {0xc6876000}, {0xc6878000}, {0xc687a000}, {0xc687c000}, {0xc687e000}, {0xc6880000}, {0xc6882000}, {0xc6884000}, {0xc6886000}, {0xc6888000}, {0xc688a000}, {0xc688c000}, {0xc688e000}, {0xc6890000}, {0xc6892000}, {0xc6894000}, {0xc6896000}, {0xc6898000}, {0xc689a000}, {0xc689c000}, {0xc689e000}, {0xc68a0000}, {0xc68a2000}, {0xc68a4000}, {0xc68a6000}, {0xc68a8000}, {0xc68aa000}, {0xc68ac000}, {0xc68ae000}, {0xc68b0000}, {0xc68b2000}, {0xc68b4000}, {0xc68b6000}, {0xc68b8000}, {0xc68ba000}, {0xc68bc000}, {0xc68be000}, {0xc68c0000}, {0xc68c2000}, {0xc68c4000}, {0xc68c6000}, {0xc68c8000}, {0xc68ca000}, {0xc68cc000}, {0xc68ce000}, {0xc68d0000}, {0xc68d2000}, {0xc68d4000}, {0xc68d6000}, {0xc68d8000}, {0xc68da000}, {0xc68dc000}, {0xc68de000}, {0xc68e0000}, {0xc68e2000}, {0xc68e4000}, {0xc68e6000}, {0xc68e8000}, {0xc68ea000}, {0xc68ec000}, {0xc68ee000}, {0xc68f0000}, {0xc68f2000}, {0xc68f4000}, {0xc68f6000}, {0xc68f8000}, {0xc68fa000}, {0xc68fc000}, {0xc68fe000}, {0xc6900000}, {0xc6902000}, {0xc6904000}, {0xc6906000}, {0xc6908000}, {0xc690a000}, {0xc690c000}, {0xc690e000}, {0xc6910000}, {0xc6912000}, {0xc6914000}, {0xc6916000}, {0xc6918000}, {0xc691a000}, {0xc691c000}, {0xc691e000}, {0xc6920000}, {0xc6922000}, {0xc6924000}, {0xc6926000}, {0xc6928000}, {0xc692a000}, {0xc692c000}, {0xc692e000}, {0xc6930000}, {0xc6932000}, {0xc6934000}, {0xc6936000}, {0xc6938000}, {0xc693a000}, {0xc693c000}, {0xc693e000}, {0xc6940000}, {0xc6942000}, {0xc6944000}, {0xc6946000}, {0xc6948000}, {0xc694a000}, {0xc694c000}, {0xc694e000}, {0xc6950000}, {0xc6952000}, {0xc6954000}, {0xc6956000}, {0xc6958000}, {0xc695a000}, {0xc695c000}, {0xc695e000}, {0xc6960000}, {0xc6962000}, {0xc6964000}, {0xc6966000}, {0xc6968000}, {0xc696a000}, {0xc696c000}, {0xc696e000}, {0xc6970000}, {0xc6972000}, {0xc6974000}, {0xc6976000}, {0xc6978000}, {0xc697a000}, {0xc697c000}, {0xc697e000}, {0xc6980000}, {0xc6982000}, {0xc6984000}, {0xc6986000}, {0xc6988000}, {0xc698a000}, {0xc698c000}, {0xc698e000}, {0xc6990000}, {0xc6992000}, {0xc6994000}, {0xc6996000}, {0xc6998000}, {0xc699a000}, {0xc699c000}, {0xc699e000}, {0xc69a0000}, {0xc69a2000}, {0xc69a4000}, {0xc69a6000}, {0xc69a8000}, {0xc69aa000}, {0xc69ac000}, {0xc69ae000}, {0xc69b0000}, {0xc69b2000}, {0xc69b4000}, {0xc69b6000}, {0xc69b8000}, {0xc69ba000}, {0xc69bc000}, {0xc69be000}, {0xc69c0000}, {0xc69c2000}, {0xc69c4000}, {0xc69c6000}, {0xc69c8000}, {0xc69ca000}, {0xc69cc000}, {0xc69ce000}, {0xc69d0000}, {0xc69d2000}, {0xc69d4000}, {0xc69d6000}, {0xc69d8000}, {0xc69da000}, {0xc69dc000}, {0xc69de000}, {0xc69e0000}, {0xc69e2000}, {0xc69e4000}, {0xc69e6000}, {0xc69e8000}, {0xc69ea000}, {0xc69ec000}, {0xc69ee000}, {0xc69f0000}, {0xc69f2000}, {0xc69f4000}, {0xc69f6000}, {0xc69f8000}, {0xc69fa000}, {0xc69fc000}, {0xc69fe000}, {0xc6a00000}, {0xc6a02000}, {0xc6a04000}, {0xc6a06000}, {0xc6a08000}, {0xc6a0a000}, {0xc6a0c000}, {0xc6a0e000}, {0xc6a10000}, {0xc6a12000}, {0xc6a14000}, {0xc6a16000}, {0xc6a18000}, {0xc6a1a000}, {0xc6a1c000}, {0xc6a1e000}, {0xc6a20000}, {0xc6a22000}, {0xc6a24000}, {0xc6a26000}, {0xc6a28000}, {0xc6a2a000}, {0xc6a2c000}, {0xc6a2e000}, {0xc6a30000}, {0xc6a32000}, {0xc6a34000}, {0xc6a36000}, {0xc6a38000}, {0xc6a3a000}, {0xc6a3c000}, {0xc6a3e000}, {0xc6a40000}, {0xc6a42000}, {0xc6a44000}, {0xc6a46000}, {0xc6a48000}, {0xc6a4a000}, {0xc6a4c000}, {0xc6a4e000}, {0xc6a50000}, {0xc6a52000}, {0xc6a54000}, {0xc6a56000}, {0xc6a58000}, {0xc6a5a000}, {0xc6a5c000}, {0xc6a5e000}, {0xc6a60000}, {0xc6a62000}, {0xc6a64000}, {0xc6a66000}, {0xc6a68000}, {0xc6a6a000}, {0xc6a6c000}, {0xc6a6e000}, {0xc6a70000}, {0xc6a72000}, {0xc6a74000}, {0xc6a76000}, {0xc6a78000}, {0xc6a7a000}, {0xc6a7c000}, {0xc6a7e000}, {0xc6a80000}, {0xc6a82000}, {0xc6a84000}, {0xc6a86000}, {0xc6a88000}, {0xc6a8a000}, {0xc6a8c000}, {0xc6a8e000}, {0xc6a90000}, {0xc6a92000}, {0xc6a94000}, {0xc6a96000}, {0xc6a98000}, {0xc6a9a000}, {0xc6a9c000}, {0xc6a9e000}, {0xc6aa0000}, {0xc6aa2000}, {0xc6aa4000}, {0xc6aa6000}, {0xc6aa8000}, {0xc6aaa000}, {0xc6aac000}, {0xc6aae000}, {0xc6ab0000}, {0xc6ab2000}, {0xc6ab4000}, {0xc6ab6000}, {0xc6ab8000}, {0xc6aba000}, {0xc6abc000}, {0xc6abe000}, {0xc6ac0000}, {0xc6ac2000}, {0xc6ac4000}, {0xc6ac6000}, {0xc6ac8000}, {0xc6aca000}, {0xc6acc000}, {0xc6ace000}, {0xc6ad0000}, {0xc6ad2000}, {0xc6ad4000}, {0xc6ad6000}, {0xc6ad8000}, {0xc6ada000}, {0xc6adc000}, {0xc6ade000}, {0xc6ae0000}, {0xc6ae2000}, {0xc6ae4000}, {0xc6ae6000}, {0xc6ae8000}, {0xc6aea000}, {0xc6aec000}, {0xc6aee000}, {0xc6af0000}, {0xc6af2000}, {0xc6af4000}, {0xc6af6000}, {0xc6af8000}, {0xc6afa000}, {0xc6afc000}, {0xc6afe000}, {0xc6b00000}, {0xc6b02000}, {0xc6b04000}, {0xc6b06000}, {0xc6b08000}, {0xc6b0a000}, {0xc6b0c000}, {0xc6b0e000}, {0xc6b10000}, {0xc6b12000}, {0xc6b14000}, {0xc6b16000}, {0xc6b18000}, {0xc6b1a000}, {0xc6b1c000}, {0xc6b1e000}, {0xc6b20000}, {0xc6b22000}, {0xc6b24000}, {0xc6b26000}, {0xc6b28000}, {0xc6b2a000}, {0xc6b2c000}, {0xc6b2e000}, {0xc6b30000}, {0xc6b32000}, {0xc6b34000}, {0xc6b36000}, {0xc6b38000}, {0xc6b3a000}, {0xc6b3c000}, {0xc6b3e000}, {0xc6b40000}, {0xc6b42000}, {0xc6b44000}, {0xc6b46000}, {0xc6b48000}, {0xc6b4a000}, {0xc6b4c000}, {0xc6b4e000}, {0xc6b50000}, {0xc6b52000}, {0xc6b54000}, {0xc6b56000}, {0xc6b58000}, {0xc6b5a000}, {0xc6b5c000}, {0xc6b5e000}, {0xc6b60000}, {0xc6b62000}, {0xc6b64000}, {0xc6b66000}, {0xc6b68000}, {0xc6b6a000}, {0xc6b6c000}, {0xc6b6e000}, {0xc6b70000}, {0xc6b72000}, {0xc6b74000}, {0xc6b76000}, {0xc6b78000}, {0xc6b7a000}, {0xc6b7c000}, {0xc6b7e000}, {0xc6b80000}, {0xc6b82000}, {0xc6b84000}, {0xc6b86000}, {0xc6b88000}, {0xc6b8a000}, {0xc6b8c000}, {0xc6b8e000}, {0xc6b90000}, {0xc6b92000}, {0xc6b94000}, {0xc6b96000}, {0xc6b98000}, {0xc6b9a000}, {0xc6b9c000}, {0xc6b9e000}, {0xc6ba0000}, {0xc6ba2000}, {0xc6ba4000}, {0xc6ba6000}, {0xc6ba8000}, {0xc6baa000}, {0xc6bac000}, {0xc6bae000}, {0xc6bb0000}, {0xc6bb2000}, {0xc6bb4000}, {0xc6bb6000}, {0xc6bb8000}, {0xc6bba000}, {0xc6bbc000}, {0xc6bbe000}, {0xc6bc0000}, {0xc6bc2000}, {0xc6bc4000}, {0xc6bc6000}, {0xc6bc8000}, {0xc6bca000}, {0xc6bcc000}, {0xc6bce000}, {0xc6bd0000}, {0xc6bd2000}, {0xc6bd4000}, {0xc6bd6000}, {0xc6bd8000}, {0xc6bda000}, {0xc6bdc000}, {0xc6bde000}, {0xc6be0000}, {0xc6be2000}, {0xc6be4000}, {0xc6be6000}, {0xc6be8000}, {0xc6bea000}, {0xc6bec000}, {0xc6bee000}, {0xc6bf0000}, {0xc6bf2000}, {0xc6bf4000}, {0xc6bf6000}, {0xc6bf8000}, {0xc6bfa000}, {0xc6bfc000}, {0xc6bfe000}, {0xc6c00000}, {0xc6c02000}, {0xc6c04000}, {0xc6c06000}, {0xc6c08000}, {0xc6c0a000}, {0xc6c0c000}, {0xc6c0e000}, {0xc6c10000}, {0xc6c12000}, {0xc6c14000}, {0xc6c16000}, {0xc6c18000}, {0xc6c1a000}, {0xc6c1c000}, {0xc6c1e000}, {0xc6c20000}, {0xc6c22000}, {0xc6c24000}, {0xc6c26000}, {0xc6c28000}, {0xc6c2a000}, {0xc6c2c000}, {0xc6c2e000}, {0xc6c30000}, {0xc6c32000}, {0xc6c34000}, {0xc6c36000}, {0xc6c38000}, {0xc6c3a000}, {0xc6c3c000}, {0xc6c3e000}, {0xc6c40000}, {0xc6c42000}, {0xc6c44000}, {0xc6c46000}, {0xc6c48000}, {0xc6c4a000}, {0xc6c4c000}, {0xc6c4e000}, {0xc6c50000}, {0xc6c52000}, {0xc6c54000}, {0xc6c56000}, {0xc6c58000}, {0xc6c5a000}, {0xc6c5c000}, {0xc6c5e000}, {0xc6c60000}, {0xc6c62000}, {0xc6c64000}, {0xc6c66000}, {0xc6c68000}, {0xc6c6a000}, {0xc6c6c000}, {0xc6c6e000}, {0xc6c70000}, {0xc6c72000}, {0xc6c74000}, {0xc6c76000}, {0xc6c78000}, {0xc6c7a000}, {0xc6c7c000}, {0xc6c7e000}, {0xc6c80000}, {0xc6c82000}, {0xc6c84000}, {0xc6c86000}, {0xc6c88000}, {0xc6c8a000}, {0xc6c8c000}, {0xc6c8e000}, {0xc6c90000}, {0xc6c92000}, {0xc6c94000}, {0xc6c96000}, {0xc6c98000}, {0xc6c9a000}, {0xc6c9c000}, {0xc6c9e000}, {0xc6ca0000}, {0xc6ca2000}, {0xc6ca4000}, {0xc6ca6000}, {0xc6ca8000}, {0xc6caa000}, {0xc6cac000}, {0xc6cae000}, {0xc6cb0000}, {0xc6cb2000}, {0xc6cb4000}, {0xc6cb6000}, {0xc6cb8000}, {0xc6cba000}, {0xc6cbc000}, {0xc6cbe000}, {0xc6cc0000}, {0xc6cc2000}, {0xc6cc4000}, {0xc6cc6000}, {0xc6cc8000}, {0xc6cca000}, {0xc6ccc000}, {0xc6cce000}, {0xc6cd0000}, {0xc6cd2000}, {0xc6cd4000}, {0xc6cd6000}, {0xc6cd8000}, {0xc6cda000}, {0xc6cdc000}, {0xc6cde000}, {0xc6ce0000}, {0xc6ce2000}, {0xc6ce4000}, {0xc6ce6000}, {0xc6ce8000}, {0xc6cea000}, {0xc6cec000}, {0xc6cee000}, {0xc6cf0000}, {0xc6cf2000}, {0xc6cf4000}, {0xc6cf6000}, {0xc6cf8000}, {0xc6cfa000}, {0xc6cfc000}, {0xc6cfe000}, {0xc6d00000}, {0xc6d02000}, {0xc6d04000}, {0xc6d06000}, {0xc6d08000}, {0xc6d0a000}, {0xc6d0c000}, {0xc6d0e000}, {0xc6d10000}, {0xc6d12000}, {0xc6d14000}, {0xc6d16000}, {0xc6d18000}, {0xc6d1a000}, {0xc6d1c000}, {0xc6d1e000}, {0xc6d20000}, {0xc6d22000}, {0xc6d24000}, {0xc6d26000}, {0xc6d28000}, {0xc6d2a000}, {0xc6d2c000}, {0xc6d2e000}, {0xc6d30000}, {0xc6d32000}, {0xc6d34000}, {0xc6d36000}, {0xc6d38000}, {0xc6d3a000}, {0xc6d3c000}, {0xc6d3e000}, {0xc6d40000}, {0xc6d42000}, {0xc6d44000}, {0xc6d46000}, {0xc6d48000}, {0xc6d4a000}, {0xc6d4c000}, {0xc6d4e000}, {0xc6d50000}, {0xc6d52000}, {0xc6d54000}, {0xc6d56000}, {0xc6d58000}, {0xc6d5a000}, {0xc6d5c000}, {0xc6d5e000}, {0xc6d60000}, {0xc6d62000}, {0xc6d64000}, {0xc6d66000}, {0xc6d68000}, {0xc6d6a000}, {0xc6d6c000}, {0xc6d6e000}, {0xc6d70000}, {0xc6d72000}, {0xc6d74000}, {0xc6d76000}, {0xc6d78000}, {0xc6d7a000}, {0xc6d7c000}, {0xc6d7e000}, {0xc6d80000}, {0xc6d82000}, {0xc6d84000}, {0xc6d86000}, {0xc6d88000}, {0xc6d8a000}, {0xc6d8c000}, {0xc6d8e000}, {0xc6d90000}, {0xc6d92000}, {0xc6d94000}, {0xc6d96000}, {0xc6d98000}, {0xc6d9a000}, {0xc6d9c000}, {0xc6d9e000}, {0xc6da0000}, {0xc6da2000}, {0xc6da4000}, {0xc6da6000}, {0xc6da8000}, {0xc6daa000}, {0xc6dac000}, {0xc6dae000}, {0xc6db0000}, {0xc6db2000}, {0xc6db4000}, {0xc6db6000}, {0xc6db8000}, {0xc6dba000}, {0xc6dbc000}, {0xc6dbe000}, {0xc6dc0000}, {0xc6dc2000}, {0xc6dc4000}, {0xc6dc6000}, {0xc6dc8000}, {0xc6dca000}, {0xc6dcc000}, {0xc6dce000}, {0xc6dd0000}, {0xc6dd2000}, {0xc6dd4000}, {0xc6dd6000}, {0xc6dd8000}, {0xc6dda000}, {0xc6ddc000}, {0xc6dde000}, {0xc6de0000}, {0xc6de2000}, {0xc6de4000}, {0xc6de6000}, {0xc6de8000}, {0xc6dea000}, {0xc6dec000}, {0xc6dee000}, {0xc6df0000}, {0xc6df2000}, {0xc6df4000}, {0xc6df6000}, {0xc6df8000}, {0xc6dfa000}, {0xc6dfc000}, {0xc6dfe000}, {0xc6e00000}, {0xc6e02000}, {0xc6e04000}, {0xc6e06000}, {0xc6e08000}, {0xc6e0a000}, {0xc6e0c000}, {0xc6e0e000}, {0xc6e10000}, {0xc6e12000}, {0xc6e14000}, {0xc6e16000}, {0xc6e18000}, {0xc6e1a000}, {0xc6e1c000}, {0xc6e1e000}, {0xc6e20000}, {0xc6e22000}, {0xc6e24000}, {0xc6e26000}, {0xc6e28000}, {0xc6e2a000}, {0xc6e2c000}, {0xc6e2e000}, {0xc6e30000}, {0xc6e32000}, {0xc6e34000}, {0xc6e36000}, {0xc6e38000}, {0xc6e3a000}, {0xc6e3c000}, {0xc6e3e000}, {0xc6e40000}, {0xc6e42000}, {0xc6e44000}, {0xc6e46000}, {0xc6e48000}, {0xc6e4a000}, {0xc6e4c000}, {0xc6e4e000}, {0xc6e50000}, {0xc6e52000}, {0xc6e54000}, {0xc6e56000}, {0xc6e58000}, {0xc6e5a000}, {0xc6e5c000}, {0xc6e5e000}, {0xc6e60000}, {0xc6e62000}, {0xc6e64000}, {0xc6e66000}, {0xc6e68000}, {0xc6e6a000}, {0xc6e6c000}, {0xc6e6e000}, {0xc6e70000}, {0xc6e72000}, {0xc6e74000}, {0xc6e76000}, {0xc6e78000}, {0xc6e7a000}, {0xc6e7c000}, {0xc6e7e000}, {0xc6e80000}, {0xc6e82000}, {0xc6e84000}, {0xc6e86000}, {0xc6e88000}, {0xc6e8a000}, {0xc6e8c000}, {0xc6e8e000}, {0xc6e90000}, {0xc6e92000}, {0xc6e94000}, {0xc6e96000}, {0xc6e98000}, {0xc6e9a000}, {0xc6e9c000}, {0xc6e9e000}, {0xc6ea0000}, {0xc6ea2000}, {0xc6ea4000}, {0xc6ea6000}, {0xc6ea8000}, {0xc6eaa000}, {0xc6eac000}, {0xc6eae000}, {0xc6eb0000}, {0xc6eb2000}, {0xc6eb4000}, {0xc6eb6000}, {0xc6eb8000}, {0xc6eba000}, {0xc6ebc000}, {0xc6ebe000}, {0xc6ec0000}, {0xc6ec2000}, {0xc6ec4000}, {0xc6ec6000}, {0xc6ec8000}, {0xc6eca000}, {0xc6ecc000}, {0xc6ece000}, {0xc6ed0000}, {0xc6ed2000}, {0xc6ed4000}, {0xc6ed6000}, {0xc6ed8000}, {0xc6eda000}, {0xc6edc000}, {0xc6ede000}, {0xc6ee0000}, {0xc6ee2000}, {0xc6ee4000}, {0xc6ee6000}, {0xc6ee8000}, {0xc6eea000}, {0xc6eec000}, {0xc6eee000}, {0xc6ef0000}, {0xc6ef2000}, {0xc6ef4000}, {0xc6ef6000}, {0xc6ef8000}, {0xc6efa000}, {0xc6efc000}, {0xc6efe000}, {0xc6f00000}, {0xc6f02000}, {0xc6f04000}, {0xc6f06000}, {0xc6f08000}, {0xc6f0a000}, {0xc6f0c000}, {0xc6f0e000}, {0xc6f10000}, {0xc6f12000}, {0xc6f14000}, {0xc6f16000}, {0xc6f18000}, {0xc6f1a000}, {0xc6f1c000}, {0xc6f1e000}, {0xc6f20000}, {0xc6f22000}, {0xc6f24000}, {0xc6f26000}, {0xc6f28000}, {0xc6f2a000}, {0xc6f2c000}, {0xc6f2e000}, {0xc6f30000}, {0xc6f32000}, {0xc6f34000}, {0xc6f36000}, {0xc6f38000}, {0xc6f3a000}, {0xc6f3c000}, {0xc6f3e000}, {0xc6f40000}, {0xc6f42000}, {0xc6f44000}, {0xc6f46000}, {0xc6f48000}, {0xc6f4a000}, {0xc6f4c000}, {0xc6f4e000}, {0xc6f50000}, {0xc6f52000}, {0xc6f54000}, {0xc6f56000}, {0xc6f58000}, {0xc6f5a000}, {0xc6f5c000}, {0xc6f5e000}, {0xc6f60000}, {0xc6f62000}, {0xc6f64000}, {0xc6f66000}, {0xc6f68000}, {0xc6f6a000}, {0xc6f6c000}, {0xc6f6e000}, {0xc6f70000}, {0xc6f72000}, {0xc6f74000}, {0xc6f76000}, {0xc6f78000}, {0xc6f7a000}, {0xc6f7c000}, {0xc6f7e000}, {0xc6f80000}, {0xc6f82000}, {0xc6f84000}, {0xc6f86000}, {0xc6f88000}, {0xc6f8a000}, {0xc6f8c000}, {0xc6f8e000}, {0xc6f90000}, {0xc6f92000}, {0xc6f94000}, {0xc6f96000}, {0xc6f98000}, {0xc6f9a000}, {0xc6f9c000}, {0xc6f9e000}, {0xc6fa0000}, {0xc6fa2000}, {0xc6fa4000}, {0xc6fa6000}, {0xc6fa8000}, {0xc6faa000}, {0xc6fac000}, {0xc6fae000}, {0xc6fb0000}, {0xc6fb2000}, {0xc6fb4000}, {0xc6fb6000}, {0xc6fb8000}, {0xc6fba000}, {0xc6fbc000}, {0xc6fbe000}, {0xc6fc0000}, {0xc6fc2000}, {0xc6fc4000}, {0xc6fc6000}, {0xc6fc8000}, {0xc6fca000}, {0xc6fcc000}, {0xc6fce000}, {0xc6fd0000}, {0xc6fd2000}, {0xc6fd4000}, {0xc6fd6000}, {0xc6fd8000}, {0xc6fda000}, {0xc6fdc000}, {0xc6fde000}, {0xc6fe0000}, {0xc6fe2000}, {0xc6fe4000}, {0xc6fe6000}, {0xc6fe8000}, {0xc6fea000}, {0xc6fec000}, {0xc6fee000}, {0xc6ff0000}, {0xc6ff2000}, {0xc6ff4000}, {0xc6ff6000}, {0xc6ff8000}, {0xc6ffa000}, {0xc6ffc000}, {0xc6ffe000}, {0xc7000000}, {0xc7002000}, {0xc7004000}, {0xc7006000}, {0xc7008000}, {0xc700a000}, {0xc700c000}, {0xc700e000}, {0xc7010000}, {0xc7012000}, {0xc7014000}, {0xc7016000}, {0xc7018000}, {0xc701a000}, {0xc701c000}, {0xc701e000}, {0xc7020000}, {0xc7022000}, {0xc7024000}, {0xc7026000}, {0xc7028000}, {0xc702a000}, {0xc702c000}, {0xc702e000}, {0xc7030000}, {0xc7032000}, {0xc7034000}, {0xc7036000}, {0xc7038000}, {0xc703a000}, {0xc703c000}, {0xc703e000}, {0xc7040000}, {0xc7042000}, {0xc7044000}, {0xc7046000}, {0xc7048000}, {0xc704a000}, {0xc704c000}, {0xc704e000}, {0xc7050000}, {0xc7052000}, {0xc7054000}, {0xc7056000}, {0xc7058000}, {0xc705a000}, {0xc705c000}, {0xc705e000}, {0xc7060000}, {0xc7062000}, {0xc7064000}, {0xc7066000}, {0xc7068000}, {0xc706a000}, {0xc706c000}, {0xc706e000}, {0xc7070000}, {0xc7072000}, {0xc7074000}, {0xc7076000}, {0xc7078000}, {0xc707a000}, {0xc707c000}, {0xc707e000}, {0xc7080000}, {0xc7082000}, {0xc7084000}, {0xc7086000}, {0xc7088000}, {0xc708a000}, {0xc708c000}, {0xc708e000}, {0xc7090000}, {0xc7092000}, {0xc7094000}, {0xc7096000}, {0xc7098000}, {0xc709a000}, {0xc709c000}, {0xc709e000}, {0xc70a0000}, {0xc70a2000}, {0xc70a4000}, {0xc70a6000}, {0xc70a8000}, {0xc70aa000}, {0xc70ac000}, {0xc70ae000}, {0xc70b0000}, {0xc70b2000}, {0xc70b4000}, {0xc70b6000}, {0xc70b8000}, {0xc70ba000}, {0xc70bc000}, {0xc70be000}, {0xc70c0000}, {0xc70c2000}, {0xc70c4000}, {0xc70c6000}, {0xc70c8000}, {0xc70ca000}, {0xc70cc000}, {0xc70ce000}, {0xc70d0000}, {0xc70d2000}, {0xc70d4000}, {0xc70d6000}, {0xc70d8000}, {0xc70da000}, {0xc70dc000}, {0xc70de000}, {0xc70e0000}, {0xc70e2000}, {0xc70e4000}, {0xc70e6000}, {0xc70e8000}, {0xc70ea000}, {0xc70ec000}, {0xc70ee000}, {0xc70f0000}, {0xc70f2000}, {0xc70f4000}, {0xc70f6000}, {0xc70f8000}, {0xc70fa000}, {0xc70fc000}, {0xc70fe000}, {0xc7100000}, {0xc7102000}, {0xc7104000}, {0xc7106000}, {0xc7108000}, {0xc710a000}, {0xc710c000}, {0xc710e000}, {0xc7110000}, {0xc7112000}, {0xc7114000}, {0xc7116000}, {0xc7118000}, {0xc711a000}, {0xc711c000}, {0xc711e000}, {0xc7120000}, {0xc7122000}, {0xc7124000}, {0xc7126000}, {0xc7128000}, {0xc712a000}, {0xc712c000}, {0xc712e000}, {0xc7130000}, {0xc7132000}, {0xc7134000}, {0xc7136000}, {0xc7138000}, {0xc713a000}, {0xc713c000}, {0xc713e000}, {0xc7140000}, {0xc7142000}, {0xc7144000}, {0xc7146000}, {0xc7148000}, {0xc714a000}, {0xc714c000}, {0xc714e000}, {0xc7150000}, {0xc7152000}, {0xc7154000}, {0xc7156000}, {0xc7158000}, {0xc715a000}, {0xc715c000}, {0xc715e000}, {0xc7160000}, {0xc7162000}, {0xc7164000}, {0xc7166000}, {0xc7168000}, {0xc716a000}, {0xc716c000}, {0xc716e000}, {0xc7170000}, {0xc7172000}, {0xc7174000}, {0xc7176000}, {0xc7178000}, {0xc717a000}, {0xc717c000}, {0xc717e000}, {0xc7180000}, {0xc7182000}, {0xc7184000}, {0xc7186000}, {0xc7188000}, {0xc718a000}, {0xc718c000}, {0xc718e000}, {0xc7190000}, {0xc7192000}, {0xc7194000}, {0xc7196000}, {0xc7198000}, {0xc719a000}, {0xc719c000}, {0xc719e000}, {0xc71a0000}, {0xc71a2000}, {0xc71a4000}, {0xc71a6000}, {0xc71a8000}, {0xc71aa000}, {0xc71ac000}, {0xc71ae000}, {0xc71b0000}, {0xc71b2000}, {0xc71b4000}, {0xc71b6000}, {0xc71b8000}, {0xc71ba000}, {0xc71bc000}, {0xc71be000}, {0xc71c0000}, {0xc71c2000}, {0xc71c4000}, {0xc71c6000}, {0xc71c8000}, {0xc71ca000}, {0xc71cc000}, {0xc71ce000}, {0xc71d0000}, {0xc71d2000}, {0xc71d4000}, {0xc71d6000}, {0xc71d8000}, {0xc71da000}, {0xc71dc000}, {0xc71de000}, {0xc71e0000}, {0xc71e2000}, {0xc71e4000}, {0xc71e6000}, {0xc71e8000}, {0xc71ea000}, {0xc71ec000}, {0xc71ee000}, {0xc71f0000}, {0xc71f2000}, {0xc71f4000}, {0xc71f6000}, {0xc71f8000}, {0xc71fa000}, {0xc71fc000}, {0xc71fe000}, {0xc7200000}, {0xc7202000}, {0xc7204000}, {0xc7206000}, {0xc7208000}, {0xc720a000}, {0xc720c000}, {0xc720e000}, {0xc7210000}, {0xc7212000}, {0xc7214000}, {0xc7216000}, {0xc7218000}, {0xc721a000}, {0xc721c000}, {0xc721e000}, {0xc7220000}, {0xc7222000}, {0xc7224000}, {0xc7226000}, {0xc7228000}, {0xc722a000}, {0xc722c000}, {0xc722e000}, {0xc7230000}, {0xc7232000}, {0xc7234000}, {0xc7236000}, {0xc7238000}, {0xc723a000}, {0xc723c000}, {0xc723e000}, {0xc7240000}, {0xc7242000}, {0xc7244000}, {0xc7246000}, {0xc7248000}, {0xc724a000}, {0xc724c000}, {0xc724e000}, {0xc7250000}, {0xc7252000}, {0xc7254000}, {0xc7256000}, {0xc7258000}, {0xc725a000}, {0xc725c000}, {0xc725e000}, {0xc7260000}, {0xc7262000}, {0xc7264000}, {0xc7266000}, {0xc7268000}, {0xc726a000}, {0xc726c000}, {0xc726e000}, {0xc7270000}, {0xc7272000}, {0xc7274000}, {0xc7276000}, {0xc7278000}, {0xc727a000}, {0xc727c000}, {0xc727e000}, {0xc7280000}, {0xc7282000}, {0xc7284000}, {0xc7286000}, {0xc7288000}, {0xc728a000}, {0xc728c000}, {0xc728e000}, {0xc7290000}, {0xc7292000}, {0xc7294000}, {0xc7296000}, {0xc7298000}, {0xc729a000}, {0xc729c000}, {0xc729e000}, {0xc72a0000}, {0xc72a2000}, {0xc72a4000}, {0xc72a6000}, {0xc72a8000}, {0xc72aa000}, {0xc72ac000}, {0xc72ae000}, {0xc72b0000}, {0xc72b2000}, {0xc72b4000}, {0xc72b6000}, {0xc72b8000}, {0xc72ba000}, {0xc72bc000}, {0xc72be000}, {0xc72c0000}, {0xc72c2000}, {0xc72c4000}, {0xc72c6000}, {0xc72c8000}, {0xc72ca000}, {0xc72cc000}, {0xc72ce000}, {0xc72d0000}, {0xc72d2000}, {0xc72d4000}, {0xc72d6000}, {0xc72d8000}, {0xc72da000}, {0xc72dc000}, {0xc72de000}, {0xc72e0000}, {0xc72e2000}, {0xc72e4000}, {0xc72e6000}, {0xc72e8000}, {0xc72ea000}, {0xc72ec000}, {0xc72ee000}, {0xc72f0000}, {0xc72f2000}, {0xc72f4000}, {0xc72f6000}, {0xc72f8000}, {0xc72fa000}, {0xc72fc000}, {0xc72fe000}, {0xc7300000}, {0xc7302000}, {0xc7304000}, {0xc7306000}, {0xc7308000}, {0xc730a000}, {0xc730c000}, {0xc730e000}, {0xc7310000}, {0xc7312000}, {0xc7314000}, {0xc7316000}, {0xc7318000}, {0xc731a000}, {0xc731c000}, {0xc731e000}, {0xc7320000}, {0xc7322000}, {0xc7324000}, {0xc7326000}, {0xc7328000}, {0xc732a000}, {0xc732c000}, {0xc732e000}, {0xc7330000}, {0xc7332000}, {0xc7334000}, {0xc7336000}, {0xc7338000}, {0xc733a000}, {0xc733c000}, {0xc733e000}, {0xc7340000}, {0xc7342000}, {0xc7344000}, {0xc7346000}, {0xc7348000}, {0xc734a000}, {0xc734c000}, {0xc734e000}, {0xc7350000}, {0xc7352000}, {0xc7354000}, {0xc7356000}, {0xc7358000}, {0xc735a000}, {0xc735c000}, {0xc735e000}, {0xc7360000}, {0xc7362000}, {0xc7364000}, {0xc7366000}, {0xc7368000}, {0xc736a000}, {0xc736c000}, {0xc736e000}, {0xc7370000}, {0xc7372000}, {0xc7374000}, {0xc7376000}, {0xc7378000}, {0xc737a000}, {0xc737c000}, {0xc737e000}, {0xc7380000}, {0xc7382000}, {0xc7384000}, {0xc7386000}, {0xc7388000}, {0xc738a000}, {0xc738c000}, {0xc738e000}, {0xc7390000}, {0xc7392000}, {0xc7394000}, {0xc7396000}, {0xc7398000}, {0xc739a000}, {0xc739c000}, {0xc739e000}, {0xc73a0000}, {0xc73a2000}, {0xc73a4000}, {0xc73a6000}, {0xc73a8000}, {0xc73aa000}, {0xc73ac000}, {0xc73ae000}, {0xc73b0000}, {0xc73b2000}, {0xc73b4000}, {0xc73b6000}, {0xc73b8000}, {0xc73ba000}, {0xc73bc000}, {0xc73be000}, {0xc73c0000}, {0xc73c2000}, {0xc73c4000}, {0xc73c6000}, {0xc73c8000}, {0xc73ca000}, {0xc73cc000}, {0xc73ce000}, {0xc73d0000}, {0xc73d2000}, {0xc73d4000}, {0xc73d6000}, {0xc73d8000}, {0xc73da000}, {0xc73dc000}, {0xc73de000}, {0xc73e0000}, {0xc73e2000}, {0xc73e4000}, {0xc73e6000}, {0xc73e8000}, {0xc73ea000}, {0xc73ec000}, {0xc73ee000}, {0xc73f0000}, {0xc73f2000}, {0xc73f4000}, {0xc73f6000}, {0xc73f8000}, {0xc73fa000}, {0xc73fc000}, {0xc73fe000}, {0xc7400000}, {0xc7402000}, {0xc7404000}, {0xc7406000}, {0xc7408000}, {0xc740a000}, {0xc740c000}, {0xc740e000}, {0xc7410000}, {0xc7412000}, {0xc7414000}, {0xc7416000}, {0xc7418000}, {0xc741a000}, {0xc741c000}, {0xc741e000}, {0xc7420000}, {0xc7422000}, {0xc7424000}, {0xc7426000}, {0xc7428000}, {0xc742a000}, {0xc742c000}, {0xc742e000}, {0xc7430000}, {0xc7432000}, {0xc7434000}, {0xc7436000}, {0xc7438000}, {0xc743a000}, {0xc743c000}, {0xc743e000}, {0xc7440000}, {0xc7442000}, {0xc7444000}, {0xc7446000}, {0xc7448000}, {0xc744a000}, {0xc744c000}, {0xc744e000}, {0xc7450000}, {0xc7452000}, {0xc7454000}, {0xc7456000}, {0xc7458000}, {0xc745a000}, {0xc745c000}, {0xc745e000}, {0xc7460000}, {0xc7462000}, {0xc7464000}, {0xc7466000}, {0xc7468000}, {0xc746a000}, {0xc746c000}, {0xc746e000}, {0xc7470000}, {0xc7472000}, {0xc7474000}, {0xc7476000}, {0xc7478000}, {0xc747a000}, {0xc747c000}, {0xc747e000}, {0xc7480000}, {0xc7482000}, {0xc7484000}, {0xc7486000}, {0xc7488000}, {0xc748a000}, {0xc748c000}, {0xc748e000}, {0xc7490000}, {0xc7492000}, {0xc7494000}, {0xc7496000}, {0xc7498000}, {0xc749a000}, {0xc749c000}, {0xc749e000}, {0xc74a0000}, {0xc74a2000}, {0xc74a4000}, {0xc74a6000}, {0xc74a8000}, {0xc74aa000}, {0xc74ac000}, {0xc74ae000}, {0xc74b0000}, {0xc74b2000}, {0xc74b4000}, {0xc74b6000}, {0xc74b8000}, {0xc74ba000}, {0xc74bc000}, {0xc74be000}, {0xc74c0000}, {0xc74c2000}, {0xc74c4000}, {0xc74c6000}, {0xc74c8000}, {0xc74ca000}, {0xc74cc000}, {0xc74ce000}, {0xc74d0000}, {0xc74d2000}, {0xc74d4000}, {0xc74d6000}, {0xc74d8000}, {0xc74da000}, {0xc74dc000}, {0xc74de000}, {0xc74e0000}, {0xc74e2000}, {0xc74e4000}, {0xc74e6000}, {0xc74e8000}, {0xc74ea000}, {0xc74ec000}, {0xc74ee000}, {0xc74f0000}, {0xc74f2000}, {0xc74f4000}, {0xc74f6000}, {0xc74f8000}, {0xc74fa000}, {0xc74fc000}, {0xc74fe000}, {0xc7500000}, {0xc7502000}, {0xc7504000}, {0xc7506000}, {0xc7508000}, {0xc750a000}, {0xc750c000}, {0xc750e000}, {0xc7510000}, {0xc7512000}, {0xc7514000}, {0xc7516000}, {0xc7518000}, {0xc751a000}, {0xc751c000}, {0xc751e000}, {0xc7520000}, {0xc7522000}, {0xc7524000}, {0xc7526000}, {0xc7528000}, {0xc752a000}, {0xc752c000}, {0xc752e000}, {0xc7530000}, {0xc7532000}, {0xc7534000}, {0xc7536000}, {0xc7538000}, {0xc753a000}, {0xc753c000}, {0xc753e000}, {0xc7540000}, {0xc7542000}, {0xc7544000}, {0xc7546000}, {0xc7548000}, {0xc754a000}, {0xc754c000}, {0xc754e000}, {0xc7550000}, {0xc7552000}, {0xc7554000}, {0xc7556000}, {0xc7558000}, {0xc755a000}, {0xc755c000}, {0xc755e000}, {0xc7560000}, {0xc7562000}, {0xc7564000}, {0xc7566000}, {0xc7568000}, {0xc756a000}, {0xc756c000}, {0xc756e000}, {0xc7570000}, {0xc7572000}, {0xc7574000}, {0xc7576000}, {0xc7578000}, {0xc757a000}, {0xc757c000}, {0xc757e000}, {0xc7580000}, {0xc7582000}, {0xc7584000}, {0xc7586000}, {0xc7588000}, {0xc758a000}, {0xc758c000}, {0xc758e000}, {0xc7590000}, {0xc7592000}, {0xc7594000}, {0xc7596000}, {0xc7598000}, {0xc759a000}, {0xc759c000}, {0xc759e000}, {0xc75a0000}, {0xc75a2000}, {0xc75a4000}, {0xc75a6000}, {0xc75a8000}, {0xc75aa000}, {0xc75ac000}, {0xc75ae000}, {0xc75b0000}, {0xc75b2000}, {0xc75b4000}, {0xc75b6000}, {0xc75b8000}, {0xc75ba000}, {0xc75bc000}, {0xc75be000}, {0xc75c0000}, {0xc75c2000}, {0xc75c4000}, {0xc75c6000}, {0xc75c8000}, {0xc75ca000}, {0xc75cc000}, {0xc75ce000}, {0xc75d0000}, {0xc75d2000}, {0xc75d4000}, {0xc75d6000}, {0xc75d8000}, {0xc75da000}, {0xc75dc000}, {0xc75de000}, {0xc75e0000}, {0xc75e2000}, {0xc75e4000}, {0xc75e6000}, {0xc75e8000}, {0xc75ea000}, {0xc75ec000}, {0xc75ee000}, {0xc75f0000}, {0xc75f2000}, {0xc75f4000}, {0xc75f6000}, {0xc75f8000}, {0xc75fa000}, {0xc75fc000}, {0xc75fe000}, {0xc7600000}, {0xc7602000}, {0xc7604000}, {0xc7606000}, {0xc7608000}, {0xc760a000}, {0xc760c000}, {0xc760e000}, {0xc7610000}, {0xc7612000}, {0xc7614000}, {0xc7616000}, {0xc7618000}, {0xc761a000}, {0xc761c000}, {0xc761e000}, {0xc7620000}, {0xc7622000}, {0xc7624000}, {0xc7626000}, {0xc7628000}, {0xc762a000}, {0xc762c000}, {0xc762e000}, {0xc7630000}, {0xc7632000}, {0xc7634000}, {0xc7636000}, {0xc7638000}, {0xc763a000}, {0xc763c000}, {0xc763e000}, {0xc7640000}, {0xc7642000}, {0xc7644000}, {0xc7646000}, {0xc7648000}, {0xc764a000}, {0xc764c000}, {0xc764e000}, {0xc7650000}, {0xc7652000}, {0xc7654000}, {0xc7656000}, {0xc7658000}, {0xc765a000}, {0xc765c000}, {0xc765e000}, {0xc7660000}, {0xc7662000}, {0xc7664000}, {0xc7666000}, {0xc7668000}, {0xc766a000}, {0xc766c000}, {0xc766e000}, {0xc7670000}, {0xc7672000}, {0xc7674000}, {0xc7676000}, {0xc7678000}, {0xc767a000}, {0xc767c000}, {0xc767e000}, {0xc7680000}, {0xc7682000}, {0xc7684000}, {0xc7686000}, {0xc7688000}, {0xc768a000}, {0xc768c000}, {0xc768e000}, {0xc7690000}, {0xc7692000}, {0xc7694000}, {0xc7696000}, {0xc7698000}, {0xc769a000}, {0xc769c000}, {0xc769e000}, {0xc76a0000}, {0xc76a2000}, {0xc76a4000}, {0xc76a6000}, {0xc76a8000}, {0xc76aa000}, {0xc76ac000}, {0xc76ae000}, {0xc76b0000}, {0xc76b2000}, {0xc76b4000}, {0xc76b6000}, {0xc76b8000}, {0xc76ba000}, {0xc76bc000}, {0xc76be000}, {0xc76c0000}, {0xc76c2000}, {0xc76c4000}, {0xc76c6000}, {0xc76c8000}, {0xc76ca000}, {0xc76cc000}, {0xc76ce000}, {0xc76d0000}, {0xc76d2000}, {0xc76d4000}, {0xc76d6000}, {0xc76d8000}, {0xc76da000}, {0xc76dc000}, {0xc76de000}, {0xc76e0000}, {0xc76e2000}, {0xc76e4000}, {0xc76e6000}, {0xc76e8000}, {0xc76ea000}, {0xc76ec000}, {0xc76ee000}, {0xc76f0000}, {0xc76f2000}, {0xc76f4000}, {0xc76f6000}, {0xc76f8000}, {0xc76fa000}, {0xc76fc000}, {0xc76fe000}, {0xc7700000}, {0xc7702000}, {0xc7704000}, {0xc7706000}, {0xc7708000}, {0xc770a000}, {0xc770c000}, {0xc770e000}, {0xc7710000}, {0xc7712000}, {0xc7714000}, {0xc7716000}, {0xc7718000}, {0xc771a000}, {0xc771c000}, {0xc771e000}, {0xc7720000}, {0xc7722000}, {0xc7724000}, {0xc7726000}, {0xc7728000}, {0xc772a000}, {0xc772c000}, {0xc772e000}, {0xc7730000}, {0xc7732000}, {0xc7734000}, {0xc7736000}, {0xc7738000}, {0xc773a000}, {0xc773c000}, {0xc773e000}, {0xc7740000}, {0xc7742000}, {0xc7744000}, {0xc7746000}, {0xc7748000}, {0xc774a000}, {0xc774c000}, {0xc774e000}, {0xc7750000}, {0xc7752000}, {0xc7754000}, {0xc7756000}, {0xc7758000}, {0xc775a000}, {0xc775c000}, {0xc775e000}, {0xc7760000}, {0xc7762000}, {0xc7764000}, {0xc7766000}, {0xc7768000}, {0xc776a000}, {0xc776c000}, {0xc776e000}, {0xc7770000}, {0xc7772000}, {0xc7774000}, {0xc7776000}, {0xc7778000}, {0xc777a000}, {0xc777c000}, {0xc777e000}, {0xc7780000}, {0xc7782000}, {0xc7784000}, {0xc7786000}, {0xc7788000}, {0xc778a000}, {0xc778c000}, {0xc778e000}, {0xc7790000}, {0xc7792000}, {0xc7794000}, {0xc7796000}, {0xc7798000}, {0xc779a000}, {0xc779c000}, {0xc779e000}, {0xc77a0000}, {0xc77a2000}, {0xc77a4000}, {0xc77a6000}, {0xc77a8000}, {0xc77aa000}, {0xc77ac000}, {0xc77ae000}, {0xc77b0000}, {0xc77b2000}, {0xc77b4000}, {0xc77b6000}, {0xc77b8000}, {0xc77ba000}, {0xc77bc000}, {0xc77be000}, {0xc77c0000}, {0xc77c2000}, {0xc77c4000}, {0xc77c6000}, {0xc77c8000}, {0xc77ca000}, {0xc77cc000}, {0xc77ce000}, {0xc77d0000}, {0xc77d2000}, {0xc77d4000}, {0xc77d6000}, {0xc77d8000}, {0xc77da000}, {0xc77dc000}, {0xc77de000}, {0xc77e0000}, {0xc77e2000}, {0xc77e4000}, {0xc77e6000}, {0xc77e8000}, {0xc77ea000}, {0xc77ec000}, {0xc77ee000}, {0xc77f0000}, {0xc77f2000}, {0xc77f4000}, {0xc77f6000}, {0xc77f8000}, {0xc77fa000}, {0xc77fc000}, {0xc77fe000}, {0xff800000}, {0xff802000}, {0xff804000}, {0xff806000}, {0xff808000}, {0xff80a000}, {0xff80c000}, {0xff80e000}, {0xff810000}, {0xff812000}, {0xff814000}, {0xff816000}, {0xff818000}, {0xff81a000}, {0xff81c000}, {0xff81e000}, {0xff820000}, {0xff822000}, {0xff824000}, {0xff826000}, {0xff828000}, {0xff82a000}, {0xff82c000}, {0xff82e000}, {0xff830000}, {0xff832000}, {0xff834000}, {0xff836000}, {0xff838000}, {0xff83a000}, {0xff83c000}, {0xff83e000}, {0xff840000}, {0xff842000}, {0xff844000}, {0xff846000}, {0xff848000}, {0xff84a000}, {0xff84c000}, {0xff84e000}, {0xff850000}, {0xff852000}, {0xff854000}, {0xff856000}, {0xff858000}, {0xff85a000}, {0xff85c000}, {0xff85e000}, {0xff860000}, {0xff862000}, {0xff864000}, {0xff866000}, {0xff868000}, {0xff86a000}, {0xff86c000}, {0xff86e000}, {0xff870000}, {0xff872000}, {0xff874000}, {0xff876000}, {0xff878000}, {0xff87a000}, {0xff87c000}, {0xff87e000}, {0xff880000}, {0xff882000}, {0xff884000}, {0xff886000}, {0xff888000}, {0xff88a000}, {0xff88c000}, {0xff88e000}, {0xff890000}, {0xff892000}, {0xff894000}, {0xff896000}, {0xff898000}, {0xff89a000}, {0xff89c000}, {0xff89e000}, {0xff8a0000}, {0xff8a2000}, {0xff8a4000}, {0xff8a6000}, {0xff8a8000}, {0xff8aa000}, {0xff8ac000}, {0xff8ae000}, {0xff8b0000}, {0xff8b2000}, {0xff8b4000}, {0xff8b6000}, {0xff8b8000}, {0xff8ba000}, {0xff8bc000}, {0xff8be000}, {0xff8c0000}, {0xff8c2000}, {0xff8c4000}, {0xff8c6000}, {0xff8c8000}, {0xff8ca000}, {0xff8cc000}, {0xff8ce000}, {0xff8d0000}, {0xff8d2000}, {0xff8d4000}, {0xff8d6000}, {0xff8d8000}, {0xff8da000}, {0xff8dc000}, {0xff8de000}, {0xff8e0000}, {0xff8e2000}, {0xff8e4000}, {0xff8e6000}, {0xff8e8000}, {0xff8ea000}, {0xff8ec000}, {0xff8ee000}, {0xff8f0000}, {0xff8f2000}, {0xff8f4000}, {0xff8f6000}, {0xff8f8000}, {0xff8fa000}, {0xff8fc000}, {0xff8fe000}, {0xff900000}, {0xff902000}, {0xff904000}, {0xff906000}, {0xff908000}, {0xff90a000}, {0xff90c000}, {0xff90e000}, {0xff910000}, {0xff912000}, {0xff914000}, {0xff916000}, {0xff918000}, {0xff91a000}, {0xff91c000}, {0xff91e000}, {0xff920000}, {0xff922000}, {0xff924000}, {0xff926000}, {0xff928000}, {0xff92a000}, {0xff92c000}, {0xff92e000}, {0xff930000}, {0xff932000}, {0xff934000}, {0xff936000}, {0xff938000}, {0xff93a000}, {0xff93c000}, {0xff93e000}, {0xff940000}, {0xff942000}, {0xff944000}, {0xff946000}, {0xff948000}, {0xff94a000}, {0xff94c000}, {0xff94e000}, {0xff950000}, {0xff952000}, {0xff954000}, {0xff956000}, {0xff958000}, {0xff95a000}, {0xff95c000}, {0xff95e000}, {0xff960000}, {0xff962000}, {0xff964000}, {0xff966000}, {0xff968000}, {0xff96a000}, {0xff96c000}, {0xff96e000}, {0xff970000}, {0xff972000}, {0xff974000}, {0xff976000}, {0xff978000}, {0xff97a000}, {0xff97c000}, {0xff97e000}, {0xff980000}, {0xff982000}, {0xff984000}, {0xff986000}, {0xff988000}, {0xff98a000}, {0xff98c000}, {0xff98e000}, {0xff990000}, {0xff992000}, {0xff994000}, {0xff996000}, {0xff998000}, {0xff99a000}, {0xff99c000}, {0xff99e000}, {0xff9a0000}, {0xff9a2000}, {0xff9a4000}, {0xff9a6000}, {0xff9a8000}, {0xff9aa000}, {0xff9ac000}, {0xff9ae000}, {0xff9b0000}, {0xff9b2000}, {0xff9b4000}, {0xff9b6000}, {0xff9b8000}, {0xff9ba000}, {0xff9bc000}, {0xff9be000}, {0xff9c0000}, {0xff9c2000}, {0xff9c4000}, {0xff9c6000}, {0xff9c8000}, {0xff9ca000}, {0xff9cc000}, {0xff9ce000}, {0xff9d0000}, {0xff9d2000}, {0xff9d4000}, {0xff9d6000}, {0xff9d8000}, {0xff9da000}, {0xff9dc000}, {0xff9de000}, {0xff9e0000}, {0xff9e2000}, {0xff9e4000}, {0xff9e6000}, {0xff9e8000}, {0xff9ea000}, {0xff9ec000}, {0xff9ee000}, {0xff9f0000}, {0xff9f2000}, {0xff9f4000}, {0xff9f6000}, {0xff9f8000}, {0xff9fa000}, {0xff9fc000}, {0xff9fe000}, {0xffa00000}, {0xffa02000}, {0xffa04000}, {0xffa06000}, {0xffa08000}, {0xffa0a000}, {0xffa0c000}, {0xffa0e000}, {0xffa10000}, {0xffa12000}, {0xffa14000}, {0xffa16000}, {0xffa18000}, {0xffa1a000}, {0xffa1c000}, {0xffa1e000}, {0xffa20000}, {0xffa22000}, {0xffa24000}, {0xffa26000}, {0xffa28000}, {0xffa2a000}, {0xffa2c000}, {0xffa2e000}, {0xffa30000}, {0xffa32000}, {0xffa34000}, {0xffa36000}, {0xffa38000}, {0xffa3a000}, {0xffa3c000}, {0xffa3e000}, {0xffa40000}, {0xffa42000}, {0xffa44000}, {0xffa46000}, {0xffa48000}, {0xffa4a000}, {0xffa4c000}, {0xffa4e000}, {0xffa50000}, {0xffa52000}, {0xffa54000}, {0xffa56000}, {0xffa58000}, {0xffa5a000}, {0xffa5c000}, {0xffa5e000}, {0xffa60000}, {0xffa62000}, {0xffa64000}, {0xffa66000}, {0xffa68000}, {0xffa6a000}, {0xffa6c000}, {0xffa6e000}, {0xffa70000}, {0xffa72000}, {0xffa74000}, {0xffa76000}, {0xffa78000}, {0xffa7a000}, {0xffa7c000}, {0xffa7e000}, {0xffa80000}, {0xffa82000}, {0xffa84000}, {0xffa86000}, {0xffa88000}, {0xffa8a000}, {0xffa8c000}, {0xffa8e000}, {0xffa90000}, {0xffa92000}, {0xffa94000}, {0xffa96000}, {0xffa98000}, {0xffa9a000}, {0xffa9c000}, {0xffa9e000}, {0xffaa0000}, {0xffaa2000}, {0xffaa4000}, {0xffaa6000}, {0xffaa8000}, {0xffaaa000}, {0xffaac000}, {0xffaae000}, {0xffab0000}, {0xffab2000}, {0xffab4000}, {0xffab6000}, {0xffab8000}, {0xffaba000}, {0xffabc000}, {0xffabe000}, {0xffac0000}, {0xffac2000}, {0xffac4000}, {0xffac6000}, {0xffac8000}, {0xffaca000}, {0xffacc000}, {0xfface000}, {0xffad0000}, {0xffad2000}, {0xffad4000}, {0xffad6000}, {0xffad8000}, {0xffada000}, {0xffadc000}, {0xffade000}, {0xffae0000}, {0xffae2000}, {0xffae4000}, {0xffae6000}, {0xffae8000}, {0xffaea000}, {0xffaec000}, {0xffaee000}, {0xffaf0000}, {0xffaf2000}, {0xffaf4000}, {0xffaf6000}, {0xffaf8000}, {0xffafa000}, {0xffafc000}, {0xffafe000}, {0xffb00000}, {0xffb02000}, {0xffb04000}, {0xffb06000}, {0xffb08000}, {0xffb0a000}, {0xffb0c000}, {0xffb0e000}, {0xffb10000}, {0xffb12000}, {0xffb14000}, {0xffb16000}, {0xffb18000}, {0xffb1a000}, {0xffb1c000}, {0xffb1e000}, {0xffb20000}, {0xffb22000}, {0xffb24000}, {0xffb26000}, {0xffb28000}, {0xffb2a000}, {0xffb2c000}, {0xffb2e000}, {0xffb30000}, {0xffb32000}, {0xffb34000}, {0xffb36000}, {0xffb38000}, {0xffb3a000}, {0xffb3c000}, {0xffb3e000}, {0xffb40000}, {0xffb42000}, {0xffb44000}, {0xffb46000}, {0xffb48000}, {0xffb4a000}, {0xffb4c000}, {0xffb4e000}, {0xffb50000}, {0xffb52000}, {0xffb54000}, {0xffb56000}, {0xffb58000}, {0xffb5a000}, {0xffb5c000}, {0xffb5e000}, {0xffb60000}, {0xffb62000}, {0xffb64000}, {0xffb66000}, {0xffb68000}, {0xffb6a000}, {0xffb6c000}, {0xffb6e000}, {0xffb70000}, {0xffb72000}, {0xffb74000}, {0xffb76000}, {0xffb78000}, {0xffb7a000}, {0xffb7c000}, {0xffb7e000}, {0xffb80000}, {0xffb82000}, {0xffb84000}, {0xffb86000}, {0xffb88000}, {0xffb8a000}, {0xffb8c000}, {0xffb8e000}, {0xffb90000}, {0xffb92000}, {0xffb94000}, {0xffb96000}, {0xffb98000}, {0xffb9a000}, {0xffb9c000}, {0xffb9e000}, {0xffba0000}, {0xffba2000}, {0xffba4000}, {0xffba6000}, {0xffba8000}, {0xffbaa000}, {0xffbac000}, {0xffbae000}, {0xffbb0000}, {0xffbb2000}, {0xffbb4000}, {0xffbb6000}, {0xffbb8000}, {0xffbba000}, {0xffbbc000}, {0xffbbe000}, {0xffbc0000}, {0xffbc2000}, {0xffbc4000}, {0xffbc6000}, {0xffbc8000}, {0xffbca000}, {0xffbcc000}, {0xffbce000}, {0xffbd0000}, {0xffbd2000}, {0xffbd4000}, {0xffbd6000}, {0xffbd8000}, {0xffbda000}, {0xffbdc000}, {0xffbde000}, {0xffbe0000}, {0xffbe2000}, {0xffbe4000}, {0xffbe6000}, {0xffbe8000}, {0xffbea000}, {0xffbec000}, {0xffbee000}, {0xffbf0000}, {0xffbf2000}, {0xffbf4000}, {0xffbf6000}, {0xffbf8000}, {0xffbfa000}, {0xffbfc000}, {0xffbfe000}, {0xffc00000}, {0xffc02000}, {0xffc04000}, {0xffc06000}, {0xffc08000}, {0xffc0a000}, {0xffc0c000}, {0xffc0e000}, {0xffc10000}, {0xffc12000}, {0xffc14000}, {0xffc16000}, {0xffc18000}, {0xffc1a000}, {0xffc1c000}, {0xffc1e000}, {0xffc20000}, {0xffc22000}, {0xffc24000}, {0xffc26000}, {0xffc28000}, {0xffc2a000}, {0xffc2c000}, {0xffc2e000}, {0xffc30000}, {0xffc32000}, {0xffc34000}, {0xffc36000}, {0xffc38000}, {0xffc3a000}, {0xffc3c000}, {0xffc3e000}, {0xffc40000}, {0xffc42000}, {0xffc44000}, {0xffc46000}, {0xffc48000}, {0xffc4a000}, {0xffc4c000}, {0xffc4e000}, {0xffc50000}, {0xffc52000}, {0xffc54000}, {0xffc56000}, {0xffc58000}, {0xffc5a000}, {0xffc5c000}, {0xffc5e000}, {0xffc60000}, {0xffc62000}, {0xffc64000}, {0xffc66000}, {0xffc68000}, {0xffc6a000}, {0xffc6c000}, {0xffc6e000}, {0xffc70000}, {0xffc72000}, {0xffc74000}, {0xffc76000}, {0xffc78000}, {0xffc7a000}, {0xffc7c000}, {0xffc7e000}, {0xffc80000}, {0xffc82000}, {0xffc84000}, {0xffc86000}, {0xffc88000}, {0xffc8a000}, {0xffc8c000}, {0xffc8e000}, {0xffc90000}, {0xffc92000}, {0xffc94000}, {0xffc96000}, {0xffc98000}, {0xffc9a000}, {0xffc9c000}, {0xffc9e000}, {0xffca0000}, {0xffca2000}, {0xffca4000}, {0xffca6000}, {0xffca8000}, {0xffcaa000}, {0xffcac000}, {0xffcae000}, {0xffcb0000}, {0xffcb2000}, {0xffcb4000}, {0xffcb6000}, {0xffcb8000}, {0xffcba000}, {0xffcbc000}, {0xffcbe000}, {0xffcc0000}, {0xffcc2000}, {0xffcc4000}, {0xffcc6000}, {0xffcc8000}, {0xffcca000}, {0xffccc000}, {0xffcce000}, {0xffcd0000}, {0xffcd2000}, {0xffcd4000}, {0xffcd6000}, {0xffcd8000}, {0xffcda000}, {0xffcdc000}, {0xffcde000}, {0xffce0000}, {0xffce2000}, {0xffce4000}, {0xffce6000}, {0xffce8000}, {0xffcea000}, {0xffcec000}, {0xffcee000}, {0xffcf0000}, {0xffcf2000}, {0xffcf4000}, {0xffcf6000}, {0xffcf8000}, {0xffcfa000}, {0xffcfc000}, {0xffcfe000}, {0xffd00000}, {0xffd02000}, {0xffd04000}, {0xffd06000}, {0xffd08000}, {0xffd0a000}, {0xffd0c000}, {0xffd0e000}, {0xffd10000}, {0xffd12000}, {0xffd14000}, {0xffd16000}, {0xffd18000}, {0xffd1a000}, {0xffd1c000}, {0xffd1e000}, {0xffd20000}, {0xffd22000}, {0xffd24000}, {0xffd26000}, {0xffd28000}, {0xffd2a000}, {0xffd2c000}, {0xffd2e000}, {0xffd30000}, {0xffd32000}, {0xffd34000}, {0xffd36000}, {0xffd38000}, {0xffd3a000}, {0xffd3c000}, {0xffd3e000}, {0xffd40000}, {0xffd42000}, {0xffd44000}, {0xffd46000}, {0xffd48000}, {0xffd4a000}, {0xffd4c000}, {0xffd4e000}, {0xffd50000}, {0xffd52000}, {0xffd54000}, {0xffd56000}, {0xffd58000}, {0xffd5a000}, {0xffd5c000}, {0xffd5e000}, {0xffd60000}, {0xffd62000}, {0xffd64000}, {0xffd66000}, {0xffd68000}, {0xffd6a000}, {0xffd6c000}, {0xffd6e000}, {0xffd70000}, {0xffd72000}, {0xffd74000}, {0xffd76000}, {0xffd78000}, {0xffd7a000}, {0xffd7c000}, {0xffd7e000}, {0xffd80000}, {0xffd82000}, {0xffd84000}, {0xffd86000}, {0xffd88000}, {0xffd8a000}, {0xffd8c000}, {0xffd8e000}, {0xffd90000}, {0xffd92000}, {0xffd94000}, {0xffd96000}, {0xffd98000}, {0xffd9a000}, {0xffd9c000}, {0xffd9e000}, {0xffda0000}, {0xffda2000}, {0xffda4000}, {0xffda6000}, {0xffda8000}, {0xffdaa000}, {0xffdac000}, {0xffdae000}, {0xffdb0000}, {0xffdb2000}, {0xffdb4000}, {0xffdb6000}, {0xffdb8000}, {0xffdba000}, {0xffdbc000}, {0xffdbe000}, {0xffdc0000}, {0xffdc2000}, {0xffdc4000}, {0xffdc6000}, {0xffdc8000}, {0xffdca000}, {0xffdcc000}, {0xffdce000}, {0xffdd0000}, {0xffdd2000}, {0xffdd4000}, {0xffdd6000}, {0xffdd8000}, {0xffdda000}, {0xffddc000}, {0xffdde000}, {0xffde0000}, {0xffde2000}, {0xffde4000}, {0xffde6000}, {0xffde8000}, {0xffdea000}, {0xffdec000}, {0xffdee000}, {0xffdf0000}, {0xffdf2000}, {0xffdf4000}, {0xffdf6000}, {0xffdf8000}, {0xffdfa000}, {0xffdfc000}, {0xffdfe000}, {0xffe00000}, {0xffe02000}, {0xffe04000}, {0xffe06000}, {0xffe08000}, {0xffe0a000}, {0xffe0c000}, {0xffe0e000}, {0xffe10000}, {0xffe12000}, {0xffe14000}, {0xffe16000}, {0xffe18000}, {0xffe1a000}, {0xffe1c000}, {0xffe1e000}, {0xffe20000}, {0xffe22000}, {0xffe24000}, {0xffe26000}, {0xffe28000}, {0xffe2a000}, {0xffe2c000}, {0xffe2e000}, {0xffe30000}, {0xffe32000}, {0xffe34000}, {0xffe36000}, {0xffe38000}, {0xffe3a000}, {0xffe3c000}, {0xffe3e000}, {0xffe40000}, {0xffe42000}, {0xffe44000}, {0xffe46000}, {0xffe48000}, {0xffe4a000}, {0xffe4c000}, {0xffe4e000}, {0xffe50000}, {0xffe52000}, {0xffe54000}, {0xffe56000}, {0xffe58000}, {0xffe5a000}, {0xffe5c000}, {0xffe5e000}, {0xffe60000}, {0xffe62000}, {0xffe64000}, {0xffe66000}, {0xffe68000}, {0xffe6a000}, {0xffe6c000}, {0xffe6e000}, {0xffe70000}, {0xffe72000}, {0xffe74000}, {0xffe76000}, {0xffe78000}, {0xffe7a000}, {0xffe7c000}, {0xffe7e000}, {0xffe80000}, {0xffe82000}, {0xffe84000}, {0xffe86000}, {0xffe88000}, {0xffe8a000}, {0xffe8c000}, {0xffe8e000}, {0xffe90000}, {0xffe92000}, {0xffe94000}, {0xffe96000}, {0xffe98000}, {0xffe9a000}, {0xffe9c000}, {0xffe9e000}, {0xffea0000}, {0xffea2000}, {0xffea4000}, {0xffea6000}, {0xffea8000}, {0xffeaa000}, {0xffeac000}, {0xffeae000}, {0xffeb0000}, {0xffeb2000}, {0xffeb4000}, {0xffeb6000}, {0xffeb8000}, {0xffeba000}, {0xffebc000}, {0xffebe000}, {0xffec0000}, {0xffec2000}, {0xffec4000}, {0xffec6000}, {0xffec8000}, {0xffeca000}, {0xffecc000}, {0xffece000}, {0xffed0000}, {0xffed2000}, {0xffed4000}, {0xffed6000}, {0xffed8000}, {0xffeda000}, {0xffedc000}, {0xffede000}, {0xffee0000}, {0xffee2000}, {0xffee4000}, {0xffee6000}, {0xffee8000}, {0xffeea000}, {0xffeec000}, {0xffeee000}, {0xffef0000}, {0xffef2000}, {0xffef4000}, {0xffef6000}, {0xffef8000}, {0xffefa000}, {0xffefc000}, {0xffefe000}, {0xfff00000}, {0xfff02000}, {0xfff04000}, {0xfff06000}, {0xfff08000}, {0xfff0a000}, {0xfff0c000}, {0xfff0e000}, {0xfff10000}, {0xfff12000}, {0xfff14000}, {0xfff16000}, {0xfff18000}, {0xfff1a000}, {0xfff1c000}, {0xfff1e000}, {0xfff20000}, {0xfff22000}, {0xfff24000}, {0xfff26000}, {0xfff28000}, {0xfff2a000}, {0xfff2c000}, {0xfff2e000}, {0xfff30000}, {0xfff32000}, {0xfff34000}, {0xfff36000}, {0xfff38000}, {0xfff3a000}, {0xfff3c000}, {0xfff3e000}, {0xfff40000}, {0xfff42000}, {0xfff44000}, {0xfff46000}, {0xfff48000}, {0xfff4a000}, {0xfff4c000}, {0xfff4e000}, {0xfff50000}, {0xfff52000}, {0xfff54000}, {0xfff56000}, {0xfff58000}, {0xfff5a000}, {0xfff5c000}, {0xfff5e000}, {0xfff60000}, {0xfff62000}, {0xfff64000}, {0xfff66000}, {0xfff68000}, {0xfff6a000}, {0xfff6c000}, {0xfff6e000}, {0xfff70000}, {0xfff72000}, {0xfff74000}, {0xfff76000}, {0xfff78000}, {0xfff7a000}, {0xfff7c000}, {0xfff7e000}, {0xfff80000}, {0xfff82000}, {0xfff84000}, {0xfff86000}, {0xfff88000}, {0xfff8a000}, {0xfff8c000}, {0xfff8e000}, {0xfff90000}, {0xfff92000}, {0xfff94000}, {0xfff96000}, {0xfff98000}, {0xfff9a000}, {0xfff9c000}, {0xfff9e000}, {0xfffa0000}, {0xfffa2000}, {0xfffa4000}, {0xfffa6000}, {0xfffa8000}, {0xfffaa000}, {0xfffac000}, {0xfffae000}, {0xfffb0000}, {0xfffb2000}, {0xfffb4000}, {0xfffb6000}, {0xfffb8000}, {0xfffba000}, {0xfffbc000}, {0xfffbe000}, {0xfffc0000}, {0xfffc2000}, {0xfffc4000}, {0xfffc6000}, {0xfffc8000}, {0xfffca000}, {0xfffcc000}, {0xfffce000}, {0xfffd0000}, {0xfffd2000}, {0xfffd4000}, {0xfffd6000}, {0xfffd8000}, {0xfffda000}, {0xfffdc000}, {0xfffde000}, {0xfffe0000}, {0xfffe2000}, {0xfffe4000}, {0xfffe6000}, {0xfffe8000}, {0xfffea000}, {0xfffec000}, {0xfffee000}, {0xffff0000}, {0xffff2000}, {0xffff4000}, {0xffff6000}, {0xffff8000}, {0xffffa000}, {0xffffc000}, {0xffffe000}, }; jellyfish-1.1.11/jellyfish/reversible_hash_function.hpp0000644015303500042660000000150012151455365020275 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_REVERSIBLE_HASH_FUNCTION_HPP__ #define __JELLYFISH_REVERSIBLE_HASH_FUNCTION_HPP__ #endif // __REVERSIBLE_HASH_FUNCTION_HPP__ jellyfish-1.1.11/jellyfish/storage.cc0000644015303500042660000000531212151455365014472 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include "config.h" #include namespace jellyfish { size_t _quadratic_reprobes[257] = { 1, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 1326, 1378, 1431, 1485, 1540, 1596, 1653, 1711, 1770, 1830, 1891, 1953, 2016, 2080, 2145, 2211, 2278, 2346, 2415, 2485, 2556, 2628, 2701, 2775, 2850, 2926, 3003, 3081, 3160, 3240, 3321, 3403, 3486, 3570, 3655, 3741, 3828, 3916, 4005, 4095, 4186, 4278, 4371, 4465, 4560, 4656, 4753, 4851, 4950, 5050, 5151, 5253, 5356, 5460, 5565, 5671, 5778, 5886, 5995, 6105, 6216, 6328, 6441, 6555, 6670, 6786, 6903, 7021, 7140, 7260, 7381, 7503, 7626, 7750, 7875, 8001, 8128, 8256, 8385, 8515, 8646, 8778, 8911, 9045, 9180, 9316, 9453, 9591, 9730, 9870, 10011, 10153, 10296, 10440, 10585, 10731, 10878, 11026, 11175, 11325, 11476, 11628, 11781, 11935, 12090, 12246, 12403, 12561, 12720, 12880, 13041, 13203, 13366, 13530, 13695, 13861, 14028, 14196, 14365, 14535, 14706, 14878, 15051, 15225, 15400, 15576, 15753, 15931, 16110, 16290, 16471, 16653, 16836, 17020, 17205, 17391, 17578, 17766, 17955, 18145, 18336, 18528, 18721, 18915, 19110, 19306, 19503, 19701, 19900, 20100, 20301, 20503, 20706, 20910, 21115, 21321, 21528, 21736, 21945, 22155, 22366, 22578, 22791, 23005, 23220, 23436, 23653, 23871, 24090, 24310, 24531, 24753, 24976, 25200, 25425, 25651, 25878, 26106, 26335, 26565, 26796, 27028, 27261, 27495, 27730, 27966, 28203, 28441, 28680, 28920, 29161, 29403, 29646, 29890, 30135, 30381, 30628, 30876, 31125, 31375, 31626, 31878, 32131, 32385, 32640, 32896 }; size_t *quadratic_reprobes = _quadratic_reprobes; } jellyfish-1.1.11/jellyfish/cite_cmdline.hpp0000644015303500042660000000643312151455365015654 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __CITE_CMDLINE_HPP__ #define __CITE_CMDLINE_HPP__ #include class cite_cmdline { public: bool bibtex_flag; const char * output_arg; bool output_given; enum { USAGE_OPT = 1000 }; cite_cmdline() : bibtex_flag(false), output_arg(""), output_given(false) { } cite_cmdline(int argc, char* argv[]) : bibtex_flag(false), output_arg(""), output_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"bibtex", 0, 0, 'b'}, {"output", 1, 0, 'o'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVbo:"; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 'b': bibtex_flag = true; break; case 'o': output_given = true; output_arg = optarg; break; } } // Parse arguments if(argc - optind != 0) error("Requires exactly 0 argument."); } #define cite_cmdline_USAGE "Usage: jellyfish cite [options]" const char * usage() const { return cite_cmdline_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define cite_cmdline_HELP "How to cite Jellyfish's paper\n\nCitation of paper\n\n" \ "Options (default value in (), *required):\n" \ " -b, --bibtex Bibtex format (false)\n" \ " -o, --output=string Output file\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return cite_cmdline_HELP; } #define cite_cmdline_HIDDEN "Hidden options:" const char * hidden() const { return cite_cmdline_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "bibtex_flag:" << bibtex_flag << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; } private: }; #endif // __CITE_CMDLINE_HPP__" jellyfish-1.1.11/jellyfish/capped_integer.hpp0000644015303500042660000000364612151455365016211 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_CAPPED_INTEGER_HPP__ #define __JELLYFISH_CAPPED_INTEGER_HPP__ #include namespace jellyfish { template class capped_integer; template std::ostream &operator<<(std::ostream &os, const capped_integer &i); template class capped_integer { T x; public: typedef T bits_t; static const T cap = (T)-1; capped_integer() : x(0) {} explicit capped_integer(bits_t _x) : x(_x) {} static const capped_integer zero; static const capped_integer one; const capped_integer operator+(const capped_integer y) const { return capped_integer((y.x > ~x) ? cap : y.x + x); } const capped_integer operator+(const T& y) const { return capped_integer((y > ~x) ? cap : y + x); } bits_t bits() const { return x; } float to_float() const { return (float)x; } bool operator==(const capped_integer &o) { return x == o.x; } bool operator!() const { return x == 0; } friend std::ostream &operator<< <> (std::ostream &os, const capped_integer &i); }; template std::ostream &operator<<(std::ostream &os, const capped_integer &i) { return os << i.x; } } #endif jellyfish-1.1.11/jellyfish/hash_merge_cmdline.hpp0000644015303500042660000001350412151455365017027 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __MERGE_ARGS_HPP__ #define __MERGE_ARGS_HPP__ #include class merge_args { public: uint64_t buffer_size_arg; bool buffer_size_given; yaggo::string output_arg; bool output_given; uint32_t out_counter_len_arg; bool out_counter_len_given; uint64_t out_buffer_size_arg; bool out_buffer_size_given; bool verbose_flag; std::vector input_arg; typedef std::vector::iterator input_arg_it; typedef std::vector::const_iterator input_arg_const_it; enum { USAGE_OPT = 1000, OUT_COUNTER_LEN_OPT, OUT_BUFFER_SIZE_OPT }; merge_args() : buffer_size_arg(10000000), buffer_size_given(false), output_arg("mer_counts_merged.jf"), output_given(false), out_counter_len_arg(4), out_counter_len_given(false), out_buffer_size_arg(10000000), out_buffer_size_given(false), verbose_flag(false) { } merge_args(int argc, char* argv[]) : buffer_size_arg(10000000), buffer_size_given(false), output_arg("mer_counts_merged.jf"), output_given(false), out_counter_len_arg(4), out_counter_len_given(false), out_buffer_size_arg(10000000), out_buffer_size_given(false), verbose_flag(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"buffer-size", 1, 0, 's'}, {"output", 1, 0, 'o'}, {"out-counter-len", 1, 0, OUT_COUNTER_LEN_OPT}, {"out-buffer-size", 1, 0, OUT_BUFFER_SIZE_OPT}, {"verbose", 0, 0, 'v'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVs:o:v"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 's': buffer_size_given = true; buffer_size_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-s, --buffer-size=Buffer length") break; case 'o': output_given = true; output_arg.assign(optarg); break; case OUT_COUNTER_LEN_OPT: out_counter_len_given = true; out_counter_len_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint32_t, optarg, " --out-counter-len=uint32") break; case OUT_BUFFER_SIZE_OPT: out_buffer_size_given = true; out_buffer_size_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, " --out-buffer-size=uint64") break; case 'v': verbose_flag = true; break; } } // Parse arguments if(argc - optind < 2) error("Requires at least 2 arguments."); for( ; optind < argc; ++optind) { input_arg.push_back(argv[optind]); } } #define merge_args_USAGE "Usage: jellyfish merge [options] input:string+" const char * usage() const { return merge_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define merge_args_HELP "Merge jellyfish databases\n\n" \ "Options (default value in (), *required):\n" \ " -s, --buffer-size=Buffer length Length in bytes of input buffer (10000000)\n" \ " -o, --output=string Output file (mer_counts_merged.jf)\n" \ " --out-counter-len=uint32 Length (in bytes) of counting field in output (4)\n" \ " --out-buffer-size=uint64 Size of output buffer per thread (10000000)\n" \ " -v, --verbose Be verbose (false)\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return merge_args_HELP; } #define merge_args_HIDDEN "Hidden options:" const char * hidden() const { return merge_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "buffer_size_given:" << buffer_size_given << " buffer_size_arg:" << buffer_size_arg << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "out_counter_len_given:" << out_counter_len_given << " out_counter_len_arg:" << out_counter_len_arg << "\n"; os << "out_buffer_size_given:" << out_buffer_size_given << " out_buffer_size_arg:" << out_buffer_size_arg << "\n"; os << "verbose_flag:" << verbose_flag << "\n"; os << "input_arg:" << yaggo::vec_str(input_arg) << "\n"; } private: }; #endif // __MERGE_ARGS_HPP__" jellyfish-1.1.11/jellyfish/thread_exec.cc0000644015303500042660000000265212151455365015305 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include "thread_exec.hpp" void thread_exec::exec(int nb_threads) { struct thread_info empty = {0, 0, 0}; infos.resize(nb_threads, empty); for(int i = 0; i < nb_threads; i++) { infos[i].id = i; infos[i].self = this; int err = pthread_create(&infos[i].thid, NULL, start_routine, &infos[i]); if(err) eraise(Error) << "Can't create thread" << err::no; } } void thread_exec::join() { for(unsigned int i = 0; i < infos.size(); i++) { int err = pthread_join(infos[i].thid, NULL); if(err) eraise(Error) << "Can't join thread '" << infos[i].thid << "'" << err::no; } } void *thread_exec::start_routine(void *_info) { struct thread_info *info = (struct thread_info *)_info; info->self->start(info->id); return 0; } jellyfish-1.1.11/jellyfish/floats.cc0000644015303500042660000000150112151455365014312 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include namespace jellyfish { std::ostream &operator<<(std::ostream &os, const Float &f) { return os << f.v.fv; } } jellyfish-1.1.11/jellyfish/dump_fastq_main_cmdline.hpp0000644015303500042660000001303112151455365020067 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __DUMP_FASTQ_MAIN_ARGS_HPP__ #define __DUMP_FASTQ_MAIN_ARGS_HPP__ #include class dump_fastq_main_args { public: bool column_flag; bool tab_flag; double lower_count_arg; bool lower_count_given; double upper_count_arg; bool upper_count_given; bool verbose_flag; const char * output_arg; bool output_given; yaggo::string db_arg; enum { USAGE_OPT = 1000 }; dump_fastq_main_args() : column_flag(false), tab_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), verbose_flag(false), output_arg(""), output_given(false) { } dump_fastq_main_args(int argc, char* argv[]) : column_flag(false), tab_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), verbose_flag(false), output_arg(""), output_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"column", 0, 0, 'c'}, {"tab", 0, 0, 't'}, {"lower-count", 1, 0, 'L'}, {"upper-count", 1, 0, 'U'}, {"verbose", 0, 0, 'v'}, {"output", 1, 0, 'o'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVctL:U:vo:"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 'c': column_flag = true; break; case 't': tab_flag = true; break; case 'L': lower_count_given = true; lower_count_arg = yaggo::conv_double((const char *)optarg, err, false); CHECK_ERR(double_t, optarg, "-L, --lower-count=double") break; case 'U': upper_count_given = true; upper_count_arg = yaggo::conv_double((const char *)optarg, err, false); CHECK_ERR(double_t, optarg, "-U, --upper-count=double") break; case 'v': verbose_flag = true; break; case 'o': output_given = true; output_arg = optarg; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = yaggo::string(argv[optind]); ++optind; } #define dump_fastq_main_args_USAGE "Usage: jellyfish qdump [options] db:path" const char * usage() const { return dump_fastq_main_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define dump_fastq_main_args_HELP "Dump k-mer from a qmer database\n\nBy default, dump in a fasta format where the header is the count and\n" \ "the sequence is the sequence of the k-mer. The column format is a 2\n" \ "column output: k-mer count.\n\n" \ "Options (default value in (), *required):\n" \ " -c, --column Column format (false)\n" \ " -t, --tab Tab separator (false)\n" \ " -L, --lower-count=double Don't output k-mer with count < lower-count\n" \ " -U, --upper-count=double Don't output k-mer with count > upper-count\n" \ " -v, --verbose Be verbose (false)\n" \ " -o, --output=string Output file\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return dump_fastq_main_args_HELP; } #define dump_fastq_main_args_HIDDEN "Hidden options:" const char * hidden() const { return dump_fastq_main_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "column_flag:" << column_flag << "\n"; os << "tab_flag:" << tab_flag << "\n"; os << "lower_count_given:" << lower_count_given << " lower_count_arg:" << lower_count_arg << "\n"; os << "upper_count_given:" << upper_count_given << " upper_count_arg:" << upper_count_arg << "\n"; os << "verbose_flag:" << verbose_flag << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __DUMP_FASTQ_MAIN_ARGS_HPP__" jellyfish-1.1.11/jellyfish/jellyfish.cc0000644015303500042660000001064212151455365015021 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include typedef int (main_func_t)(int argc, char *argv[]); main_func_t count_main; main_func_t stats_main; main_func_t merge_main; main_func_t histo_main; main_func_t query_main; main_func_t dump_main; main_func_t cite_main; main_func_t dump_fastq_main; main_func_t histo_fastq_main; main_func_t hash_fastq_merge_main; main_func_t sos; main_func_t version; main_func_t jf_main; struct cmd_func { const char *cmd; // std::string cmd; main_func_t *func; }; cmd_func cmd_list[] = { {"count", &count_main}, {"stats", &stats_main}, {"histo", &histo_main}, {"dump", &dump_main}, {"merge", &merge_main}, {"query", &query_main}, {"cite", &cite_main}, {"qhisto", &histo_fastq_main}, {"qdump", &dump_fastq_main}, {"qmerge", &hash_fastq_merge_main}, {"jf", &jf_main}, /* help in all its form. Must be first non-command */ {"help", &sos}, {"-h", &sos}, {"-help", &sos}, {"--help", &sos}, {"-?", &sos}, {"--version", &version}, {"-V", &version}, {"", 0} }; void __sos(std::ostream *os) { *os << "Usage: jellyfish [options] arg..." << std::endl << "Where is one of: "; bool comma = false; for(cmd_func *ccmd = cmd_list; ccmd->func != sos; ccmd++) { *os << (comma ? ", " : "") << ccmd->cmd; comma = true; } *os << "." << std::endl; *os << "Options:" << std::endl << " --version Display version" << std::endl << " --help Display this message" << std::endl; } int jf_main(int argc, char* argv[]) { const char* aa = " .......\n" " .......... .....\n" " .... ....\n" " .. /-+ +---\\ ...\n" " . /--| +----\\ ...\n" " .. ...\n" " . .\n" " .. +----------------+ .\n" " . |. AAGATGGAGCGC .| ..\n" " . |---. .--/ .\n" " .. \\--------/ . .\n" " . . .. .. .\n" " . ... ..... ..... .. ..\n" " . .. . . . .. . .... .\n" " . .. . .. . . .. . . .\n" " . .. . . ... . .. .. .\n" " .... . .. .. ... .. .\n" " .. . ... . .. .. .\n" " . .. . . . ... ..\n" " ... . . .. ... .\n" " . .. . .. .....\n" " ____ ____ ._ __ _ _ ____ ____ ___ _ _\n" " (_ _)( ___)( ) ( ) ( \\/ )( ___)(_ _)/ __)( )_( )\n" ".-_)( )__) )(__ )(__ \\ / )__) _)(_ \\__ \\ ) _ ( \n" "\\____) (____)(____)(____)(__) (__) (____)(___/(_) (_)\n"; std::cout << aa; return 0; } int sos(int argc, char *argv[]) { __sos(&std::cout); return 0; } int version(int argc, char *argv[]) { std::cout << PACKAGE_STRING << std::endl; return 0; } int main(int argc, char *argv[]) { std::string error; if(argc < 2) { error = "Too few arguments"; } else { for(cmd_func *ccmd = cmd_list; ccmd->func != 0; ccmd++) { if(!strcmp(ccmd->cmd, argv[1])) // if(!ccmd->cmd.compare(argv[1])) return ccmd->func(argc - 1, argv + 1); } error = "Unknown command '"; error += argv[1]; error += "'\n"; } std::cerr << error << std::endl; __sos(&std::cerr); return 1; } jellyfish-1.1.11/jellyfish/seq_qual_parser.cc0000644015303500042660000000772612151455365016227 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include jellyfish::seq_qual_parser * jellyfish::seq_qual_parser::new_parser(const char *path) { int fd; char peek; fd = file_peek(path, &peek); switch(peek) { case '@': return new fastq_seq_qual_parser(fd, path, &peek, 1); default: eraise(FileParserError) << "'" << path << "': " << "Invalid input file. Expected fastq"; } return 0; } bool jellyfish::fastq_seq_qual_parser::parse(char *start, char **end) { char *qual_start = start + 1; // Make sure even length *end -= (*end - start) & 0x1; if(!_read_buf.empty()) { // Copy the saved sequence, then the quality score for this // saved sequence. The stream is left at the first qual value. if((*end - start) / 2 < (ptrdiff_t)_read_buf.size()) eraise(FastqSeqQualParserError) << "Buffer is too small to " "contain an entire read and its qual values"; qual_start = start + 1; for(const char *b = _read_buf.begin(); b < _read_buf.end(); b++, start += 2) *start = *b; _read_buf.reset(); copy_qual_values(qual_start, start); } while(start < *end) { // Read sequence header bool found_seq_header = false; while(!found_seq_header) { switch(sbumpc()) { case EOF: goto done; case '\n': break; case '@': found_seq_header = pbase() == '\n'; if(found_seq_header) break; // fall through default: eraise(FastqSeqQualParserError) << "Unexpected character '" << base() << "'. Expected '@'"; } } // skip seq header while(base() != EOF && base() != '\n') { sbumpc(); } *start = 'N'; start += 2; qual_start = start + 1; // copy sequence bool found_qual_header = false; // char *save_start = start; // std::cerr << "save_start " << save_start << std::endl; while(start < *end && !found_qual_header) { switch(sbumpc()) { case EOF: eraise(FastqSeqQualParserError) << "Truncated input file"; case '\n': break; case '+': if((found_qual_header = pbase() == '\n')) break; // fall through regular character default: *start = base(); start += 2; } } if(!found_qual_header) { // copy extra sequence to read buffer while(!found_qual_header) { switch(sbumpc()) { case EOF: eraise(FastqSeqQualParserError) << "Truncated input file"; case '\n': break; case '+': if((found_qual_header = pbase() == '\n')) break; default: _read_buf.push_back(base()); } } } // skip qual header && copy qual values while(base() != EOF && base() != '\n') { sbumpc(); } // std::cerr << "Copy qual values" << std::endl; copy_qual_values(qual_start, start); } done: *end = start; return base() != EOF; } void jellyfish::fastq_seq_qual_parser::copy_qual_values(char *&qual_start, const char *start) { while(qual_start < start + 1) { switch(sbumpc()) { case EOF: eraise(FastqSeqQualParserError) << "Truncated input file"; case '\n': break; default: *qual_start = base(); qual_start += 2; } } } jellyfish-1.1.11/jellyfish/sorted_dumper.hpp0000644015303500042660000001337412151455365016113 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include namespace jellyfish { template class sorted_dumper : public dumper_t, public thread_exec { typedef typename storage_t::overlap_iterator iterator; typedef compacted_hash::writer writer_t; typedef heap_t oheap_t; typedef token_ring token_ring_t; struct thread_info_t { writer_t writer; oheap_t heap; token_ring_t::token *token; }; uint_t threads; std::string file_prefix; size_t buffer_size; uint_t klen, vlen; uint_t key_len, val_len; size_t record_len, nb_records, nb_blocks; storage_t *ary; int file_index; token_ring_t tr; uint64_t lower_count, upper_count; struct thread_info_t *thread_info; uint64_t volatile unique, distinct, total, max_count; std::ofstream *out; locks::pthread::mutex dump_mutex; bool one_file; public: // klen: key field length in bits in hash (i.e before rounding up to bytes) // vlen: value field length in bits sorted_dumper(uint_t _threads, const char *_file_prefix, size_t _buffer_size, uint_t _vlen, storage_t *_ary) : threads(_threads), file_prefix(_file_prefix), buffer_size(_buffer_size), klen(_ary->get_key_len()), vlen(_vlen), ary(_ary), file_index(0), tr(), lower_count(0), upper_count(std::numeric_limits::max()), one_file(false) { key_len = bits_to_bytes(klen); val_len = bits_to_bytes(vlen); record_len = key_len + val_len; nb_records = ary->floor_block(_buffer_size / record_len, nb_blocks); while(nb_records < ary->get_max_reprobe_offset()) { nb_records = ary->floor_block(2 * nb_records, nb_blocks); } thread_info = new struct thread_info_t[threads]; for(uint_t i = 0; i < threads; i++) { // thread_info[i].token = i == 0; thread_info[i].writer.initialize(nb_records, klen, vlen, ary); thread_info[i].heap.initialize(ary->get_max_reprobe_offset()); thread_info[i].token = tr.new_token(); } unique = distinct = total = max_count = 0; } ~sorted_dumper() { if(thread_info) { delete[] thread_info; } } bool get_one_file() const { return one_file; } void set_one_file(bool nv) { one_file = nv; } void set_lower_count(uint64_t l) { lower_count = l; } void set_upper_count(uint64_t u) { upper_count = u; } virtual void start(int i) { dump_to_file(i); } void dump_to_file(int i); virtual void _dump(); void update_stats() { thread_info[0].writer.update_stats_with(out, unique, distinct, total, max_count); } }; template void sorted_dumper::_dump() { std::ofstream _out; assert(dump_mutex.try_lock()); if(one_file) { _out.open(file_prefix.c_str()); } else { open_next_file(file_prefix.c_str(), &file_index, _out); } out = &_out; unique = distinct = total = max_count = 0; tr.reset(); thread_info[0].writer.write_header(out); exec_join(threads); ary->zero_blocks(0, nb_blocks); // zero out last group of blocks update_stats(); _out.close(); dump_mutex.unlock(); } template void sorted_dumper::dump_to_file(int id) { size_t i; struct thread_info_t *my_info = &thread_info[id]; atomic_t atomic; my_info->writer.reset_counters(); for(i = id; i * nb_records < ary->get_size(); i += threads) { // fill up buffer iterator it(ary, i * nb_records, (i + 1) * nb_records); my_info->heap.fill(it); while(it.next()) { typename oheap_t::const_item_t item = my_info->heap.head(); if(item->val >= lower_count && item->val <= upper_count) my_info->writer.append(item->key, item->val); my_info->heap.pop(); my_info->heap.push(it); } while(my_info->heap.is_not_empty()) { typename oheap_t::const_item_t item = my_info->heap.head(); if(item->val >= lower_count && item->val <= upper_count) my_info->writer.append(item->key, item->val); my_info->heap.pop(); } my_info->token->wait(); my_info->writer.dump(out); my_info->token->pass(); // zero out memory if(i > 0) ary->zero_blocks(i * nb_blocks, nb_blocks); } atomic.add_fetch(&unique, my_info->writer.get_unique()); atomic.add_fetch(&distinct, my_info->writer.get_distinct()); atomic.add_fetch(&total, my_info->writer.get_total()); atomic.set_to_max(&max_count, my_info->writer.get_max_count()); } } jellyfish-1.1.11/jellyfish/parse_quake.hpp0000644015303500042660000001176312151455365015537 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_PARSE_QUAKE_HPP__ #define __JELLYFISH_PARSE_QUAKE_HPP__ #include #include #include #include #include #include #include #include #include namespace jellyfish { class parse_quake : public double_fifo_input { typedef std::vector fary_t; uint_t mer_len; size_t buffer_size; const fary_t files; fary_t::const_iterator current_file; bool have_seam; allocators::mmap buffer_data; struct seq *buffers; char *seam; const char quality_start; bool canonical; seq_qual_parser *fparser; public: /* Action to take for a given letter in fasta file: * A, C, G, T: map to 0, 1, 2, 3. Append to kmer * Other nucleic acid code: map to -1. reset kmer * '\n': map to -2. ignore * Other ASCII: map to -3. Skip to next line */ static const float proba_codes[41]; static const float one_minus_proba_codes[41]; parse_quake(const fary_t &_files, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size, const char _qs); ~parse_quake() { } void set_canonical(bool v = true) { canonical = v; } virtual void fill(); class thread { parse_quake *parser; bucket_t *sequence; const uint_t mer_len, lshift; uint64_t kmer, rkmer; const uint64_t masq; uint_t cmlen; const bool canonical; circular_buffer quals; const char quality_start; uint64_t distinct, total; typedef void (*error_reporter)(std::string& err); error_reporter error_report; public: thread(parse_quake *_parser, const char _qs) : parser(_parser), sequence(0), mer_len(_parser->mer_len), lshift(2 * (mer_len - 1)), kmer(0), rkmer(0), masq((1UL << (2 * mer_len)) - 1), cmlen(0), canonical(parser->canonical), quals(mer_len), quality_start(_qs), distinct(0), total(0), error_report(0) { } uint64_t get_distinct() const { return distinct; } uint64_t get_total() const { return total; } template void parse(T &counter) { cmlen = kmer = rkmer = 0; while((sequence = parser->next())) { const char *start = sequence->start; const char * const end = sequence->end; while(start < end) { const uint_t c = dna_codes[(uint_t)*start++]; const char q = *start++; switch(c) { case CODE_IGNORE: break; case CODE_COMMENT: report_bad_input(*(start-2)); // Fall through case CODE_RESET: cmlen = kmer = rkmer = 0; break; default: kmer = ((kmer << 2) & masq) | c; rkmer = (rkmer >> 2) | ((0x3 - c) << lshift); const float one_minus_p = one_minus_proba_codes[(uint_t)(q - quality_start)]; quals.append(one_minus_p); if(++cmlen >= mer_len) { cmlen = mer_len; Float oval; if(canonical) counter->add(kmer < rkmer ? kmer : rkmer, quals.prod(), &oval); else counter->add(kmer, quals.prod(), &oval); distinct += oval == (Float)0.0f; ++total; } } } // Buffer exhausted. Get a new one cmlen = kmer = rkmer = 0; parser->release(sequence); } } void set_error_reporter(error_reporter e) { error_report = e; } private: void report_bad_input(char c) { if(!error_report) return; std::string error("Bad character in sequence: "); error += c; error_report(error); } }; friend class thread; thread new_thread() { return thread(this, quality_start); } }; } #endif jellyfish-1.1.11/jellyfish/parse_dna.cc0000644015303500042660000000341612151455365014765 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include namespace jellyfish { void parse_dna::fill() { bucket_t *new_seq = 0; while(true) { if(!new_seq) { new_seq = write_next(); if(!new_seq) break; } new_seq->end = new_seq->start + buffer_size; char *start = new_seq->start; if(have_seam) { have_seam = false; // mem_copy(start, seam, mer_len - 1); memcpy(start, seam, mer_len - 1); start += mer_len - 1; } bool input_eof = !fparser->parse(start, &new_seq->end); if(new_seq->end > new_seq->start + mer_len) { have_seam = true; // mem_copy(seam, new_seq->end - mer_len + 1, mer_len - 1); memcpy(seam, new_seq->end - mer_len + 1, mer_len - 1); write_release(new_seq); new_seq = 0; } if(input_eof) { delete fparser; have_seam = false; if(++current_file == files.end()) { close(); break; } fparser = sequence_parser::new_parser(*current_file); } } } } jellyfish-1.1.11/jellyfish/circular_buffer.hpp0000644015303500042660000000334712151455365016373 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_CIRCULAR_BUFFER_HPP__ #define __JELLYFISH_CIRCULAR_BUFFER_HPP__ #include namespace jellyfish { template class circular_buffer { const int size; T *buffer, *end; T *start; public: explicit circular_buffer(int _size) : size(_size) { buffer = new T[size]; end = buffer + size; start = buffer; } ~circular_buffer() { delete [] buffer; } void append(const T v) { // std::cerr << "append buffer " << (void *)buffer << " end " << (void *)end << " start " << (void *)start << " val " << v << "\n"; *start++ = v; if(start == end) start = buffer; } template T op(U o) const { T *c = start; T acc = *c++; if(c == end) c = buffer; do { acc = o(acc, *c++); if(c == end) c = buffer; } while(c != start); return acc; } static T T_times(T &x, T &y) { return x * y; } T prod() const { return op(T_times); } }; } #endif jellyfish-1.1.11/jellyfish/hash_fastq_merge_cmdline.hpp0000644015303500042660000001442312151455365020226 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __HASH_FASTQ_MERGE_ARGS_HPP__ #define __HASH_FASTQ_MERGE_ARGS_HPP__ #include class hash_fastq_merge_args { public: uint64_t size_arg; bool size_given; uint32_t mer_len_arg; bool mer_len_given; const char * output_arg; bool output_given; uint32_t reprobes_arg; bool reprobes_given; uint64_t out_buffer_size_arg; bool out_buffer_size_given; std::vector db_arg; typedef std::vector::iterator db_arg_it; typedef std::vector::const_iterator db_arg_const_it; enum { USAGE_OPT = 1000, FULL_HELP_OPT, OUT_BUFFER_SIZE_OPT }; hash_fastq_merge_args() : size_arg(), size_given(false), mer_len_arg(), mer_len_given(false), output_arg("merged.jf"), output_given(false), reprobes_arg(62), reprobes_given(false), out_buffer_size_arg(20000000), out_buffer_size_given(false) { } hash_fastq_merge_args(int argc, char* argv[]) : size_arg(), size_given(false), mer_len_arg(), mer_len_given(false), output_arg("merged.jf"), output_given(false), reprobes_arg(62), reprobes_given(false), out_buffer_size_arg(20000000), out_buffer_size_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"size", 1, 0, 's'}, {"mer-len", 1, 0, 'm'}, {"output", 1, 0, 'o'}, {"reprobes", 1, 0, 'p'}, {"out-buffer-size", 1, 0, OUT_BUFFER_SIZE_OPT}, {"help", 0, 0, 'h'}, {"full-help", 0, 0, FULL_HELP_OPT}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVs:m:o:p:"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case FULL_HELP_OPT: std::cout << usage() << "\n\n" << help() << "\n\n" << hidden() << std::endl; exit(0); case 's': size_given = true; size_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-s, --size=uint64") break; case 'm': mer_len_given = true; mer_len_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-m, --mer-len=uint32") break; case 'o': output_given = true; output_arg = optarg; break; case 'p': reprobes_given = true; reprobes_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-p, --reprobes=uint32") break; case OUT_BUFFER_SIZE_OPT: out_buffer_size_given = true; out_buffer_size_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, " --out-buffer-size=uint64") break; } } // Check that required switches are present if(!size_given) error("[-s, --size=uint64] required switch"); if(!mer_len_given) error("[-m, --mer-len=uint32] required switch"); // Parse arguments if(argc - optind < 2) error("Requires at least 2 arguments."); for( ; optind < argc; ++optind) { db_arg.push_back(argv[optind]); } } #define hash_fastq_merge_args_USAGE "Usage: jellyfish merge [options] db:string+" const char * usage() const { return hash_fastq_merge_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define hash_fastq_merge_args_HELP "Merge quake databases\n\n" \ "Options (default value in (), *required):\n" \ " -s, --size=uint64 *Merged hash table size\n" \ " -m, --mer-len=uint32 *Mer length\n" \ " -o, --output=string Output file (merged.jf)\n" \ " -p, --reprobes=uint32 Maximum number of reprobes (62)\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " --full-help Detailed help\n" \ " -V, --version Version" const char * help() const { return hash_fastq_merge_args_HELP; } #define hash_fastq_merge_args_HIDDEN "Hidden options:\n" \ " --out-buffer-size=uint64 Size of output buffer per thread (20000000)" const char * hidden() const { return hash_fastq_merge_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "size_given:" << size_given << " size_arg:" << size_arg << "\n"; os << "mer_len_given:" << mer_len_given << " mer_len_arg:" << mer_len_arg << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "reprobes_given:" << reprobes_given << " reprobes_arg:" << reprobes_arg << "\n"; os << "out_buffer_size_given:" << out_buffer_size_given << " out_buffer_size_arg:" << out_buffer_size_arg << "\n"; os << "db_arg:" << yaggo::vec_str(db_arg) << "\n"; } private: }; #endif // __HASH_FASTQ_MERGE_ARGS_HPP__" jellyfish-1.1.11/jellyfish/counter.hpp0000644015303500042660000000265512151455365014716 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include class counter_t { volatile uint64_t count; public: counter_t() : count(0) {} inline uint64_t operator++(int) { return atomic::gcc::fetch_add(&count, (uint64_t)1); } inline uint64_t inc(uint64_t x) { return atomic::gcc::fetch_add(&count, x); } inline uint64_t get() const { return count; } class block { counter_t *c; uint64_t bs; uint64_t base, i; // friend counter_t; public: block(counter_t *_c, uint64_t _bs) : c(_c), bs(_bs), base(0), i(bs) {} public: inline uint64_t operator++(int) { if(i >= bs) { i = 0; base = c->inc(bs); } return base + i++; } }; block get_block(uint64_t bs = 100) { return block(this, bs); } }; jellyfish-1.1.11/jellyfish/floats.hpp0000644015303500042660000000360312151455365014521 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_FLOATS_HPP__ #define __JELLYFISH_FLOATS_HPP__ #include #include #ifdef HALF_FLOATS #include #endif namespace jellyfish { class Float { public: #ifdef HALF_FLOATS typedef uint16_t bits_t; typedef half float_t; #else typedef uint32_t bits_t; typedef float float_t; #endif private: union float_int { float_t fv; bits_t iv; explicit float_int(float_t v) : fv(v) {} explicit float_int(bits_t v) : iv(v) {} }; float_int v; public: Float() : v(0.0f) {} explicit Float(int _v) : v((bits_t)_v) {} explicit Float(float_t _v) : v(_v) {} explicit Float(bits_t _v) : v(_v) {} // static const Float zero; // static const Float one; const Float operator+(const Float &y) const { return Float(v.fv + y.v.fv); } const Float operator+(const float& y) const { return Float(v.fv + y); } bits_t bits() const { return v.iv; }; float_t to_float() const { return v.fv; }; // Should we use the floating point ==? bool operator==(Float o) { return v.iv == o.v.iv; } friend std::ostream &operator<<(std::ostream &os, const Float &f); }; } #endif jellyfish-1.1.11/jellyfish/divisor.hpp0000644015303500042660000000601012151455365014703 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_DIVISOR_HPP__ #define __JELLYFISH_DIVISOR_HPP__ #include #include #ifdef HAVE_CONFIG_H #include #endif namespace jellyfish { class divisor64 { const uint64_t d_; #ifdef HAVE_INT128 const uint16_t p_; const unsigned __int128 m_; #endif public: explicit divisor64(uint64_t d) : d_(d) #ifdef HAVE_INT128 , p_(ceilLog2(d_)), m_((div_ceil((unsigned __int128)1 << (64 + p_), (unsigned __int128)d_)) & (uint64_t)-1) #endif { } divisor64() : d_(0) #ifdef HAVE_INT128 , p_(0), m_(0) #endif { } explicit divisor64(const divisor64& rhs) : d_(rhs.d_) #ifdef HAVE_INT128 , p_(rhs.p_), m_(rhs.m_) #endif { } inline uint64_t divide(const uint64_t n) const { #ifdef HAVE_INT128 switch(m_) { case 0: return n >> p_; default: const unsigned __int128 n_ = (unsigned __int128)n; return (n_ + ((n_ * m_) >> 64)) >> p_; } #else return n / d_; #endif } inline uint64_t remainder(uint64_t n) const { #ifdef HAVE_INT128 switch(m_) { case 0: return n & (((uint64_t)1 << p_) - 1); default: return n - divide(n) * d_; } #else return n % d_; #endif } // Euclidian division: d.division(n, q, r) sets q <- n / d and r // <- n % d. This is faster than doing each independently. inline void division(uint64_t n, uint64_t &q, uint64_t &r) const { #ifdef HAVE_INT128 switch(m_) { case 0: q = n >> p_; r = n & (((uint64_t)1 << p_) - 1); break; default: q = divide(n); r = n - q * d_; break; } #else q = n / d_; r = n % d_; #endif } uint64_t d() const { return d_; } uint64_t p() const { #ifdef HAVE_INT128 return p_; #else return 0; #endif } uint64_t m() const { #ifdef HAVE_INT128 return m_; #else return 0; #endif } }; inline uint64_t operator/(uint64_t n, const divisor64& d) { return d.divide(n); } inline uint64_t operator%(uint64_t n, const divisor64& d) { return d.remainder(n); } } inline std::ostream& operator<<(std::ostream& os, const jellyfish::divisor64& d) { return os << "d:" << d.d() << ",p:" << d.p() << ",m:" << d.m(); } #endif /* __JELLYFISH_DIVISOR_HPP__ */ jellyfish-1.1.11/jellyfish/histo_main.cc0000644015303500042660000001046612151455365015166 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include template class histogram : public thread_exec { const hash_t *hash; const uint_t threads; const uint64_t base, ceil, inc, nb_buckets, nb_slices; uint64_t *data; counter_t slice_id; public: histogram(const hash_t *_hash, uint_t _threads, uint64_t _base, uint64_t _ceil, uint64_t _inc) : hash(_hash), threads(_threads), base(_base), ceil(_ceil), inc(_inc), nb_buckets((ceil + inc - base) / inc), nb_slices(threads * 100) { data = new uint64_t[threads * nb_buckets]; memset(data, '\0', threads * nb_buckets * sizeof(uint64_t)); } ~histogram() { if(data) delete [] data; } void do_it() { exec_join(threads); } void start(int th_id) { uint64_t *hist = &data[th_id * nb_buckets]; for(size_t i = slice_id++; i < nb_slices; i = slice_id++) { typename hash_t::iterator it = hash->iterator_slice(i, nb_slices); while(it.next()) { if(it.get_val() < base) ++hist[0]; else if(it.get_val() > ceil) ++hist[nb_buckets - 1]; else ++hist[(it.get_val() - base) / inc]; } } } void print(std::ostream &out, bool full) { uint64_t col = base; for(uint64_t i = 0; i < nb_buckets; i++, col += inc) { uint64_t count = 0; for(uint_t j = 0; j < threads; j++) count += data[j * nb_buckets + i]; if(count > 0 || full) out << col << " " << count << "\n"; } } }; int histo_main(int argc, char *argv[]) { histo_args args(argc, argv); if(args.low_arg < 1) args.error("Low count value must be >= 1"); if(args.high_arg < args.low_arg) args.error("High count value must be >= to low count value"); ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Error opening output file '" << args.output_arg << "'" << err::no; const uint64_t base = args.low_arg > 1 ? (args.increment_arg >= args.low_arg ? 1 : args.low_arg - args.increment_arg) : 1; const uint64_t ceil = args.high_arg + args.increment_arg; mapped_file dbf(args.db_arg.c_str()); dbf.sequential().will_need(); char type[8]; memcpy(type, dbf.base(), sizeof(type)); if(!strncmp(type, jellyfish::raw_hash::file_type, sizeof(type))) { raw_inv_hash_query_t hash(dbf); histogram histo(&hash, args.threads_arg, base, ceil, args.increment_arg); histo.do_it(); histo.print(out, args.full_flag); } else if(!strncmp(type, jellyfish::compacted_hash::file_type, sizeof(type))) { hash_query_t hash(dbf); if(args.verbose_flag) std::cerr << "mer length = " << hash.get_mer_len() << "\n" << "hash size = " << hash.get_size() << "\n" << "max reprobe = " << hash.get_max_reprobe() << "\n" << "matrix = " << hash.get_hash_matrix().xor_sum() << "\n" << "inv_matrix = " << hash.get_hash_inverse_matrix().xor_sum() << "\n"; histogram histo(&hash, args.threads_arg, base, ceil, args.increment_arg); histo.do_it(); histo.print(out, args.full_flag); } else { die << "Invalid file type '" << err::substr(type, sizeof(type)) << "'."; } out.close(); return 0; } jellyfish-1.1.11/jellyfish/compacted_hash.hpp0000644015303500042660000004510112151455365016172 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_COMPACTED_HASH__ #define __JELLYFISH_COMPACTED_HASH__ #include #include #include #include #include #include #include #include #include #include namespace jellyfish { namespace compacted_hash { define_error_class(ErrorReading); static const char *file_type = "JFLISTDN"; struct header { char type[8]; // type of file. Expect file_type uint64_t key_len; uint64_t val_len; // In bytes uint64_t size; // In bytes uint64_t max_reprobe; uint64_t unique; uint64_t distinct; uint64_t total; uint64_t max_count; header() { } explicit header(char *ptr) { if(memcmp(ptr, file_type, sizeof(type))) eraise(ErrorReading) << "Bad file type '" << err::substr(ptr, sizeof(type)) << "', expected '" << err::substr(file_type, sizeof(type)) << "'"; memcpy((void *)this, ptr, sizeof(struct header)); } }; template class writer { uint64_t unique, distinct, total, max_count; size_t nb_records; uint_t klen, vlen; uint_t key_len, val_len; storage_t *ary; char *buffer, *end, *ptr; public: writer() : unique(0), distinct(0), total(0), max_count(0) { buffer = ptr = end = NULL; } writer(size_t _nb_records, uint_t _klen, uint_t _vlen, storage_t *_ary) { initialize(_nb_records, _klen, _vlen, _ary); } void initialize(size_t _nb_records, uint_t _klen, uint_t _vlen, storage_t *_ary) { unique = distinct = total = max_count = 0; nb_records = _nb_records; klen = _klen; vlen = _vlen; key_len = bits_to_bytes(klen); val_len = bits_to_bytes(vlen); ary = _ary; buffer = new char[nb_records * (key_len + val_len)]; end = buffer + (nb_records * (key_len + val_len)); ptr = buffer; } ~writer() { if(buffer) delete buffer; } bool append(uint64_t key, uint64_t val) { if(ptr >= end) return false; memcpy(ptr, &key, key_len); ptr += key_len; memcpy(ptr, &val, val_len); ptr += val_len; unique += val == 1; distinct++; total += val; if(val > max_count) max_count = val; return true; } void dump(std::ostream *out) { out->write(buffer, ptr - buffer); ptr = buffer; } void write_header(std::ostream *out) const { struct header head; memset(&head, '\0', sizeof(head)); memcpy(&head.type, file_type, sizeof(head.type)); head.key_len = klen; head.val_len = val_len; head.size = ary->get_size(); head.max_reprobe = ary->get_max_reprobe_offset(); out->write((char *)&head, sizeof(head)); ary->write_ary_header(out); } void update_stats(std::ostream *out) const { update_stats_with(out, unique, distinct, total, max_count); } void update_stats_with(std::ostream *out, uint64_t _unique, uint64_t _distinct, uint64_t _total, uint64_t _max_count) const { if(!out->good()) return; out->seekp(0); if(!out->good()) { out->clear(); return; } struct header head; memcpy(&head.type, file_type, sizeof(head.type)); head.key_len = klen; head.val_len = val_len; head.size = ary->get_size(); head.max_reprobe = ary->get_max_reprobe_offset(); head.unique = _unique; head.distinct = _distinct; head.total = _total; head.max_count = _max_count; out->write((char *)&head, sizeof(head)); } uint64_t get_unique() const { return unique; } uint64_t get_distinct() const { return distinct; } uint64_t get_total() const { return total; } uint64_t get_max_count() const { return max_count; } uint_t get_key_len_bytes() const { return key_len; } uint_t get_val_len_bytes() const { return val_len; } void reset_counters() { unique = distinct = total = max_count = 0; } }; template class reader { struct header header; std::ifstream *io; uint_t key_len; SquareBinaryMatrix hash_matrix, hash_inverse_matrix; size_t record_len, buffer_len; size_t size_mask; char *buffer, *end_buffer, *ptr; char dna_str[33]; public: key_t key; val_t val; reader() { io = 0; buffer = 0; memset(dna_str, '\0', sizeof(dna_str)); } explicit reader(std::string filename, size_t _buff_len = 10000000UL) { initialize(filename, _buff_len); } void initialize(std::string filename, size_t _buff_len) { memset(dna_str, '\0', sizeof(dna_str)); io = new std::ifstream(filename.c_str()); io->read((char *)&header, sizeof(header)); if(!io->good()) eraise(ErrorReading) << "'" << filename << "': " << "File truncated"; if(memcmp(header.type, file_type, sizeof(header.type))) eraise(ErrorReading) << "'" << filename << "': " << "Bad file type '" << err::substr(header.type, sizeof(header.type)) << "', expected '" << err::substr(file_type, sizeof(header.type)) << "'"; if(header.key_len > 64 || header.key_len == 0) eraise(ErrorReading) << "'" << filename << "': " << "Invalid key length '" << header.key_len << "'"; if(header.size != (1UL << floorLog2(header.size))) eraise(ErrorReading) << "'" << filename << "': " << "Size '" << header.size << "' is not a power of 2"; key_len = (header.key_len / 8) + (header.key_len % 8 != 0); record_len = key_len + header.val_len; buffer_len = record_len * (_buff_len / record_len); buffer = new char[buffer_len]; ptr = buffer; end_buffer = NULL; hash_matrix.load(io); hash_inverse_matrix.load(io); if(header.distinct != 0) { std::streamoff list_size = get_file_size(*io); if(list_size != (std::streamoff)-1 && list_size - (header.distinct * record_len) != 0) { eraise(ErrorReading) << "'" << filename << "': " << "Bad hash size '" << list_size << "', expected '" << (header.distinct * record_len) << "' bytes"; } } key = val = 0; size_mask = header.size - 1; } ~reader() { if(io) delete io; if(buffer) delete[] buffer; } uint_t get_key_len() const { return header.key_len; } uint_t get_mer_len() const { return header.key_len / 2; } uint_t get_val_len() const { return header.val_len; } size_t get_size() const { return header.size; } uint64_t get_max_reprobe() const { return header.max_reprobe; } uint64_t get_max_reprobe_offset() const { return header.max_reprobe; } uint64_t get_unique() const { return header.unique; } uint64_t get_distinct() const { return header.distinct; } uint64_t get_total() const { return header.total; } uint64_t get_max_count() const { return header.max_count; } SquareBinaryMatrix get_hash_matrix() const { return hash_matrix; } SquareBinaryMatrix get_hash_inverse_matrix() const { return hash_inverse_matrix; } void write_ary_header(std::ostream *out) const { hash_matrix.dump(out); hash_inverse_matrix.dump(out); } key_t get_key() const { return key; } val_t get_val() const { return val; } void get_string(char *out) const { parse_dna::mer_binary_to_string(key, get_mer_len(), out); } char* get_dna_str() { parse_dna::mer_binary_to_string(key, get_mer_len(), dna_str); return dna_str; } uint64_t get_hash() const { return hash_matrix.times(key); } uint64_t get_pos() const { return hash_matrix.times(key) & size_mask; } bool next() { while(true) { if(ptr <= end_buffer) { memcpy(&key, ptr, key_len); ptr += key_len; memcpy(&val, ptr, header.val_len); ptr += header.val_len; return true; } if(io->fail()) return false; io->read(buffer, buffer_len); // if(record_len * (io->gcount() / record_len) != io->gcount()) // return false; ptr = buffer; end_buffer = NULL; if((size_t)io->gcount() >= record_len) end_buffer = ptr + (io->gcount() - record_len); } } }; template class query { mapped_file file; struct header header; uint_t key_len; uint_t val_len; uint_t record_len; SquareBinaryMatrix hash_matrix; SquareBinaryMatrix hash_inverse_matrix; char *base; uint64_t size; uint64_t size_mask; uint64_t last_id; key_t first_key, last_key; uint64_t first_pos, last_pos; bool canonical; public: /* Can't wait for C++0x to be finalized and call constructor from constructor! */ explicit query(mapped_file &map) : file(map), header(file.base()), key_len((header.key_len / 8) + (header.key_len % 8 != 0)), val_len(header.val_len), record_len(key_len + header.val_len), hash_matrix(file.base() + sizeof(header)), hash_inverse_matrix(file.base() + sizeof(header) + hash_matrix.dump_size()), base(file.base() + sizeof(header) + hash_matrix.dump_size() + hash_inverse_matrix.dump_size()), size(header.size), size_mask(header.size - 1), last_id((file.end() - base) / record_len), canonical(false) { if(header.distinct != 0 && file.end() - base - header.distinct * record_len != 0) eraise(ErrorReading) << "'" << file.path() << "': " << "Bad hash size '" << (file.end() - base) << "', expected '" << header.distinct * record_len << "' bytes"; get_key(0, &first_key); first_pos = get_pos(first_key); get_key(last_id - 1, &last_key); last_pos = get_pos(last_key); } explicit query(std::string filename) : file(filename.c_str()), header(file.base()), key_len((header.key_len / 8) + (header.key_len % 8 != 0)), val_len(header.val_len), record_len(key_len + header.val_len), hash_matrix(file.base() + sizeof(header)), hash_inverse_matrix(file.base() + sizeof(header) + hash_matrix.dump_size()), base(file.base() + sizeof(header) + hash_matrix.dump_size() + hash_inverse_matrix.dump_size()), size(header.size), size_mask(header.size - 1), last_id((file.end() - base) / record_len), canonical(false) { if(header.distinct != 0 && file.end() - base - header.distinct * record_len != 0) eraise(ErrorReading) << "'" << file.path() << "': " << "Bad hash size '" << (file.end() - base) << "', expected '" << header.distinct * record_len << "' bytes"; get_key(0, &first_key); first_pos = get_pos(first_key); get_key(last_id - 1, &last_key); last_pos = get_pos(last_key); } uint_t get_key_len() const { return header.key_len; } uint_t get_mer_len() const { return header.key_len / 2; } uint_t get_val_len() const { return header.val_len; } size_t get_size() const { return header.size; } size_t get_nb_mers() const { return last_id; } uint64_t get_max_reprobe() const { return header.max_reprobe; } uint64_t get_max_reprobe_offset() const { return header.max_reprobe; } uint64_t get_unique() const { return header.unique; } uint64_t get_distinct() const { return header.distinct; } uint64_t get_total() const { return header.total; } uint64_t get_max_count() const { return header.max_count; } SquareBinaryMatrix get_hash_matrix() const { return hash_matrix; } SquareBinaryMatrix get_hash_inverse_matrix() const { return hash_inverse_matrix; } bool get_canonical() const { return canonical; } void set_canonical(bool v) { canonical = v; } /* No check is made on the validity of the string passed. Should only contained [acgtACGT] to get a valid answer. */ val_t operator[] (const char *key_s) const { return get_key_val(parse_dna::mer_string_to_binary(key_s, get_mer_len())); } val_t operator[] (const key_t key) const { return get_key_val(key); } void get_key(size_t id, key_t *k) const { *k = 0; memcpy(k, base + id * record_len, key_len); } void get_val(size_t id, val_t *v) const { *v = 0; memcpy(v, base + id * record_len + key_len, val_len); } uint64_t get_pos(key_t k) const { return hash_matrix.times(k) & size_mask; } val_t get_key_val(const key_t key) const { uint64_t id; val_t res; if(get_key_val_id(key, &res, &id)) return res; else return 0; } bool get_key_val_id(const key_t _key, val_t *res, uint64_t *id) const { key_t key; if(canonical) { key = parse_dna::reverse_complement(_key, get_mer_len()); if(key > _key) key = _key; } else { key = _key; } if(key == first_key) { get_val(0, res); *id = 0; return true; } if(key == last_key) { get_val(last_id - 1, res); *id = last_id; return true; } uint64_t pos = get_pos(key); if(pos < first_pos || pos > last_pos) return false; uint64_t first = 0, last = last_id; while(first < last - 1) { uint64_t middle = (first + last) / 2; key_t mid_key; get_key(middle, &mid_key); // printf("%ld %ld %ld %ld %ld %ld %ld\n", key, pos, first, middle, last, mid_key, get_pos(mid_key)); if(key == mid_key) { get_val(middle, res); *id = middle; return true; } uint64_t mid_pos = get_pos(mid_key); if(mid_pos > pos || (mid_pos == pos && mid_key > key)) last = middle; else first = middle; } return false; } class iterator { char *base, *ptr; uint64_t last_id; uint_t key_len; uint_t val_len; uint_t record_len; uint_t mer_len; uint64_t id; key_t key; val_t val; char dna_str[33]; public: iterator(char *_base, uint64_t _last_id, uint_t _key_len, uint_t _val_len, uint_t _mer_len) : base(_base), ptr(_base), last_id(_last_id), key_len(_key_len), val_len(_val_len), record_len(key_len + val_len), mer_len(_mer_len), id(0), key(0), val(0) { memset(dna_str, '\0', sizeof(dna_str)); } key_t get_key() const { return key; } val_t get_val() const { return val; } uint64_t get_id() const { return id; } bool next() { if(id >= last_id) return false; ++id; memcpy(&key, ptr, key_len); ptr += key_len; memcpy(&val, ptr, val_len); ptr += val_len; return true; } bool next(uint64_t *_id, key_t *_key, val_t *_val) { if(id >= last_id) return false; *_id = atomic::gcc::add_fetch(&id, (uint64_t)1) - 1; if(*_id >= last_id) return false; char *ptr = base + (*_id) * record_len; *_key = 0; memcpy(_key, ptr, key_len); ptr += key_len; *_val = 0; memcpy(_val, ptr, val_len); return true; } inline bool next(key_t *_key, val_t *_val) { uint64_t _id; return next(&_id, _key, _val); } char *get_dna_str() { parse_dna::mer_binary_to_string(key, mer_len, dna_str); return dna_str; } void get_dna_str(char *out) { parse_dna::mer_binary_to_string(key, mer_len, out); } }; iterator get_iterator() const { return iterator_all(); } iterator iterator_all() const { return iterator(base, last_id, key_len, val_len, get_mer_len()); } iterator iterator_slice(uint64_t slice_number, uint64_t number_of_slice) const { std::pair res = slice(slice_number, number_of_slice, last_id); char *it_base = base + res.first * record_len; uint64_t it_last_id = res.second - res.first; if(it_base >= file.end()) { it_base = base; it_last_id = 0; } else if(it_base + it_last_id * record_len > file.end()) it_last_id = (file.end() - it_base) / record_len; return iterator(it_base, it_last_id, key_len, val_len, get_mer_len()); } }; } } #endif /* __COMPACTED_HASH__ */ jellyfish-1.1.11/jellyfish/locking_hash_counters.hpp0000644015303500042660000002252612151455365017611 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_LOCKING_HASH_COUNTERS__ #define __JELLYFISH_LOCKING_HASH_COUNTERS__ #include #include #include #include #include using namespace std; struct stats { unsigned int key_conflicts; unsigned int val_conflicts; unsigned int destroyed_key; unsigned int destroyed_val; unsigned int maxed_out_val; unsigned int maxed_reprobe; unsigned int resized_arys; }; #ifdef LOCKING_HASH_STATS #define LOCKING_HASH_STAT_INC(var) __sync_fetch_and_add(&stats->var, 1); #else #define LOCKING_HASH_STAT_INC(var) #endif template class arys_iterator { A *ary; unsigned long pos; public: Key key; Val val; explicit arys_iterator(A *_ary) : ary(_ary), pos(0) { } ~arys_iterator() { } void rewind() { pos = 0; } bool next() { Key *ckey; Val *cval; while(pos < ary->size) { ary->get(pos++, &ckey, &cval); key = *ckey; if(key & 0x1) { val = *cval; key >>= 1; return true; } } return false; } }; class bad_size_exception: public exception { virtual const char* what() const throw() { return "Size must be a power of 2"; } }; template class arys_t { public: typedef Key key_t; typedef Val val_t; /* Keys. Lower order bits are used internally. * 0: is key set? * 1: is key destroyed? */ /* Values. Lower order bit is used internally. * 0: is value destroyed? */ typedef struct elt { Key keys[nb]; Val vals[nb]; } elt; elt *key_vals; unsigned long size; unsigned long esize; unsigned long mod_mask; bool allocated; /* arys are in a linked list. They are freed in reverse order of * creation. The link from previous arys counts as 1 reference, to * ensure proper order of deletion. * The constructor is not thread safe (protect by mutex) */ explicit arys_t(unsigned long _size) : allocated(true) { size = 1; while(_size > size) { size <<= 1; } esize = size >> shift; mod_mask = size - 1; key_vals = new elt[esize]; memset(key_vals, '\0', sizeof(elt) * esize); } arys_t(unsigned long _size, char *map) : allocated(false) { size = 1; while(_size > size) { size <<= 1; } if(_size != size) throw new bad_size_exception; mod_mask = size - 1; key_vals = (elt *)map; } ~arys_t() { if(allocated) delete[] key_vals; } inline void get(unsigned long idx, Key **k, Val **v) { elt *e = &key_vals[idx >> shift]; *k = &e->keys[idx & mask]; *v = &e->vals[idx & mask]; } typedef arys_iterator iterator; arys_iterator * new_iterator() { return new arys_iterator(this); } }; template class thread_hash_counter { arys_t * volatile *key_val_arys_ptr; arys_t *key_val_arys; unsigned int max_reprobe; pthread_mutex_t *hash_lock; struct stats *stats; void resize(arys_t *cary); void no_lock_add(Key k, Val v); public: thread_hash_counter(arys_t * volatile * _arys, unsigned int _max_reprobe, pthread_mutex_t *_hash_lock, struct stats *_stats) : key_val_arys_ptr(_arys), max_reprobe(_max_reprobe), hash_lock(_hash_lock), stats(_stats) { key_val_arys = *key_val_arys_ptr; } ~thread_hash_counter() { } inline void add(Key k, Val v); inline void inc(Key k) { add(k, 1); } }; template class locking_hash_counter { arys_t * volatile key_val_arys; struct stats stats; unsigned int max_reprobe; pthread_mutex_t hash_lock; public: locking_hash_counter(unsigned long _size, unsigned int _max_reprobe); ~locking_hash_counter(); typedef thread_hash_counter thread; thread *new_hash_counter() { return new thread_hash_counter(&key_val_arys, max_reprobe, &hash_lock, &stats); } unsigned long size() { return key_val_arys->size; } // Not thread safe void print(ostream &out); void print_debug(ostream &out); void write_keys_vals(ostream &out); int has_stats() { #ifdef LOCKING_HASH_STATS return 1; #else return 0; #endif }; void print_stats(ostream &out); }; /* * Usefull sizes */ typedef arys_t arys_64_32_t; typedef locking_hash_counter chc_64_32_t; /* * locking_hash_counter */ template locking_hash_counter::locking_hash_counter(unsigned long _size, unsigned int _max_reprobe) : max_reprobe(_max_reprobe) { key_val_arys = new arys_t(_size); pthread_mutex_init(&hash_lock, NULL); memset(&stats, 0, sizeof(stats)); } template locking_hash_counter::~locking_hash_counter() { pthread_mutex_destroy(&hash_lock); delete key_val_arys; } template void locking_hash_counter::print_debug(ostream &out) { // unsigned long i; // arys_t *carys = key_val_arys; // Key key; // for(i = 0; i < carys->size; i++) { // key = carys->keys[i]; // if(key & 0x1) // out << i << " " << (key >> 2) << " " << (key & 0x3) << " " << // (carys->vals[i] >> 1) << endl; // else // out << i << " Empty" << endl; // } } template void locking_hash_counter::print(ostream &out) { unsigned long i; arys_t *carys = key_val_arys; Key *ckey, key; Val *cval; for(i = 0; i < carys->size; i++) { carys->get(i, &ckey, &cval); key = *ckey; if(key & 0x1) out << (key >> 2) << " " << (*cval >> 1) << endl; } } template void locking_hash_counter::write_keys_vals(ostream &out) { arys_t *carys = key_val_arys; out.write((char *)carys->key_vals, sizeof(typename arys_t::elt) * carys->esize); } template void locking_hash_counter::print_stats(ostream &out) { #ifdef STATS #define PRINT_STAT(var) { out << #var ": " << stats.var << endl; } #else #define PRINT_STAT(var) { out << #var ": -" << endl; } #endif PRINT_STAT(key_conflicts); PRINT_STAT(val_conflicts); PRINT_STAT(destroyed_key); PRINT_STAT(destroyed_val); PRINT_STAT(maxed_out_val); PRINT_STAT(maxed_reprobe); PRINT_STAT(resized_arys); } /* * thread_hash_counter */ template inline void thread_hash_counter::add(Key k, Val v) { pthread_mutex_lock(hash_lock); no_lock_add(k, v); pthread_mutex_unlock(hash_lock); } template void thread_hash_counter::no_lock_add(Key k, Val v) { unsigned long idx; Key key, inkey; Val val, sval, cval; arys_t *carys; Key *ckeys; Val *cvals; unsigned int reprobe = 0; inkey = (k << 1) | 0x1; carys = *key_val_arys_ptr; idx = k & carys->mod_mask; while(1) { carys->get(idx, &ckeys, &cvals); key = *ckeys; if(!(key & 0x1)) { // Key is free *ckeys = inkey; break; } if(inkey == key) { // Key already in break; } // Reprobe, or resize and try again. if(++reprobe > max_reprobe) { LOCKING_HASH_STAT_INC(maxed_reprobe); resize(carys); carys = *key_val_arys_ptr; idx = k & carys->mod_mask; } else { idx = (idx + 1) & carys->mod_mask; // reprobe } } val = *cvals; cval = ~val; if(cval == (Val)0x0) { // If key at its max, do not increment LOCKING_HASH_STAT_INC(maxed_out_val); } else { if(cval < v) { // Key reaches its max, truncate sval = (Val)~0x0; LOCKING_HASH_STAT_INC(maxed_out_val); } else { sval = val + v; } *cvals = sval; } } template void thread_hash_counter::resize(arys_t *carys) { unsigned long i; Key *ckey; Val *cval; arys_t *narys; narys = new arys_t(carys->size << 1); *key_val_arys_ptr = narys; // Copy over and free old data Key key; for(i = 0; i < carys->size; i++) { carys->get(i, &ckey, &cval); key = *ckey; if(key & 0x1) { // Copy value no_lock_add(key >> 1, *cval); } } delete carys; LOCKING_HASH_STAT_INC(resized_arys); } #endif /* __LOCKING_HASH_COUNTERS__ */ jellyfish-1.1.11/jellyfish/eLut.h0000644015303500042660000000761012151455365013604 00000000000000// // This is an automatically generated file. // Do not edit. // { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33792, 34816, 35840, 36864, 37888, 38912, 39936, 40960, 41984, 43008, 44032, 45056, 46080, 47104, 48128, 49152, 50176, 51200, 52224, 53248, 54272, 55296, 56320, 57344, 58368, 59392, 60416, 61440, 62464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; jellyfish-1.1.11/jellyfish/allocators_mmap.cc0000644015303500042660000000431312151455365016203 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif void *allocators::mmap::realloc(size_t new_size) { void *new_ptr = MAP_FAILED; if(ptr == MAP_FAILED) { new_ptr = ::mmap(NULL, new_size, PROT_WRITE|PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); } // mremap is Linux specific // TODO: We must do something if it is not supported #ifdef MREMAP_MAYMOVE else { new_ptr = ::mremap(ptr, size, new_size, MREMAP_MAYMOVE); } #endif if(new_ptr == MAP_FAILED) return NULL; size = new_size; ptr = new_ptr; return ptr; } size_t allocators::mmap::round_to_page(size_t _size) { static const long pg_size = sysconf(_SC_PAGESIZE); return (_size / pg_size + (_size % pg_size != 0)) * pg_size; } void allocators::mmap::fast_zero() { tinfo info[nb_threads]; size_t pgsize = round_to_page(1); size_t nb_pages = size / pgsize + (size % pgsize != 0); for(int i = 0; i < nb_threads; i++) { info[i].start = (char *)ptr + pgsize * ((i * nb_pages) / nb_threads); info[i].end = (char *)ptr + pgsize * (((i + 1) * nb_pages) / nb_threads); info[i].pgsize = pgsize; pthread_create(&info[i].thid, NULL, _fast_zero, &info[i]); } for(int i = 0; i < nb_threads; i++) pthread_join(info[i].thid, NULL); } void * allocators::mmap::_fast_zero(void *_info) { tinfo *info = (tinfo *)_info; for(char *cptr = info->start; cptr < info->end; cptr += info->pgsize) *cptr = 0; return NULL; } jellyfish-1.1.11/jellyfish/test_read_parser.cc0000644015303500042660000000277512151455365016366 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include int main(int argc, char *argv[]) { show_backtrace(); jellyfish::parse_read parser(argv + 1, argv + argc, 100); jellyfish::parse_read::thread stream = parser.new_thread(); jellyfish::read_parser::read_t *read; while((read = stream.next_read())) { unsigned long count = 0; for(const char *base = read->seq_s; base < read->seq_e; ++base) { switch(*base) { case 'a': case 'A': case 'c': case 'C': case 'g': case 'G': case 't': case 'T': ++count; default: break; //skip } } std::cout << "'" << std::string(read->header, read->hlen) << "' " << count << "\n"; } std::cout << std::flush; return 0; } jellyfish-1.1.11/jellyfish/backtrace.cc0000644015303500042660000000164612151455365014753 00000000000000#include #ifndef HAVE_EXECINFO_H void show_backtrace() {} #else #include #include #include #include #include #include void print_backtrace() { void *trace_elems[20]; int trace_elem_count(backtrace(trace_elems, 20)); backtrace_symbols_fd(trace_elems, trace_elem_count, 2); } static void handler() { // Display message of last thrown exception if any try { throw; } catch(const std::exception& e) { int status; size_t n = 0; char *name = abi::__cxa_demangle(typeid(e).name(), 0, &n, &status); std::cerr << "terminate called after throwing an instance of '" << (status < 0 ? "UNKNOWN" : name) << "'\n what(): " << e.what() << "\n"; if(n) free(name); } catch(...) {} print_backtrace(); abort(); } void show_backtrace() { std::set_terminate(handler); } #endif jellyfish-1.1.11/jellyfish/generate_sequence.cc0000644015303500042660000001240512151455365016511 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include class rDNAg_t { public: explicit rDNAg_t(CRandomMersenne *_rng) : rng(_rng), i(15), buff(0) {} char letter() { i = (i+1) % 16; if(i == 0) buff = rng->BRandom(); char res = letters[buff & 0x3]; buff >>= 2; return res; } char qual_Illumina() { return rng->IRandom(66, 104); } private: CRandomMersenne *rng; int i; uint32_t buff; static const char letters[4]; }; const char rDNAg_t::letters[4] = { 'A', 'C', 'G', 'T' }; void create_path(char *path, unsigned int path_size, const char *ext, bool many, int i, const char *output_arg) { int len; if(many) len = snprintf(path, path_size, "%s_%d.%s", output_arg, i, ext); else len = snprintf(path, path_size, "%s.%s", output_arg, ext); if(len < 0) die << "Error creating the fasta file '" << path << "'" << err::no; if((unsigned int)len >= path_size) die << "Output prefix too long '" << output_arg << "'"; } int main(int argc, char *argv[]) { generate_sequence_args args(argc, argv); if(args.verbose_flag) std::cout << "Seed: " << args.seed_arg << "\n"; CRandomMersenne rng(args.seed_arg); // Generate matrices uint64_t lines[64]; for(unsigned int j = 0; j < args.mer_arg.size(); j++) { if(args.mer_arg[j] <= 0 || args.mer_arg[j] > 31) die << "Mer size (" << args.mer_arg[j] << ") must be between 1 and 31."; int matrix_size = args.mer_arg[j] << 1; SquareBinaryMatrix mat(matrix_size), inv(matrix_size); while(true) { for(int i = 0; i < matrix_size; i++) lines[i] = (uint64_t)rng.BRandom() | ((uint64_t)rng.BRandom() << 32); mat = SquareBinaryMatrix(lines, matrix_size); try { inv = mat.inverse(); break; } catch(SquareBinaryMatrix::SingularMatrix &e) {} } char path[4096]; int len = snprintf(path, sizeof(path), "%s_matrix_%d", args.output_arg, args.mer_arg[j]); if(len < 0) die << "Error creating the matrix file '" << path << "'" << err::no; if((unsigned int)len >= sizeof(path)) die << "Output prefix too long '" << args.output_arg << "'"; std::ofstream fd(path); if(!fd.good()) die << "Can't open matrix file '" << path << "'" << err::no; if(args.verbose_flag) std::cout << "Creating matrix file '" << path << "'\n"; mat.dump(&fd); if(!fd.good()) die << "Error while writing matrix '" << path << "'" << err::no; fd.close(); } // Output sequence rDNAg_t rDNAg(&rng); char path[4096]; bool many = args.length_arg.size() > 1; for(unsigned int i = 0; i < args.length_arg.size(); ++i) { size_t length = args.length_arg[i]; if(args.fastq_flag) { create_path(path, sizeof(path), "fq", many, i, args.output_arg); std::ofstream fd(path); if(!fd.good()) die << "Can't open fasta file '" << path << err::no; if(args.verbose_flag) std::cout << "Creating fastq file '" << path << "'\n"; size_t total_len = 0; unsigned long read_id = 0; while(total_len < length) { fd << "@read_" << (read_id++) << "\n"; int base; for(base = 0; base < 70 && total_len < length; base++, total_len++) fd << rDNAg.letter(); fd << "\n+\n"; for(int j = 0; j < base; j++) fd << rDNAg.qual_Illumina(); fd << "\n"; } if(!fd.good()) die << "Error while writing fasta file '" << path << err::no; fd.close(); } else { create_path(path, sizeof(path), "fa", many, i, args.output_arg); std::ofstream fd(path); if(!fd.good()) die << "Can't open fasta file '" << path << err::no; if(args.verbose_flag) std::cout << "Creating fasta file '" << path << "'\n"; size_t read_length = args.read_length_given ? args.read_length_arg : length; size_t total_len = 0; size_t read = 0; long rid = 0; fd << ">read" << ++rid << "\n"; while(total_len < length) { for(int base = 0; base < 70 && total_len < length && read < read_length; base++) { fd << rDNAg.letter(); total_len++; read++; } fd << "\n"; if(read >= read_length) { fd << ">read" << ++rid << "\n"; read = 0; } } if(!fd.good()) die << "Error while writing fasta file '" << path << err::no; fd.close(); } } return 0; } jellyfish-1.1.11/jellyfish/double_fifo_input.hpp0000644015303500042660000001276712151455365016740 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_DOUBLE_FIFO_INPUT__ #define __JELLYFISH_DOUBLE_FIFO_INPUT__ #include #include #include #include #include #include #include #include #include namespace jellyfish { /* Double lock free fifo containing elements of type T. * * The input thread, created by this class, runs the virtual * function 'fill' to fill up tockens from the wq (to be Written * tocken Queue) and append then into the rq (to be Read tocken * Queue). * * next() returns a pointer to a filled tocken. If the queue is * empty, it will sleep some (start with 1/100th +/- 50%, and * exponential back off) to give time for the queue to fill up. */ template class double_fifo_input { define_error_class(Error); typedef concurrent_queue queue; // The only transitions are: // WORKING -> SLEEPING -> WAKENING -> WORKING enum state_t { WORKING, SLEEPING, WAKENING }; queue rq, wq; T * buckets; const unsigned long nb_buckets; state_t volatile state; pthread_t input_id; locks::pthread::cond full_queue; static void *static_input_routine(void *arg); void input_routine(); public: typedef T bucket_t; explicit double_fifo_input(unsigned long _nb_buckets); virtual ~double_fifo_input(); virtual void fill() = 0; T *next(); void release(T *bucket); bool is_closed() { return rq.is_closed(); } typedef T *bucket_iterator; bucket_iterator bucket_begin() const { return buckets; } bucket_iterator bucket_end() const { return buckets + nb_buckets; } protected: // Get bucket to fill and release. T *write_next(); void write_release(T *bucket); void close() { rq.close(); } private: // Wake up input thread if it was sleeping. Returns previous // state. state_t input_wake(); }; /****/ template double_fifo_input::double_fifo_input(unsigned long _nb_buckets) : rq(_nb_buckets), wq(_nb_buckets), nb_buckets(_nb_buckets), state(WORKING), input_id(0) { buckets = new T[nb_buckets]; for(unsigned long i = 0; i < nb_buckets; ++i) wq.enqueue(&buckets[i]); if(pthread_create(&input_id, 0, static_input_routine, (void *)this) != 0) eraise(Error) << "Failed creating input thread" << err::no; } template double_fifo_input::~double_fifo_input() { if(input_id) if(pthread_cancel(input_id)) { void *input_return; pthread_join(input_id, &input_return); } delete [] buckets; } template void *double_fifo_input::static_input_routine(void *arg) { double_fifo_input *o = (double_fifo_input *)arg; o->input_routine(); return 0; } template void double_fifo_input::input_routine() { state_t prev_state; while(!rq.is_closed()) { // The write queue is full or this is the first iteration, sleep // until it become less than some threshold full_queue.lock(); prev_state = atomic::gcc::cas(&state, WORKING, SLEEPING); assert(prev_state == WORKING); do { full_queue.wait(); } while(state != WAKENING); prev_state = atomic::gcc::cas(&state, WAKENING, WORKING); assert(prev_state == WAKENING); full_queue.unlock(); fill(); } } template typename double_fifo_input::state_t double_fifo_input::input_wake() { state_t prev_state = atomic::gcc::cas(&state, SLEEPING, WAKENING); assert(prev_state >= WORKING && prev_state <= WAKENING); if(prev_state == SLEEPING) { full_queue.lock(); full_queue.signal(); full_queue.unlock(); } return prev_state; } template T *double_fifo_input::next() { if(rq.is_low()) // && !rq.is_closed()) input_wake(); T *res = 0; while(!(res = rq.dequeue())) { if(rq.is_closed()) return 0; input_wake(); // TODO Should we wait on a lock instead when the input thread is // already in working state (i.e. it is most likely blocked on // some I/O). static struct timespec time_sleep = { 0, 10000000 }; nanosleep(&time_sleep, NULL); } return res; } template void double_fifo_input::release(T *bucket) { assert(bucket - buckets >= 0 && (unsigned long)(bucket - buckets) < nb_buckets); wq.enqueue(bucket); } template T *double_fifo_input::write_next() { return wq.dequeue(); } template void double_fifo_input::write_release(T *bucket) { assert(bucket - buckets >= 0 && (unsigned long)(bucket - buckets) < nb_buckets); rq.enqueue(bucket); } } #endif jellyfish-1.1.11/jellyfish/noop_dumper.hpp0000644015303500042660000000170012151455365015554 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_NOOP_DUMPER_HPP #define __JELLYFISH_NOOP_DUMPER_HPP #include namespace jellyfish { class noop_dumper : public dumper_t { public: noop_dumper() {} virtual void _dump() {} }; } #endif /* __JELLYFISH_NOOP_DUMPER_HPP */ jellyfish-1.1.11/jellyfish/parse_dna.hpp0000644015303500042660000001464712151455365015177 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_PARSE_DNA_HPP__ #define __JELLYFISH_PARSE_DNA_HPP__ #include #include #include #include #include #include #include #include namespace jellyfish { class parse_dna : public double_fifo_input { typedef std::vector fary_t; uint_t mer_len; size_t buffer_size; const fary_t files; fary_t::const_iterator current_file; bool have_seam; char *seam; allocators::mmap buffer_data; bool canonical; sequence_parser *fparser; public: /* Action to take for a given letter in fasta file: * A, C, G, T: map to 0, 1, 2, 3. Append to kmer * Other nucleic acid code: map to -1. reset kmer * '\n': map to -2. ignore * Other ASCII: map to -3. Report error. */ static uint64_t mer_string_to_binary(const char *in, uint_t klen) { uint64_t res = 0; for(uint_t i = 0; i < klen; i++) { const uint_t c = dna_codes[(uint_t)*in++]; if(c & CODE_NOT_DNA) return 0; res = (res << 2) | c; } return res; } static void mer_binary_to_string(uint64_t mer, uint_t klen, char *out) { static const char table[4] = { 'A', 'C', 'G', 'T' }; for(unsigned int i = 0 ; i < klen; i++) { out[klen-1-i] = table[mer & (uint64_t)0x3]; mer >>= 2; } out[klen] = '\0'; } static uint64_t reverse_complement(uint64_t v, uint_t length) { v = ((v >> 2) & 0x3333333333333333UL) | ((v & 0x3333333333333333UL) << 2); v = ((v >> 4) & 0x0F0F0F0F0F0F0F0FUL) | ((v & 0x0F0F0F0F0F0F0F0FUL) << 4); v = ((v >> 8) & 0x00FF00FF00FF00FFUL) | ((v & 0x00FF00FF00FF00FFUL) << 8); v = ((v >> 16) & 0x0000FFFF0000FFFFUL) | ((v & 0x0000FFFF0000FFFFUL) << 16); v = ( v >> 32 ) | ( v << 32); return (((uint64_t)-1) - v) >> (bsizeof(v) - (length << 1)); } template parse_dna(T _files_start, T _files_end, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size); ~parse_dna() { delete [] seam; } void set_canonical(bool v = true) { canonical = v; } virtual void fill(); class thread { parse_dna *parser; bucket_t *sequence; const uint_t mer_len, lshift; uint64_t kmer, rkmer; const uint64_t masq; uint_t cmlen; const bool canonical; uint64_t distinct, total; typedef void (*error_reporter)(std::string& err); error_reporter error_report; public: explicit thread(parse_dna *_parser) : parser(_parser), sequence(0), mer_len(_parser->mer_len), lshift(2 * (mer_len - 1)), kmer(0), rkmer(0), masq((1UL << (2 * mer_len)) - 1), cmlen(0), canonical(parser->canonical), distinct(0), total(0), error_report(0) {} uint64_t get_uniq() const { return 0; } uint64_t get_distinct() const { return distinct; } uint64_t get_total() const { return total; } template void parse(T &counter) { cmlen = kmer = rkmer = 0; while((sequence = parser->next())) { const char *start = sequence->start; const char * const end = sequence->end; while(start < end) { const uint_t c = dna_codes[(uint_t)*start++]; switch(c) { case CODE_IGNORE: break; case CODE_COMMENT: report_bad_input(*(start-1)); // Fall through case CODE_RESET: cmlen = kmer = rkmer = 0; break; default: kmer = ((kmer << 2) & masq) | c; rkmer = (rkmer >> 2) | ((0x3 - c) << lshift); if(++cmlen >= mer_len) { cmlen = mer_len; typename T::val_type oval; if(canonical) counter->add(kmer < rkmer ? kmer : rkmer, 1, &oval); else counter->add(kmer, 1, &oval); distinct += oval == (typename T::val_type)0; ++total; } } } // Buffer exhausted. Get a new one cmlen = kmer = rkmer = 0; parser->release(sequence); } } void set_error_reporter(error_reporter e) { error_report = e; } private: void report_bad_input(char c) { if(!error_report) return; std::string err("Bad character in sequence: "); err += c; error_report(err); } }; friend class thread; thread new_thread() { return thread(this); } }; } template jellyfish::parse_dna::parse_dna(T _files_start, T _files_end, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size) : double_fifo_input(nb_buffers), mer_len(_mer_len), buffer_size(allocators::mmap::round_to_page(_buffer_size)), files(_files_start, _files_end), current_file(files.begin()), have_seam(false), buffer_data(buffer_size * nb_buffers), canonical(false) { seam = new char[mer_len]; memset(seam, 'A', mer_len); unsigned long i = 0; for(bucket_iterator it = bucket_begin(); it != bucket_end(); ++it, ++i) { it->end = it->start = (char *)buffer_data.get_ptr() + i * buffer_size; } assert(i == nb_buffers); fparser = sequence_parser::new_parser(*current_file); } #endif jellyfish-1.1.11/jellyfish/dna_codes.hpp0000644015303500042660000000111712151455365015146 00000000000000#ifndef __DNA_CODE_HPP__ #define __DNA_CODE_HPP__ #include #include namespace jellyfish { static const uint_t CODE_A = 0; static const uint_t CODE_C = 0; static const uint_t CODE_G = 0; static const uint_t CODE_T = 0; // Non DNA codes have the MSB on static const uint_t CODE_RESET = (uint_t)-1; static const uint_t CODE_IGNORE = (uint_t)-2; static const uint_t CODE_COMMENT = (uint_t)-3; static const uint_t CODE_NOT_DNA = ((uint_t)1) << (bsizeof(uint_t) - 1); extern const char dna_codes[256]; }; #endif /* __DNA_CODE_HPP__ */ jellyfish-1.1.11/jellyfish/dump_main.cc0000644015303500042660000000636112151455365015004 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include dump_args args; // Command line switches and arguments template void dump(iterator& it, std::ostream &out, const dump_args &args, uint64_t lower_count, uint64_t upper_count) { if(args.column_flag) { char spacer = args.tab_flag ? '\t' : ' '; while(it.next()) { if(it.get_val() < lower_count || it.get_val() > upper_count) continue; out << it.get_dna_str() << spacer << it.get_val() << "\n"; } } else { while(it.next()) { if(it.get_val() < lower_count || it.get_val() > upper_count) continue; out << ">" << it.get_val() << "\n" << it.get_dna_str() << "\n"; } } } void dump_mapped_file(mapped_file& dbf, std::ostream& out) { dbf.sequential().will_need(); char type[8]; memcpy(type, dbf.base(), sizeof(type)); uint64_t lower_count = args.lower_count_given ? args.lower_count_arg : 0; uint64_t upper_count = args.upper_count_given ? args.upper_count_arg : (uint64_t)-1; if(!strncmp(type, jellyfish::compacted_hash::file_type, sizeof(type))) { hash_query_t hash(dbf); hash_query_t::iterator it = hash.iterator_all(); dump(it, out, args, lower_count, upper_count); } else if(!strncmp(type, jellyfish::raw_hash::file_type, sizeof(type))) { raw_inv_hash_query_t hash(dbf); raw_inv_hash_query_t::iterator it = hash.iterator_all(); dump(it, out, args, lower_count, upper_count); } else { die << "Invalid file type '" << err::substr(type, sizeof(type)) << "'."; } } int dump_main(int argc, char *argv[]) { args.parse(argc, argv); ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Error opening output file '" << args.output_arg << "'"; bool dumped = false; try { mapped_file dbf(args.db_arg.c_str()); dump_mapped_file(dbf, out); dumped = true; } catch(mapped_file::ErrorMMap) { dumped = false; } if(!dumped) { // Memory map failed. Try streaming hash_reader_t hash(args.db_arg.c_str()); uint64_t lower_count = args.lower_count_given ? args.lower_count_arg : 0; uint64_t upper_count = args.upper_count_given ? args.upper_count_arg : (uint64_t)-1; dump(hash, out, args, lower_count, upper_count); } out.close(); return 0; } jellyfish-1.1.11/jellyfish/hash_merge.cc0000644015303500042660000001633112151455365015133 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_KMER_SIZE 32 class ErrorWriting : public std::exception { std::string msg; public: explicit ErrorWriting(const std::string &_msg) : msg(_msg) {} virtual ~ErrorWriting() throw() {} virtual const char* what() const throw() { return msg.c_str(); } }; struct writer_buffer { volatile bool full; hash_writer_t writer; }; struct writer_info { locks::pthread::cond cond; volatile bool done; uint_t nb_buffers; std::ostream *out; writer_buffer *buffers; }; void *writer_function(void *_info) { writer_info *info = (writer_info *)_info; uint_t buf_id = 0; uint64_t waiting = 0; while(true) { info->cond.lock(); while(!info->buffers[buf_id].full) { if(info->done) { info->cond.unlock(); return new uint64_t(waiting); } waiting++; info->cond.wait(); } info->cond.unlock(); info->buffers[buf_id].writer.dump(info->out); info->cond.lock(); info->buffers[buf_id].full = false; info->cond.signal(); info->cond.unlock(); buf_id = (buf_id + 1) % info->nb_buffers; } } int merge_main(int argc, char *argv[]) { merge_args args(argc, argv); int i; unsigned int rklen = 0; size_t max_reprobe = 0; size_t hash_size = 0; SquareBinaryMatrix hash_matrix; SquareBinaryMatrix hash_inverse_matrix; // compute the number of hashes we're going to read int num_hashes = args.input_arg.size(); // this is our row of iterators std::vector iters(num_hashes); // create an iterator for each hash file for(i = 0; i < num_hashes; i++) { // open the hash database const char *db_file = args.input_arg[i]; try { iters[i].initialize(db_file, args.out_buffer_size_arg); } catch(std::exception *e) { die << "Can't open k-mer database: " << e; } unsigned int len = iters[i].get_key_len(); if(rklen != 0 && len != rklen) die << "Can't merge hashes of different key lengths"; rklen = len; uint64_t rep = iters[i].get_max_reprobe(); if(max_reprobe != 0 && rep != max_reprobe) die << "Can't merge hashes with different reprobing stratgies"; max_reprobe = rep; size_t size = iters[i].get_size(); if(hash_size != 0 && size != hash_size) die << "Can't merge hash with different size"; hash_size = size; if(hash_matrix.get_size() == 0) { hash_matrix = iters[i].get_hash_matrix(); hash_inverse_matrix = iters[i].get_hash_inverse_matrix(); } else { SquareBinaryMatrix new_hash_matrix = iters[i].get_hash_matrix(); SquareBinaryMatrix new_hash_inverse_matrix = iters[i].get_hash_inverse_matrix(); if(new_hash_matrix != hash_matrix || new_hash_inverse_matrix != hash_inverse_matrix) die << "Can't merge hash with different hash function"; } } if(rklen == 0) die << "No valid hash tables found"; typedef jellyfish::heap_t hheap_t; hheap_t heap(num_hashes); if(args.verbose_flag) std::cerr << "mer length = " << (rklen / 2) << "\n" << "hash size = " << hash_size << "\n" << "num hashes = " << num_hashes << "\n" << "max reprobe = " << max_reprobe << "\n" << "heap capa = " << heap.capacity() << "\n" << "matrix = " << hash_matrix.xor_sum() << "\n" << "inv_matrix = " << hash_inverse_matrix.xor_sum() << "\n"; // populate the initial heap for(int h = 0; h < num_hashes; ++h) { if(iters[h].next()) heap.push(iters[h]); } assert(heap.size() == heap.capacity()); if(heap.is_empty()) die << "Hashes contain no items."; // open the output file std::ofstream out(args.output_arg.c_str()); size_t nb_records = args.out_buffer_size_arg / (bits_to_bytes(rklen) + bits_to_bytes(8 * args.out_counter_len_arg)); if(args.verbose_flag) std::cerr << "buffer size " << args.out_buffer_size_arg << " nb_records " << nb_records << "\n"; writer_info info; info.nb_buffers = 4; info.out = &out; info.done = false; info.buffers = new writer_buffer[info.nb_buffers]; for(uint_t j = 0; j < info.nb_buffers; j++) { info.buffers[j].full = false; info.buffers[j].writer.initialize(nb_records, rklen, 8 * args.out_counter_len_arg, &iters[0]); } info.buffers[0].writer.write_header(&out); pthread_t writer_thread; pthread_create(&writer_thread, NULL, writer_function, &info); if(args.verbose_flag) std::cerr << "out kmer len = " << info.buffers[0].writer.get_key_len_bytes() << " bytes\n" << "out val len = " << info.buffers[0].writer.get_val_len_bytes() << " bytes\n"; uint_t buf_id = 0; uint64_t waiting = 0; hheap_t::const_item_t head = heap.head(); while(heap.is_not_empty()) { uint64_t key = head->key; uint64_t sum = 0; do { sum += head->val; heap.pop(); if(head->it->next()) heap.push(*head->it); head = heap.head(); } while(heap.is_not_empty() && head->key == key); while(!info.buffers[buf_id].writer.append(key, sum)) { info.cond.lock(); info.buffers[buf_id].full = true; buf_id = (buf_id + 1) % info.nb_buffers; while(info.buffers[buf_id].full) { waiting++; info.cond.wait(); } info.cond.signal(); info.cond.unlock(); } } info.cond.lock(); // while(info.buffers[buf_id].full) { waiting++; info.cond.wait(); } info.buffers[buf_id].full = true; info.done = true; info.cond.signal(); info.cond.unlock(); //uint64_t *writer_waiting; pthread_join(writer_thread, NULL); uint64_t unique = 0, distinct = 0, total = 0, max_count = 0; for(uint_t j = 0; j < info.nb_buffers; j++) { unique += info.buffers[j].writer.get_unique(); distinct += info.buffers[j].writer.get_distinct(); total += info.buffers[j].writer.get_total(); if(info.buffers[j].writer.get_max_count() > max_count) max_count = info.buffers[j].writer.get_max_count(); } info.buffers[0].writer.update_stats_with(&out, unique, distinct, total, max_count); out.close(); return 0; } jellyfish-1.1.11/jellyfish/mapped_file.cc0000644015303500042660000000160712151455365015276 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include char mapped_file::load() const { long sz = sysconf(_SC_PAGESIZE); char unused = 0; for(char *w = _base; w < _base + _length; w += sz) unused ^= *w; return unused; } jellyfish-1.1.11/jellyfish/fastq_dumper.hpp0000644015303500042660000001063312151455365015724 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __FASTQ_DUMPER_HPP__ #define __FASTQ_DUMPER_HPP__ #include #include #include #include namespace jellyfish { namespace fastq_hash { define_error_class(ErrorReading); static const char *file_type = "JFFSTQDN"; struct header { char type[8]; uint64_t key_len; uint64_t size; uint64_t max_reprobes; uint64_t values_pos; header(uint64_t _key_len, uint64_t _size, uint64_t _max_reprobes, uint64_t _values_pos) : key_len(_key_len), size(_size), max_reprobes(_max_reprobes), values_pos(_values_pos) { memcpy(&type, file_type, sizeof(type)); } explicit header(const char *ptr) { if(memcmp(ptr, file_type, sizeof(type))) eraise(ErrorReading) << "Bad file type '" << err::substr(ptr, sizeof(type)) << "', expected '" << err::substr(file_type, sizeof(type)) << "'"; memcpy((void *)this, ptr, sizeof(struct header)); } }; template class raw_dumper : public dumper_t { const uint_t threads; const std::string file_prefix; storage_t *const ary; int file_index; public: raw_dumper(uint_t _threads, const char *_file_prefix, size_t chunk_size, storage_t *_ary) : threads(_threads), file_prefix(_file_prefix), ary(_ary), file_index(0) {} virtual void _dump(); static storage_t * read(const mapped_file &file); static storage_t * read(const std::string &file); static storage_t * read(const char *file); }; template void raw_dumper::_dump() { std::ofstream _out; open_next_file(file_prefix.c_str(), &file_index, _out); // TODO: the zeroing out of the hash is not parallelized. // Skip header _out.seekp(sizeof(struct header)); // Write matrices ary->write_matrices(&_out); // Write key set ary->write_keys_blocks(&_out, 0, ary->get_size()); std::streampos pos = _out.tellp(); ary->zero_keys(0, ary->get_size()); // Write values array ary->write_values(&_out, 0, ary->get_size()); ary->zero_values(0, ary->get_size()); // Update header _out.seekp(0); struct header header(ary->get_key_len(), ary->get_size(), ary->get_max_reprobe(), pos); _out.write((char *)&header, sizeof(header)); _out.close(); } template storage_t * raw_dumper::read(const std::string &file) { mapped_file mf(file.c_str()); return read(mf); } template storage_t * raw_dumper::read(const char *file) { mapped_file mf(file); return read(mf); } template storage_t * raw_dumper::read(const mapped_file &mf) { if(mf.length() < sizeof(struct header)) eraise(ErrorReading) << "File '" << mf.path() << "' too short. Should be at least '" << sizeof(struct header) << "' bytes"; struct header header(mf.base()); size_t off = sizeof(header); SquareBinaryMatrix hash_matrix, hash_inv_matrix; off += hash_matrix.read(mf.base() + off); off += hash_inv_matrix.read(mf.base() + off); return new storage_t(mf.base() + off, mf.base() + header.values_pos, header.size, header.key_len, header.max_reprobes, jellyfish::quadratic_reprobes, hash_matrix, hash_inv_matrix); } } } #endif jellyfish-1.1.11/jellyfish/allocators_malloc.hpp0000644015303500042660000000312112151455365016716 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ /* Allocators return zeroed chunk of memory */ #ifndef __JELLYFISH_ALLOCATORS_MALLOC_HPP__ #define __JELLYFISH_ALLOCATORS_MALLOC_HPP__ #include namespace allocators { class malloc { void *ptr; size_t size; public: malloc() : ptr(NULL), size(0) {} explicit malloc(size_t _size) : ptr(NULL), size(0) { realloc(_size); } ~malloc() { if(ptr) ::free(ptr); } void *get_ptr() { return ptr; } size_t get_size() const { return size; } void *realloc(size_t new_size) { size_t old_size = size; void *new_ptr = ::realloc(ptr, new_size); if(!new_ptr) return NULL; ptr = new_ptr; size = new_size; if(new_size > old_size) ::memset((char *)ptr + old_size, '\0', new_size - old_size); return ptr; } // NOOP int lock() { return 0; } int unlock() { return 0; } }; } #endif jellyfish-1.1.11/jellyfish/misc.cc0000644015303500042660000000341512151455365013763 00000000000000/* This file is part of Jellyfish. Jellyfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by n the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include uint64_t bogus_sum(void *data, size_t len) { uint64_t res = 0, tmp = 0; uint64_t *ptr = (uint64_t *)data; while(len >= sizeof(uint64_t)) { res ^= *ptr++; len -= sizeof(uint64_t); } if(len > 0) { memcpy(&tmp, ptr, len); res ^= tmp; } return res; } void disabled_misaligned_mem_access() { #if defined(__GNUC__) # if defined(__i386__) /* Enable Alignment Checking on x86 */ __asm__("pushf\norl $0x40000,(%esp)\npopf"); # elif defined(__x86_64__) /* Enable Alignment Checking on x86_64 */ __asm__("pushf\norl $0x40000,(%rsp)\npopf"); # endif #endif } // Return -1 if size cannot be obtained. std::streamoff get_file_size(std::istream& is) { if(!is.good()) return -1; std::streampos cpos = is.tellg(); if(!is.good()) { is.clear(); return -1; } is.seekg(0, std::ios::end); if(!is.good()) { is.clear(); return -1; } std::streamoff res = is.tellg() - cpos; if(!is.good()) { is.clear(); return -1; } is.seekg(cpos); return res; } jellyfish-1.1.11/jellyfish/sequence_parser.cc0000644015303500042660000000500312151455365016207 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include jellyfish::sequence_parser * jellyfish::sequence_parser::new_parser(const char *path) { int fd; char peek; fd = file_peek(path, &peek); switch(peek) { case '>': return new jellyfish::fasta_sequence_parser(fd, path, &peek, 1); case '@': return new jellyfish::fastq_sequence_parser(fd, path, &peek, 1); default: eraise(FileParserError) << "'" << path << "': " << "Invalid input file. Expected fasta or fastq" ; } return 0; } bool jellyfish::fasta_sequence_parser::parse(char *start, char **end) { while(start < *end && base() != _eof) { char c = 0; switch(c = sbumpc()) { case _eof: break; case '>': if(pbase() == '\n') { while(c != _eof && c != '\n') { c = sbumpc(); } *start++ = 'N'; } else *start++ = c; break; case '\n': break; default: *start++ = c; } } *end = start; return !eof(); } bool jellyfish::fastq_sequence_parser::parse(char *start, char **end) { while(start < *end && base() != _eof) { switch(sbumpc()) { case _eof: break; case '@': if(pbase() == '\n') { while(base() != _eof && base() != '\n') { sbumpc(); } *start++ = 'N'; seq_len = 0; } else *start++ = base(); break; case '+': if(pbase() == '\n') { // Skip qual header & values while(base() != _eof && base() != '\n') { sbumpc(); } while(base() != _eof && seq_len > 0) { if(base() != '\n') --seq_len; sbumpc(); } } else *start++ = base(); break; case '\n': break; default: *start++ = base(); ++seq_len; } } *end = start; return base() != _eof; } jellyfish-1.1.11/jellyfish/direct_sorted_dumper.hpp0000644015303500042660000001112712151455365017437 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include namespace jellyfish { template class direct_sorted_dumper : public dumper_t, public thread_exec { typedef typename storage_t::iterator iterator; typedef typename compacted_hash::writer writer_t; typedef token_ring token_ring_t; struct thread_info_t { writer_t writer; token_ring_t::token *token; }; uint_t threads; const char *file_prefix; size_t buffer_size; uint_t klen, vlen; uint_t key_len, val_len; size_t record_len, nb_records; storage_t *ary; int file_index; token_ring_t tr; uint64_t lower_count, upper_count; struct thread_info_t *thread_info; uint64_t volatile unique, distinct, total, max_count; std::ofstream *out; bool one_file; public: direct_sorted_dumper(uint_t _threads, const char *_file_prefix, size_t _buffer_size, uint_t _vlen, storage_t *_ary) : threads(_threads), file_prefix(_file_prefix), buffer_size(_buffer_size), klen(_ary->get_key_len()), vlen(_vlen), ary(_ary), tr() , lower_count(0), upper_count(std::numeric_limits::max()), one_file(false) { key_len = bits_to_bytes(klen); val_len = bits_to_bytes(vlen); record_len = key_len + val_len; nb_records = _buffer_size / record_len; thread_info = new struct thread_info_t[threads]; for(uint_t i = 0; i < threads; i++) { thread_info[i].writer.initialize(nb_records, klen, vlen, ary); thread_info[i].token = tr.new_token(); } unique = distinct = total = max_count = 0; } ~direct_sorted_dumper() { if(thread_info) delete[] thread_info; } bool get_one_file() const { return one_file; } void set_one_file(bool nv) { one_file = nv; } void set_lower_count(uint64_t l) { lower_count = l; } void set_upper_count(uint64_t u) { upper_count = u; } virtual void start(int i) { dump_to_file(i); } void dump_to_file(int i); virtual void _dump(); void update_stats() { thread_info[0].writer.update_stats_with(out, unique, distinct, total, max_count); } }; template void direct_sorted_dumper::_dump() { std::ofstream _out; if(one_file) { _out.open(file_prefix); } else { open_next_file(file_prefix, &file_index, _out); } out = &_out; unique = distinct = total = max_count = 0; tr.reset(); thread_info[0].writer.write_header(out); exec_join(threads); update_stats(); _out.close(); } template void direct_sorted_dumper::dump_to_file(int id) { size_t i; struct thread_info_t *my_info = &thread_info[id]; atomic_t atomic; my_info->writer.reset_counters(); for(i = id; i * nb_records < ary->get_size(); i += threads) { iterator it(ary, i * nb_records, (i + 1) * nb_records); while(it.next()) if(it.get_val().bits() >= lower_count && it.get_val().bits() <= upper_count) my_info->writer.append(it.get_key(), it.get_val().bits()); my_info->token->wait(); my_info->writer.dump(out); my_info->token->pass(); ary->zero(i * nb_records, nb_records); } atomic.add_fetch(&unique, my_info->writer.get_unique()); atomic.add_fetch(&distinct, my_info->writer.get_distinct()); atomic.add_fetch(&total, my_info->writer.get_total()); atomic.set_to_max(&max_count, my_info->writer.get_max_count()); } } jellyfish-1.1.11/jellyfish/hash_function.hpp0000644015303500042660000000150712151455365016062 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_HASH_FUNCTION_HPP__ #define __JELLYFISH_HASH_FUNCTION_HPP__ uint64_t MurmurHash64A(const void *key, int len, uint64_t seed); #endif jellyfish-1.1.11/jellyfish/thread_exec.hpp0000644015303500042660000000257412151455365015512 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_THREAD_EXEC_HPP__ #define __JELLYFISH_THREAD_EXEC_HPP__ #include #include #include #include #include #include #include #include class thread_exec { struct thread_info { int id; pthread_t thid; thread_exec *self; }; static void *start_routine(void *); std::vector infos; public: define_error_class(Error); thread_exec() {} virtual ~thread_exec() {} virtual void start(int id) = 0; void exec(int nb_threads); void join(); void exec_join(int nb_threads) { exec(nb_threads); join(); } }; #endif // __THREAD_EXEC_HPP__ jellyfish-1.1.11/jellyfish/direct_indexing_array.hpp0000644015303500042660000001113612151455365017566 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_DIRECT_INDEXING_ARRAY_HPP__ #define __JELLYFISH_DIRECT_INDEXING_ARRAY_HPP__ namespace jellyfish { namespace direct_indexing { template class array { public: typedef typename val_t::bits_t bits_t; uint_t key_len; size_t size; mem_block_t mem_block; bits_t *data; atomic_t atomic; public: explicit array(uint_t _key_len) : key_len(_key_len), size(((size_t)1) << key_len), mem_block(size * sizeof(bits_t)), data((bits_t *)mem_block.get_ptr()) { } array(char *map, uint_t _key_len) : key_len(_key_len), size(((size_t)1) << key_len), data((bits_t *)map) { } size_t get_size() const { return size; } uint_t get_key_len() const { return key_len; } uint_t get_val_len() const { return sizeof(bits_t); } size_t get_max_reprobe_offset() const { return 1; } void write_ary_header(std::ostream *out) const { SquareBinaryMatrix id(key_len); id.init_identity(); id.dump(out); id.dump(out); } void write_raw(std::ostream *out) const {} template bool add(key_t key, const add_t &val, val_t *_oval = 0) { bits_t oval = data[key]; val_t nval = val_t(oval) + val; while(true) { bits_t noval = atomic.cas(&data[key], oval, nval.bits()); if(noval == oval) { if(_oval) *_oval = val_t(oval); return true; } oval = noval; nval = val_t(oval) + val; } return true; } bool get_val(key_t key, val_t &val, bool full = true) const { val = data[key]; return true; } class iterator { const array *ary; size_t start_id; size_t nid; size_t end_id; key_t key; bits_t val; size_t id; public: iterator(const array *_ary, size_t start, size_t end) : ary(_ary), start_id(start), nid(start), end_id(end > ary->get_size() ? ary->get_size() : end) {} void get_string(char *out) const { parse_dna::mer_binary_to_string(key, ary->get_key_len() / 2, out); } uint64_t get_hash() const { return key; } uint64_t get_pos() const { return key; } uint64_t get_start() const { return start_id; } uint64_t get_end() const { return end_id; } key_t get_key() const { return key; } val_t get_val() const { return val_t(val); } size_t get_id() const { return id; } bool next() { while((id = nid) < end_id) { nid++; val = ary->data[id]; if(val) { key = id; return true; } } return false; } }; friend class iterator; iterator iterator_all() const { return iterator(this, 0, get_size()); } iterator iterator_slice(size_t slice_number, size_t number_of_slice) const { std::pair res = slice(slice_number, number_of_slice, get_size()); return iterator(this, res.first, res.second); } /** * Zero out entries in [start, start+length). */ void zero(size_t start, size_t length) { if(start >= size) return; if(start + length > size) length = size - start; memset(data + start, '\0', length * sizeof(*data)); } void write(std::ostream *out, const size_t start, size_t length) const { if(start >= size) return; if(start + length > size) length = size - start; out->write((char *)(data + start), length * sizeof(*data)); } val_t operator[](key_t key) const { return val_t(data[key]); } }; } } #endif jellyfish-1.1.11/jellyfish/half.cpp0000644015303500042660000001655512151455365014150 00000000000000/////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas // Digital Ltd. LLC // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Industrial Light & Magic nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////// // Primary authors: // Florian Kainz // Rod Bogart //--------------------------------------------------------------------------- // // class half -- // implementation of non-inline members // //--------------------------------------------------------------------------- #include #include // using namespace std; //------------------------------------------------------------- // Lookup tables for half-to-float and float-to-half conversion //------------------------------------------------------------- HALF_EXPORT_CONST half::uif half::_toFloat[1 << 16] = #include HALF_EXPORT_CONST unsigned short half::_eLut[1 << 9] = #include //----------------------------------------------- // Overflow handler for float-to-half conversion; // generates a hardware floating-point overflow, // which may be trapped by the operating system. //----------------------------------------------- float half::overflow () { volatile float f = 1e10; for (int i = 0; i < 10; i++) f *= f; // this will overflow before // the for­loop terminates return f; } //----------------------------------------------------- // Float-to-half conversion -- general case, including // zeroes, denormalized numbers and exponent overflows. //----------------------------------------------------- short half::convert (int i) { // // Our floating point number, f, is represented by the bit // pattern in integer i. Disassemble that bit pattern into // the sign, s, the exponent, e, and the significand, m. // Shift s into the position where it will go in in the // resulting half number. // Adjust e, accounting for the different exponent bias // of float and half (127 versus 15). // register int s = (i >> 16) & 0x00008000; register int e = ((i >> 23) & 0x000000ff) - (127 - 15); register int m = i & 0x007fffff; // // Now reassemble s, e and m into a half: // if (e <= 0) { if (e < -10) { // // E is less than -10. The absolute value of f is // less than HALF_MIN (f may be a small normalized // float, a denormalized float or a zero). // // We convert f to a half zero with the same sign as f. // return s; } // // E is between -10 and 0. F is a normalized float // whose magnitude is less than HALF_NRM_MIN. // // We convert f to a denormalized half. // // // Add an explicit leading 1 to the significand. // m = m | 0x00800000; // // Round to m to the nearest (10+e)-bit value (with e between // -10 and 0); in case of a tie, round to the nearest even value. // // Rounding may cause the significand to overflow and make // our number normalized. Because of the way a half's bits // are laid out, we don't have to treat this case separately; // the code below will handle it correctly. // int t = 14 - e; int a = (1 << (t - 1)) - 1; int b = (m >> t) & 1; m = (m + a + b) >> t; // // Assemble the half from s, e (zero) and m. // return s | m; } else if (e == 0xff - (127 - 15)) { if (m == 0) { // // F is an infinity; convert f to a half // infinity with the same sign as f. // return s | 0x7c00; } else { // // F is a NAN; we produce a half NAN that preserves // the sign bit and the 10 leftmost bits of the // significand of f, with one exception: If the 10 // leftmost bits are all zero, the NAN would turn // into an infinity, so we have to set at least one // bit in the significand. // m >>= 13; return s | 0x7c00 | m | (m == 0); } } else { // // E is greater than zero. F is a normalized float. // We try to convert f to a normalized half. // // // Round to m to the nearest 10-bit value. In case of // a tie, round to the nearest even value. // m = m + 0x00000fff + ((m >> 13) & 1); if (m & 0x00800000) { m = 0; // overflow in significand, e += 1; // adjust exponent } // // Handle exponent overflow // if (e > 30) { overflow (); // Cause a hardware floating point overflow; return s | 0x7c00; // if this returns, the half becomes an } // infinity with the same sign as f. // // Assemble the half from s, e and m. // return s | (e << 10) | (m >> 13); } } //--------------------- // Stream I/O operators //--------------------- std::ostream & operator << (std::ostream &os, half h) { os << float (h); return os; } std::istream & operator >> (std::istream &is, half &h) { float f; is >> f; h = half (f); return is; } //--------------------------------------- // Functions to print the bit-layout of // floats and halfs, mostly for debugging //--------------------------------------- void printBits (std::ostream &os, half h) { unsigned short b = h.bits(); for (int i = 15; i >= 0; i--) { os << (((b >> i) & 1)? '1': '0'); if (i == 15 || i == 10) os << ' '; } } void printBits (std::ostream &os, float f) { half::uif x; x.f = f; for (int i = 31; i >= 0; i--) { os << (((x.i >> i) & 1)? '1': '0'); if (i == 31 || i == 23) os << ' '; } } void printBits (char c[19], half h) { unsigned short b = h.bits(); for (int i = 15, j = 0; i >= 0; i--, j++) { c[j] = (((b >> i) & 1)? '1': '0'); if (i == 15 || i == 10) c[++j] = ' '; } c[18] = 0; } void printBits (char c[35], float f) { half::uif x; x.f = f; for (int i = 31, j = 0; i >= 0; i--, j++) { c[j] = (((x.i >> i) & 1)? '1': '0'); if (i == 31 || i == 23) c[++j] = ' '; } c[34] = 0; } jellyfish-1.1.11/jellyfish/parse_qual_dna.cc0000644015303500042660000000472212151455365016010 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include namespace jellyfish { parse_qual_dna::parse_qual_dna(const fary_t &_files, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size, const char _qs, const char _min_q) : double_fifo_input(nb_buffers), mer_len(_mer_len), buffer_size(allocators::mmap::round_to_page(_buffer_size)), files(_files), current_file(files.begin()), have_seam(false), buffer_data(buffer_size * nb_buffers), quality_start(_qs), min_q(_min_q), canonical(false) { seam = new char[2*mer_len]; unsigned long i = 0; for(bucket_iterator it = bucket_begin(); it != bucket_end(); ++it, ++i) { it->end = it->start = (char*)buffer_data.get_ptr() + i * buffer_size; } fparser = seq_qual_parser::new_parser(*current_file); } void parse_qual_dna::fill() { bucket_t *new_seq = 0; while(true) { if(!new_seq) { new_seq = write_next(); if(!new_seq) break; } new_seq->end = new_seq->start + buffer_size; char *start = new_seq->start; if(have_seam) { have_seam = false; memcpy(start, seam, 2 * (mer_len - 1)); start += 2 * (mer_len - 1); } bool input_eof = !fparser->parse(start, &new_seq->end); if(new_seq->end > new_seq->start + 2 * mer_len) { have_seam = true; memcpy(seam, new_seq->end - 2 * (mer_len - 1), 2 * (mer_len - 1)); write_release(new_seq); new_seq = 0; } if(input_eof) { delete fparser; have_seam = false; if(++current_file == files.end()) { close(); break; } fparser = seq_qual_parser::new_parser(*current_file); } } } } jellyfish-1.1.11/jellyfish/dump_main_cmdline.hpp0000644015303500042660000001214212151455365016673 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __DUMP_ARGS_HPP__ #define __DUMP_ARGS_HPP__ #include class dump_args { public: bool column_flag; bool tab_flag; uint64_t lower_count_arg; bool lower_count_given; uint64_t upper_count_arg; bool upper_count_given; const char * output_arg; bool output_given; yaggo::string db_arg; enum { USAGE_OPT = 1000 }; dump_args() : column_flag(false), tab_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), output_arg(""), output_given(false) { } dump_args(int argc, char* argv[]) : column_flag(false), tab_flag(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), output_arg(""), output_given(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"column", 0, 0, 'c'}, {"tab", 0, 0, 't'}, {"lower-count", 1, 0, 'L'}, {"upper-count", 1, 0, 'U'}, {"output", 1, 0, 'o'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVctL:U:o:"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 'c': column_flag = true; break; case 't': tab_flag = true; break; case 'L': lower_count_given = true; lower_count_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-L, --lower-count=uint64") break; case 'U': upper_count_given = true; upper_count_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-U, --upper-count=uint64") break; case 'o': output_given = true; output_arg = optarg; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = yaggo::string(argv[optind]); ++optind; } #define dump_args_USAGE "Usage: jellyfish dump [options] db:path" const char * usage() const { return dump_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define dump_args_HELP "Dump k-mer counts\n\nBy default, dump in a fasta format where the header is the count and\n" \ "the sequence is the sequence of the k-mer. The column format is a 2\n" \ "column output: k-mer count.\n\n" \ "Options (default value in (), *required):\n" \ " -c, --column Column format (false)\n" \ " -t, --tab Tab separator (false)\n" \ " -L, --lower-count=uint64 Don't output k-mer with count < lower-count\n" \ " -U, --upper-count=uint64 Don't output k-mer with count > upper-count\n" \ " -o, --output=string Output file\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return dump_args_HELP; } #define dump_args_HIDDEN "Hidden options:" const char * hidden() const { return dump_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "column_flag:" << column_flag << "\n"; os << "tab_flag:" << tab_flag << "\n"; os << "lower_count_given:" << lower_count_given << " lower_count_arg:" << lower_count_arg << "\n"; os << "upper_count_given:" << upper_count_given << " upper_count_arg:" << upper_count_arg << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __DUMP_ARGS_HPP__" jellyfish-1.1.11/jellyfish/file_parser.cc0000644015303500042660000000552112200443056015310 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include int jellyfish::file_parser::file_peek(const char *path, char *peek) { int fd = open(path, O_RDONLY); if(fd == -1) eraise(FileParserError) << "Error opening file '" << path << "'" << err::no; if(read(fd, peek, 1) <= 0) eraise(FileParserError) << "Empty input file '" << path << "'" << err::no; return fd; } jellyfish::file_parser::file_parser(int fd, const char *path, const char *str, size_t len, char pbase) : _fd(fd), _base(pbase), _pbase(pbase) { struct stat stat_buf; if(fstat(fd, &stat_buf) == -1) eraise(FileParserError) << "Can't fstat '" << path << "'" << err::no; _size = stat_buf.st_size; if(_do_mmap) { _buffer = (char *)mmap(0, _size , PROT_READ, MAP_PRIVATE, fd, 0); _is_mmapped = _buffer != MAP_FAILED; } else { _is_mmapped = false; } if(_is_mmapped) { _end_buffer = _buffer + _size; _data = _buffer; _end_data = _end_buffer; close(_fd); } else { if(_force_mmap) eraise(FileParserError) << "Cannot mmap file '" << path << "' as required"; _buffer = new char[_buff_size]; _end_buffer = _buffer + _buff_size; _data = _end_data = _buffer; // What if len > _buff_size!!! if(str && len) { memcpy(_buffer, str, len); _end_data = _buffer + len; } } } jellyfish::file_parser::~file_parser() { if(_is_mmapped) { munmap(_buffer, _size); } else { delete[] _buffer; close(_fd); } } bool jellyfish::file_parser::read_next_buffer() { if(_is_mmapped) return false; ssize_t gcount = read(_fd, _buffer, _buff_size); if(gcount <= 0) return false; _data = _buffer; _end_data = _buffer + gcount; return true; } bool jellyfish::file_parser::_do_mmap = true; bool jellyfish::file_parser::_force_mmap = false; jellyfish-1.1.11/jellyfish/dump_fastq_main.cc0000644015303500042660000000437212151455365016202 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include int dump_fastq_main(int argc, char *argv[]) { dump_fastq_main_args args(argc, argv); ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Error opening output file '" << args.output_arg << "'" << err::no; fastq_storage_t *hash = raw_fastq_dumper_t::read(args.db_arg); if(args.verbose_flag) std::cerr << "k-mer length (bases): " << (hash->get_key_len() / 2) << "\n" "entries : " << hash->get_size() << "\n"; float lower_count = args.lower_count_given ? args.lower_count_arg : 0; float upper_count = args.upper_count_given ? args.upper_count_arg : FLT_MAX; fastq_storage_t::iterator it = hash->iterator_all(); out << std::scientific; if(args.column_flag) { char spacer = args.tab_flag ? '\t' : ' '; while(it.next()) { float val = it.get_val().to_float(); if(val < lower_count || val > upper_count) continue; out << it.get_dna_str() << spacer << val << "\n"; } } else { while(it.next()) { float val = it.get_val().to_float(); if(val < lower_count || val > upper_count) continue; out << ">" << val << "\n" << it.get_dna_str() << "\n"; } } out.close(); return 0; } jellyfish-1.1.11/jellyfish/aligned_values_array.hpp0000644015303500042660000001164412151455365017415 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_ALIGNED_VALUE_HPP__ #define __JELLYFISH_ALIGNED_VALUE_HPP__ #include #include namespace jellyfish { namespace aligned_values { template class array : public storage_t { public: typedef _key_t key_t; typedef _val_t val_t; private: typedef typename ::jellyfish::invertible_hash::array key_ary_t; typedef typename ::jellyfish::direct_indexing::array val_ary_t; key_ary_t keys; val_ary_t vals; public: array(size_t _size, uint_t _key_len, uint_t _reprobe_limit, size_t *_reprobes) : keys(_size, _key_len, 0, _reprobe_limit, _reprobes), vals(keys.get_lsize()) { } array(char *keys_map, char *vals_map, size_t _size, uint_t _key_len, uint_t _reprobe_limit, size_t *_reprobes, SquareBinaryMatrix &hash_matrix, SquareBinaryMatrix &hash_inv_matrix) : keys(keys_map, _size, _key_len, 0, _reprobe_limit, _reprobes, hash_matrix, hash_inv_matrix), vals(vals_map, keys.get_lsize()) { } void set_matrix(SquareBinaryMatrix &m) { keys.set_matrix(m); } size_t get_size() const { return keys.get_size(); } uint_t get_key_len() const { return keys.get_key_len(); } uint_t get_val_len() const { return keys.get_val_len(); } uint_t get_max_reprobe() const { return keys.get_max_reprobe(); } size_t get_max_reprobe_offset() const { return keys.get_max_reprobe_offset(); } uint_t get_block_len() const { return keys.get_block_len(); } uint_t get_block_word_len() const { return keys.get_block_word_len() + keys.get_block_len() * sizeof(val_t); } size_t floor_block(size_t entries, size_t &blocks) const { return keys.floor_block(entries, blocks); } void zero_keys(const size_t start, const size_t length) { keys.zero_blocks(start, length); } void zero_values(const size_t start, const size_t length) { vals.zero(start, length); } void write_keys_blocks(std::ostream *out, size_t start, size_t length) const { keys.write_blocks(out, start, length); } void write_values(std::ostream *out, size_t start, size_t length) const { vals.write(out, start, length); } void write_matrices(std::ostream *out) { keys.write_ary_header(out); } template bool add(key_t key, const add_t &val, val_t *oval = 0) { bool is_new; size_t id; if(!keys.set(key, &is_new, &id)) return false; vals.add(id, val, oval); return true; } bool get_val(key_t key, val_t &val, bool full = true) const { key_t v_ignore; size_t key_id; if(!keys.get_val(key, key_id, v_ignore, false)) return false; vals.get_val(key_id, val); return true; } class iterator { typename key_ary_t::iterator key_it; const val_ary_t *const vals; public: iterator(typename key_ary_t::iterator _key_it, const val_ary_t *_vals) : key_it(_key_it), vals(_vals) {} uint64_t get_hash() const { return key_it.get_hash(); } uint64_t get_pos() const { return key_it.get_pos(); } uint64_t get_start() const { return key_it.get_start(); } uint64_t get_end() const { return key_it.get_end(); } key_t get_key() const { return key_it.get_key(); } val_t get_val() const { return (*vals)[get_id()]; } size_t get_id() const { return key_it.get_id(); } char *get_dna_str() { return key_it.get_dna_str(); } bool next() { return key_it.next(); } }; iterator iterator_all() const { return iterator(keys.iterator_all(), &vals); } iterator iterator_slice(size_t slice_number, size_t number_of_slice) const { return iterator(keys.iterator_slice(slice_number, number_of_slice), &vals); } }; } } #endif jellyfish-1.1.11/jellyfish/square_binary_matrix.hpp0000644015303500042660000001207312151455365017462 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_SQUARE_BINARY_MATRIX_HPP__ #define __JELLYFISH_SQUARE_BINARY_MATRIX_HPP__ #include #include #include #include #include #include #include #include #include class SquareBinaryMatrix { public: define_error_class(ErrorAllocation); define_error_class(SingularMatrix); define_error_class(MismatchingSize); private: uint64_t *columns; int size; uint64_t mask() const { return (((uint64_t)1) << size) - 1; } uint64_t msb() const { return ((uint64_t)1) << (size - 1); } uint64_t *first_alloc(size_t size) { uint64_t *res = calloc_align((size_t)size, (size_t)16); if(!res) eraise(ErrorAllocation) << "Can't allocate matrix of size '" << size << "'"; return res; } void alloc_columns() { if(columns) { free(columns); columns = 0; } if(size < 0 || size > 64) eraise(MismatchingSize) << "Invalid matrix size '" << size << "'"; columns = first_alloc(size); } public: SquareBinaryMatrix() : columns(0), size(0) { } explicit SquareBinaryMatrix(int _size) :columns(first_alloc(_size)), size(_size) { memset(columns, '\0', sizeof(uint64_t) * _size); } SquareBinaryMatrix(const SquareBinaryMatrix &rhs) : columns(first_alloc(rhs.get_size())), size(rhs.get_size()) { int i; uint64_t _mask = mask(); for(i = 0; i < size; i++) columns[i] = rhs.columns[i] & _mask; } SquareBinaryMatrix(const uint64_t *_columns, int _size) : columns(first_alloc(_size)), size(_size) { int i; uint64_t _mask = mask(); for(i = 0; i < size; i++) columns[i] = _columns[i] & _mask; } explicit SquareBinaryMatrix(const char *map) : columns(0), size(0) { read(map); } explicit SquareBinaryMatrix(std::istream *is) : columns(0), size(0) { load(is); } ~SquareBinaryMatrix() { if(columns) free(columns); } void swap(SquareBinaryMatrix &rhs) { std::swap(columns, rhs.columns); std::swap(size, rhs.size); } SquareBinaryMatrix &operator=(SquareBinaryMatrix rhs) { this->swap(rhs); return *this; } void init_random(); SquareBinaryMatrix init_random_inverse(); void init_identity() { uint64_t v = msb(); int i; for(i = 0; v; i++, v >>= 1) columns[i] = v; } bool is_identity() const { uint64_t v = msb(); int i; for(i = 0; i < size; i++, v >>= 1) { if(columns[i] != v) return false; } return true; } bool is_zero() const { int i; for(i = 0; i < size; i++) if(columns[i]) return false; return true; } void resize(int ns) { size = ns; alloc_columns(); } int get_size() const { return size; } bool operator==(const SquareBinaryMatrix &other) const { int i; if(size != other.get_size()) return false; for(i = 0; i < size; i++) if(columns[i] != other.columns[i]) return false; return true; } bool operator!=(const SquareBinaryMatrix &other) const { return !(*this == other); } uint64_t & operator[](int i) { return columns[i]; } uint64_t operator[](int i) const { return columns[i]; } uint64_t times_loop(uint64_t v) const { uint64_t res = 0, *c = columns+(size-1); for ( ; v; v >>= 1) res ^= (-(v & 1)) & *c--; return res; } uint64_t times_unrolled(uint64_t v) const; uint64_t times_sse(uint64_t v) const; inline uint64_t times(uint64_t v) const { #ifdef HAVE_SSE return times_sse(v); #else return times_unrolled(v); #endif } SquareBinaryMatrix transpose() const; SquareBinaryMatrix operator*(const SquareBinaryMatrix &other) const; SquareBinaryMatrix inverse() const; int pop_count() const { int i, res = 0; for(i = 0; i < size; i++) res += __builtin_popcountl(columns[i]); return res; } uint64_t xor_sum() const { uint64_t sum = 0; for(int i = 0; i < size; ++i) sum ^= columns[i]; return sum; } void print(std::ostream *os) const; std::string str() const; void dump(std::ostream *os) const; void load(std::istream *is); size_t read(const char *map); size_t dump_size() { return sizeof(size) + sizeof(uint64_t) * size; } void print_vector(std::ostream *os, uint64_t v, bool vertical = false) const; std::string str_vector(uint64_t v, bool vertical = false) const; }; #endif // __SQUARE_BINARY_MATRIX_HPP__ jellyfish-1.1.11/jellyfish/time.cc0000644015303500042660000000135712151455365013771 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include const Time Time::zero = Time(0, 0); jellyfish-1.1.11/jellyfish/invertible_hash_array.hpp0000644015303500042660000010761712151455365017607 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_REVERSIBLE_HASH__ #define __JELLYFISH_REVERSIBLE_HASH__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace jellyfish { namespace invertible_hash { define_error_class(InvalidMap); define_error_class(ErrorAllocation); define_error_class(InvalidMatrix); /* Contains an integer, the reprobe limit. It is capped based on * the reprobe strategy to not be bigger than the size of the hash * array. */ class reprobe_limit_t { uint_t limit; public: reprobe_limit_t(uint_t _limit, size_t *_reprobes, size_t _size) : limit(_limit) { while(_reprobes[limit] >= _size && limit >= 1) limit--; } inline uint_t val() const { return limit; } }; /* (key,value) pair bit-packed array. It implements the logic of the * packed hash except for size doubling. Setting or incrementing a key * will return false if the hash is full. No memory management is done * in this class either. * * The hash function is assumed to be invertible. The key is not * directly stored in the hash. Let h = hash(key), size_table = * 2**k and key_len = h+k. In the key field is written * * h high bits of h, reprobe value + 1 * * The +1 for the reprobe value is so that the field is guaranteed * not to be zero. */ template class array : public storage_t { typedef typename Offsets::offset_t offset_t; uint_t lsize; // log of size size_t size, size_mask; reprobe_limit_t reprobe_limit; uint_t key_len; // original key len word key_mask; // mask for high bits of hash(key) uint_t key_off; // offset in key field for reprobe value Offsets offsets; // key len reduced by size of hash array mem_block_t mem_block; word *data; atomic_t atomic; size_t *reprobes; SquareBinaryMatrix hash_matrix; SquareBinaryMatrix hash_inverse_matrix; struct header { uint64_t klen; uint64_t clen; uint64_t size; uint64_t reprobe_limit; }; public: typedef word key_t; typedef word val_t; array(size_t _size, uint_t _key_len, uint_t _val_len, uint_t _reprobe_limit, size_t *_reprobes) : lsize(ceilLog2(_size)), size(((size_t)1) << lsize), size_mask(size - 1), reprobe_limit(_reprobe_limit, _reprobes, size), key_len(_key_len), key_mask(key_len <= lsize ? 0 : (((word)1) << (key_len - lsize)) - 1), key_off(key_len <= lsize ? 0 : key_len - lsize), offsets(key_off + bitsize(reprobe_limit.val() + 1), _val_len, reprobe_limit.val() + 1), mem_block(div_ceil(size, (size_t)offsets.get_block_len()) * offsets.get_block_word_len() * sizeof(word)), data((word *)mem_block.get_ptr()), reprobes(_reprobes), hash_matrix(key_len), hash_inverse_matrix(hash_matrix.init_random_inverse()) { if(!data) eraise(ErrorAllocation) << "Failed to allocate " << (div_ceil(size, (size_t)offsets.get_block_len()) * offsets.get_block_word_len() * sizeof(word)) << " bytes of memory"; } // TODO: This parsing should be done in another class and use // the following constructor. // array(char *map, size_t length) : // hash_matrix(0), hash_inverse_matrix(0) { // if(length < sizeof(struct header)) // eraise(InvalidMap) << "File truncated"; // struct header *header = (struct header *)map; // size = header->size; // if(size != (1UL << floorLog2(size))) // eraise(InvalidMap) << "Size '" << size << "' is not a power of 2"; // lsize = ceilLog2(size); // size_mask = size - 1; // reprobe_limit = header->reprobe_limit; // key_len = header->klen; // if(key_len > 64 || key_len == 0) // eraise(InvalidMap) << "Invalid key length '" << key_len << "'"; // offsets.init(key_len + bitsize(reprobe_limit + 1) - lsize, header->clen, // reprobe_limit); // key_mask = (((word)1) << (key_len - lsize)) - 1; // key_off = key_len - lsize; // map += sizeof(struct header); // // reprobes = new size_t[header->reprobe_limit + 1]; // // TODO: should that be in the database file? // reprobes = jellyfish::quadratic_reprobes; // // memcpy(reprobes, map, sizeof(size_t) * (header->reprobe_limit + 1)); // // map += sizeof(size_t) * (header->reprobe_limit + 1); // map += hash_matrix.read(map); // if((uint_t)hash_matrix.get_size() != key_len) // eraise(InvalidMatrix) << "Size of hash matrix '" << hash_matrix.get_size() // << "' not equal to key length '" << key_len << "'"; // map += hash_inverse_matrix.read(map); // if((uint_t)hash_inverse_matrix.get_size() != key_len) // eraise(InvalidMatrix) << "Size of inverse hash matrix '" << hash_inverse_matrix.get_size() // << "' not equal to key length '" << key_len << "'"; // if((size_t)map & 0x7) // map += 0x8 - ((size_t)map & 0x7); // Make sure aligned for 64bits word. TODO: use alignof? // data = (word *)map; // } // Assume _size is already a power of 2 // map must point to a memory area written by "write_blocks". No header array(char *map, size_t _size, uint_t _key_len, uint_t _val_len, uint_t _reprobe_limit, size_t *_reprobes, SquareBinaryMatrix &_hash_matrix, SquareBinaryMatrix &_hash_inverse_matrix) : lsize(ceilLog2(_size)), size(_size), size_mask(size-1), reprobe_limit(_reprobe_limit, _reprobes, size), key_len(_key_len), key_mask(key_len <= lsize ? 0 : (((word)1) << (key_len - lsize)) - 1), key_off(key_len <= lsize ? 0 : key_len - lsize), offsets(key_off + bitsize(reprobe_limit.val() + 1), _val_len, reprobe_limit.val() + 1), data((word *)map), reprobes(_reprobes), hash_matrix(_hash_matrix), hash_inverse_matrix(_hash_inverse_matrix) { } ~array() { } // Lock in memory int lock() { return mem_block.lock(); } void set_matrix(SquareBinaryMatrix &m) { if((uint_t)m.get_size() != key_len) eraise(InvalidMatrix) << "Size of matrix '" << m.get_size() << "' not equal to key length '" << key_len << "'"; hash_matrix = m; hash_inverse_matrix = m.inverse(); } size_t get_size() const { return size; } size_t get_lsize() const { return lsize; } uint_t get_key_len() const { return key_len; } uint_t get_val_len() const { return offsets.get_val_len(); } uint_t get_max_reprobe() const { return reprobe_limit.val(); } size_t get_max_reprobe_offset() const { return reprobes[reprobe_limit.val()]; } uint_t get_block_len() const { return offsets.get_block_len(); } uint_t get_block_word_len() const { return offsets.get_block_word_len(); } size_t floor_block(size_t entries, size_t &blocks) const { return offsets.floor_block(entries, blocks); } private: void block_to_ptr(const size_t start, const size_t blen, char **start_ptr, size_t *memlen) const { *start_ptr = (char *)(data + start * offsets.get_block_word_len()); char *end_ptr = (char *)mem_block.get_ptr() + mem_block.get_size(); if(*start_ptr >= end_ptr) { *memlen = 0; return; } *memlen = blen * offsets.get_block_word_len() * sizeof(word); if(*start_ptr + *memlen > end_ptr) *memlen = end_ptr - *start_ptr; } public: /** * Zero out blocks in [start, start+length), where start and * length are given in number of blocks. **/ void zero_blocks(const size_t start, const size_t length) { char *start_ptr; size_t memlen; block_to_ptr(start, length, &start_ptr, &memlen); memset(start_ptr, '\0', memlen); } /** * Write to out blocks [start, start+length). */ void write_blocks(std::ostream *out, const size_t start, const size_t length) const { char *start_ptr; size_t memlen; block_to_ptr(start, length, &start_ptr, &memlen); out->write(start_ptr, memlen); } // Iterator class iterator { protected: const array *ary; size_t start_id, nid, end_id; uint64_t mask; char dna_str[33]; public: word key; word val; size_t id; uint64_t hash; iterator(const array *_ary, size_t start, size_t end) : ary(_ary), start_id(start > ary->get_size() ? ary->get_size() : start), nid(start), end_id(end > ary->get_size() ? ary->get_size() : end), mask(ary->get_size() - 1) {} void get_string(char *out) const { parse_dna::mer_binary_to_string(key, ary->get_key_len() / 2, out); } uint64_t get_hash() const { return hash; } uint64_t get_pos() const { return hash & mask; } uint64_t get_start() const { return start_id; } uint64_t get_end() const { return end_id; } word get_key() const { return key; } word get_val() const { return val; } size_t get_id() const { return id; } char *get_dna_str() { parse_dna::mer_binary_to_string(key, ary->get_key_len() / 2, dna_str); return dna_str; } bool next() { bool success; while((id = nid) < end_id) { nid++; success = ary->get_key_val_full(id, key, val); if(success) { hash = (key & ary->key_mask) << ary->lsize; uint_t reprobep = (key >> ary->key_off) - 1; hash |= (id - (reprobep > 0 ? ary->reprobes[reprobep] : 0)) & ary->size_mask; key = ary->hash_inverse_matrix.times(hash); return true; } } return false; } }; friend class iterator; iterator iterator_all() const { return iterator(this, 0, get_size()); } iterator iterator_slice(size_t slice_number, size_t number_of_slice) const { std::pair res = slice(slice_number, number_of_slice, get_size()); return iterator(this, res.first, res.second); } /* Why on earth doesn't inheritance with : public iterator work here? Resort to copying code. Arrrgggg.... */ class overlap_iterator { protected: const array *ary; uint64_t mask; size_t start_id, end_id, start_oid; size_t moid, oid; public: word key; word val; size_t id; uint64_t hash; overlap_iterator(const array *_ary, size_t start, size_t end) : ary(_ary), mask(ary->get_size() - 1), start_id(start), end_id(end > ary->get_size() ? ary->get_size() : end), start_oid(start), moid(end_id - start_id + ary->get_max_reprobe_offset()), oid(0) { // Adjust for very small arrays and it overlaps with itself if(moid > ary->get_size() - start_id) { size_t last_id = (start_id + moid) % mask; if(last_id > start_id) moid -= last_id - start_id - 1; } } void get_string(char *out) const { parse_dna::mer_binary_to_string(key, ary->get_key_len() / 2, out); } uint64_t get_hash() const { return hash; } uint64_t get_pos() const { return hash & mask; } uint64_t get_start() const { return start_id; } uint64_t get_end() const { return end_id; } bool next() { bool success; while(oid < moid) { id = (start_oid + oid++) & mask; success = ary->get_key_val_full(id, key, val); if(success) { hash = (key & ary->key_mask) << ary->lsize; uint_t reprobep = (key >> ary->key_off) - 1; hash |= (id - (reprobep > 0 ? ary->reprobes[reprobep] : 0)) & ary->size_mask; if(get_pos() < start_id || get_pos() >= end_id) continue; key = ary->hash_inverse_matrix.times(hash); return true; } } return false; } }; friend class overlap_iterator; /* Return whether the entry is empty and if not, it returns the * key and if it has the large bit set. */ void get_entry_stats(size_t id, bool &empty, word &key, bool &large) const { word *w, *kvw = NULL; const offset_t *o, *lo = NULL; w = offsets.get_word_offset(id, &o, &lo, data); kvw = w + o->key.woff; key = *kvw; large = key & o->key.lb_mask; if(large) o = lo; if(o->key.mask2) { key = (key & o->key.mask1 & ~o->key.sb_mask1) >> o->key.boff; key |= ((*(kvw+1)) & o->key.mask2 & ~o->key.sb_mask2) << o->key.shift; } else { key = (key & o->key.mask1) >> o->key.boff; } empty = key == 0; } /* * Return the key and value at position id. If the slot at id is * empty, returns false. If the slot at position id has the large * bit set, the key is resolved by looking backward in the * table. The value returned on the other hand is the value at * position id. No summation of the other entries for the key is * done. */ bool get_key_val(size_t id, word &key, word &val) const { word *w, *kvw, *fw = NULL; const offset_t *o, *lo, *fo = NULL; bool large; uint_t overflows; overflows = 0; while(true) { w = offsets.get_word_offset(id, &o, &lo, data); kvw = w + o->key.woff; key = *kvw; large = key & o->key.lb_mask; if(large) o = lo; if(o->key.mask2) { key = (key & o->key.mask1 & ~o->key.sb_mask1) >> o->key.boff; key |= ((*(kvw+1)) & o->key.mask2 & ~o->key.sb_mask2) << o->key.shift; } else { key = (key & o->key.mask1) >> o->key.boff; } // Save offset and word for value retrieval if(!fo) { fo = o; fw = w; } if(large) { if(key) id -= reprobes[key]; id = (id - reprobes[0]) & size_mask; overflows++; } else { break; } } if(!key) return false; kvw = fw + fo->val.woff; val = ((*kvw) & fo->val.mask1) >> fo->val.boff; if(fo->val.mask2) { val |= ((*(kvw+1)) & fo->val.mask2) << fo->val.shift; } if(overflows > 0) { val <<= offsets.get_val_len(); if(--overflows > 0) val <<= offsets.get_lval_len() * overflows; } return true; } /* * Return the key and value at position id. If the slot at id is * empty or has the large bit set, returns false. Otherwise, * returns the key and the value is the sum of all the entries * in the hash table for that key. I.e., the table is search * forward for entries with large bit set pointing back to the * key at id, and all those values are summed up. */ bool get_key_val_full(size_t id, word &key, word &val, bool carry_bit = false) const { const offset_t *o, *lo; word *w, *kvw, nkey, nval; uint_t reprobe = 0, overflows = 0; size_t cid; w = offsets.get_word_offset(id, &o, &lo, data); kvw = w + o->key.woff; key = *kvw; if(key & o->key.lb_mask) return false; if(o->key.mask2) { if((key & o->key.sb_mask1) == 0) return false; key = (key & o->key.mask1 & ~o->key.sb_mask1) >> o->key.boff; key |= ((*(kvw+1)) & o->key.mask2 & ~o->key.sb_mask2) << o->key.shift; } else { key = (key & o->key.mask1) >> o->key.boff; if(key == 0) return false; } kvw = w + o->val.woff; val = ((*kvw) & o->val.mask1) >> o->val.boff; if(o->val.mask2) val |= ((*(kvw+1)) & o->val.mask2) << o->val.shift; if(carry_bit) { bool do_reprobe = val & 0x1; val >>= 1; if(!do_reprobe) return true; } // Resolve value reprobe = 0; cid = id = (id + reprobes[0]) & size_mask; while(reprobe <= reprobe_limit.val()) { if(reprobe) cid = (id + reprobes[reprobe]) & size_mask; w = offsets.get_word_offset(cid, &o, &lo, data); kvw = w + o->key.woff; nkey = *kvw; if(nkey & o->key.lb_mask) { if(lo->key.mask2) { nkey = (nkey & lo->key.mask1 & ~lo->key.sb_mask1) >> lo->key.boff; nkey |= ((*(kvw+1)) & lo->key.mask2 & ~lo->key.sb_mask2) << lo->key.shift; } else { nkey = (nkey & lo->key.mask1) >> lo->key.boff; } if(nkey == reprobe) { kvw = w + lo->val.woff; nval = ((*kvw) & lo->val.mask1) >> lo->val.boff; if(lo->val.mask2) nval |= ((*(kvw+1)) & lo->val.mask2) << lo->val.shift; bool do_reprobe = true; if(carry_bit) { do_reprobe = nval & 0x1; nval >>= 1; } nval <<= offsets.get_val_len(); nval <<= offsets.get_lval_len() * overflows; val += nval; if(!do_reprobe) return true; overflows++; reprobe = 0; cid = id = (cid + reprobes[0]) & size_mask; continue; } } else { if(o->key.mask2) { if((nkey & o->key.sb_mask1) == 0) return true; } else { if((nkey & o->key.mask1) == 0) return true; } } reprobe++; } return true; } inline bool get_val(const word key, word &val, bool full = false, bool carry_bit = false) const { uint64_t hash = hash_matrix.times(key); size_t key_id; return _get_val(hash & size_mask, key_id, (hash >> lsize) & key_mask, val, full, carry_bit); } inline bool get_val(const word key, size_t &key_id, word &val, bool full = false, bool carry_bit = false) const { uint64_t hash = hash_matrix.times(key); return _get_val(hash & size_mask, key_id, (hash >> lsize) & key_mask, val, full, carry_bit); } // /* InputIterator points to keys (words). OutputIterator points // to struct containing at least the fields { bool found; size_t // key_id; word val; }. // */ // template // void get_multi_val(InputIterator key, const InputIterator& key_end, // OutputIterator val, bool full, bool carry_bit) const { // uint64_t phash, chash; // const offset_t *po, *plo, *co, *clo; // const word *pw, *cw; // if(key == key_end) // return; // // Call __get_val with a delay. Let prefetch work while we // // compute the hash/get the previous key. // phash = hash_matrix.times(*key); // pw = offsets.get_word_offset(phash & size_mask, &po, &plo, data); // //__builtin_prefetch(pw + po->key.woff, 0, 3); // for(++key; key != key_end; ++key, ++val) { // chash = hash_matrix.times(*key); // cw = offsets.get_word_offset(chash & size_mask, &co, &clo, data); // //__builtin_prefetch(cw + co->key.woff, 0, 3); // val->found = __get_val(phash & size_mask, val->key_id, // (phash >> lsize) & key_mask, val->val, // full, carry_bit, pw, po, plo); // pw = cw; // po = co; // plo = clo; // phash = chash; // } // // Last one // val->found = __get_val(phash & size_mask, val->key_id, // (phash >> lsize) & key_mask, val->val, // full, carry_bit, pw, po, plo); // } struct prefetch_info { const word* w; const offset_t *o, *lo; }; typedef simple_circular_buffer::pre_alloc prefetch_buffer; void warm_up_cache(prefetch_buffer& buffer, size_t id, bool load_lo) const { buffer.clear(); for(int i = 0; i < buffer.capacity(); ++i) { buffer.push_back(); prefetch_info& info = buffer.back(); size_t cid = (id + (i > 0 ? reprobes[i] : 0)) & size_mask; info.w = offsets.get_word_offset(cid, &info.o, &info.lo, data); __builtin_prefetch(info.w + info.o->key.woff, 0, 1); __builtin_prefetch(info.o, 0, 3); if(load_lo) __builtin_prefetch(info.lo, 0, 3); } } void prefetch_next(prefetch_buffer& buffer, size_t id, uint_t reprobe, bool load_lo) const { buffer.pop_front(); if(reprobe + buffer.capacity() <= reprobe_limit.val()) { buffer.push_back(); prefetch_info& info = buffer.back(); size_t fid = (id + reprobes[reprobe + buffer.capacity() - 1]) & size_mask; info.w = offsets.get_word_offset(fid, &info.o, &info.lo, data); __builtin_prefetch(info.w + info.o->key.woff, 0, 1); __builtin_prefetch(info.o, 0, 3); if(load_lo) __builtin_prefetch(info.lo, 0, 3); } } bool _get_val(const size_t id, size_t &key_id, const word key, word &val, bool full = false, bool carry_bit = false) const { // Buffer for pre-cached information prefetch_info info_ary[prefetch_buffer::capacity()]; prefetch_buffer buffer(info_ary); warm_up_cache(buffer, id, false); return __get_val(id, key_id, key, val, full, carry_bit, buffer); } bool __get_val(const size_t id, size_t &key_id, const word key, word &val, const bool full, bool carry_bit, prefetch_buffer& buffer) const { const word *kvw; word nkey, nval; size_t cid = id; uint_t reprobe = 0; word akey = key | ((word)1 << key_off); // Find key const offset_t *o, *lo; const word* w; while(true) { prefetch_info& info = buffer.front(); w = info.w; o = info.o; kvw = w + o->key.woff; nkey = *kvw; if(!(nkey & o->key.lb_mask)) { if(o->key.mask2) { nkey = (nkey & o->key.mask1 & ~o->key.sb_mask1) >> o->key.boff; nkey |= ((*(kvw+1)) & o->key.mask2 & ~o->key.sb_mask2) << o->key.shift; } else { nkey = (nkey & o->key.mask1) >> o->key.boff; } if(nkey == akey) break; } if(++reprobe > reprobe_limit.val()) return false; // Do reprobe cid = (id + reprobes[reprobe]) & size_mask; akey = key | ((reprobe + 1) << key_off); prefetch_next(buffer, id, reprobe, false); } // Get value kvw = w + o->val.woff; val = ((*kvw) & o->val.mask1) >> o->val.boff; if(o->val.mask2) { val |= ((*(kvw+1)) & o->val.mask2) << o->val.shift; } bool do_reprobe = true; if(carry_bit) { do_reprobe = val & 0x1; val >>= 1; } key_id = cid; // Eventually get large values... TODO: this seems buggy. It // only looks for large values once, not as many times as // needed. if(full && do_reprobe) { const size_t bid = (cid + reprobes[0]) & size_mask; cid = bid; warm_up_cache(buffer, bid, true); reprobe = 0; do { prefetch_info& info = buffer.front(); const word* w = info.w; o = info.o; lo = info.lo; kvw = w + o->key.woff; nkey = *kvw; if(nkey & o->key.lb_mask) { if(lo->key.mask2) { nkey = (nkey & lo->key.mask1 & ~lo->key.sb_mask1) >> lo->key.boff; nkey |= ((*(kvw+1)) & lo->key.mask2 & ~lo->key.sb_mask2) << lo->key.shift; } else { nkey = (nkey & lo->key.mask1) >> lo->key.boff; } if(nkey == reprobe) { kvw = w + lo->val.woff; nval = ((*kvw) & lo->val.mask1) >> lo->val.boff; if(lo->val.mask2) nval |= ((*(kvw+1)) & lo->val.mask2) << lo->val.shift; if(carry_bit) { nval >>= 1; val |= nval << (offsets.get_val_len() - 1); } else val |= nval << offsets.get_val_len(); break; // Should break only if carry_bit of nval is // not set. Otherwise, we should reset the // reprobe to 0 and try again. } } cid = (bid + reprobes[++reprobe]) & size_mask; prefetch_next(buffer, bid, reprobe, true); } while(reprobe <= reprobe_limit.val()); } return true; } /** * Use hash values as counters */ inline bool add(word key, word val, word *oval = 0) { uint64_t hash = hash_matrix.times(key); return add_rec(hash & size_mask, (hash >> lsize) & key_mask, val, false, oval); } /** * Use hash as a set. */ inline bool add(word _key, bool *is_new) __attribute__((deprecated)) { size_t id; return set(_key, is_new, &id); } inline bool set(word _key, bool *is_new) { size_t id; return set(_key, is_new, &id); } bool add(word _key, bool *is_new, size_t *id) __attribute__((deprecated)) { return set(_key, is_new, id); } bool set(word _key, bool *is_new, size_t *id) { const offset_t *ao; uint64_t hash = hash_matrix.times(_key); word *w; *id = hash & size_mask; return claim_key((hash >> lsize) & key_mask, is_new, id, false, &ao, &w); } /** * Use hash as a map. This sets a value with the key. It is only * partially thread safe. I.e., multiple different key can be * added concurrently. On the other hand, the same key can not * be added at the same time by different thread: the value set * may not be correct. */ inline bool map(word _key, word val) { bool is_new; return map(_key, val, &is_new); } bool map(word _key, word val, bool* is_new) { uint64_t hash = hash_matrix.times(_key); return map_rec(hash & size_mask, (hash >> lsize) & key_mask, val, false, is_new); } void write_ary_header(std::ostream *out) const { hash_matrix.dump(out); hash_inverse_matrix.dump(out); } void write_raw(std::ostream *out) const { if(out->tellp() & 0x7) { // Make sure aligned std::string padding(0x8 - (out->tellp() & 0x7), '\0'); out->write(padding.c_str(), padding.size()); } out->write((char *)mem_block.get_ptr(), mem_block.get_size()); } private: /* id is input/output. Equal to hash & size_maks on input. Equal * to actual id where key was set on output. key is already hash * shifted and masked to get higher bits. (>> lsize & key_mask) * * is_new is set on output to true if key did not exists in hash * before. *ao points to the actual offsets object. */ bool claim_key(const word &key, bool *is_new, size_t *id, bool large, const offset_t **_ao, word **_w) { uint_t reprobe = 0; const offset_t *o, *lo, *ao; word *w, *kw, nkey; bool key_claimed = false; size_t cid = *id; word akey = large ? 0 :(key | ((word)1 << key_off)); do { *_w = w = offsets.get_word_offset(cid, &o, &lo, data); *_ao = ao = large ? lo : o; kw = w + ao->key.woff; if(ao->key.mask2) { // key split on two words nkey = akey << ao->key.boff; nkey |= ao->key.sb_mask1; if(large) nkey |= ao->key.lb_mask; nkey &= ao->key.mask1; // Use o->key.mask1 and not ao->key.mask1 as the first one is // guaranteed to be bigger. The key needs to be free on its // longer mask to claim it! key_claimed = set_key(kw, nkey, o->key.mask1, ao->key.mask1); if(key_claimed) { nkey = ((akey >> ao->key.shift) | ao->key.sb_mask2) & ao->key.mask2; key_claimed = key_claimed && set_key(kw + 1, nkey, o->key.mask2, ao->key.mask2, is_new); } } else { // key on one word nkey = akey << ao->key.boff; if(large) nkey |= ao->key.lb_mask; nkey &= ao->key.mask1; key_claimed = set_key(kw, nkey, o->key.mask1, ao->key.mask1, is_new); } if(!key_claimed) { // reprobe if(++reprobe > reprobe_limit.val()) return false; cid = (*id + reprobes[reprobe]) & size_mask; if(large) akey = reprobe; else akey = key | ((reprobe + 1) << key_off); } } while(!key_claimed); *id = cid; return true; } bool add_rec(size_t id, word key, word val, bool large, word *oval) { const offset_t *ao; word *w; bool is_new = false; if(!claim_key(key, &is_new, &id, large, &ao, &w)) return false; if(oval) *oval = !is_new; // Increment value word *vw = w + ao->val.woff; word cary = add_val(vw, val, ao->val.boff, ao->val.mask1); cary >>= ao->val.shift; if(cary && ao->val.mask2) { // value split on two words cary = add_val(vw + 1, cary, 0, ao->val.mask2); cary >>= ao->val.cshift; } if(cary) { id = (id + reprobes[0]) & size_mask; if(add_rec(id, key, cary, true, 0)) return true; // Adding failed, table is full. Need to back-track and // substract val. cary = add_val(vw, ((word)1 << offsets.get_val_len()) - val, ao->val.boff, ao->val.mask1); cary >>= ao->val.shift; if(cary && ao->val.mask2) { // Can I ignore the cary here? Table is known to be full, so // not much of a choice. But does it leave the table in a // consistent state? add_val(vw + 1, cary, 0, ao->val.mask2); } return false; } return true; } // Store val in the hash at position id. Reprobe and recurse if // val does not fit in counter field. A bit is added at the // beginning of the counting field indicating whether there is // another entry for the same key further in the hash. bool map_rec(size_t id, word key, word val, bool large, bool* is_new) { const offset_t* ao; word* w; bool is_new_entry = false; if(!claim_key(key, &is_new_entry, &id, large, &ao, &w)) return false; if(is_new) *is_new = is_new_entry; // Determine if there will be a carry val <<= 1; val |= (val > offsets.get_max_val(large)); // Set value word *vw = w + ao->val.woff; word oval = 0; word cary = set_val(vw, val, ao->val.boff, ao->val.mask1, oval); cary >>= ao->val.shift; bool cary_bit = oval & 0x1; if(ao->val.mask2) { // value split on two words. Write even if // cary is 0 as there maybe some value in // there already cary = set_val(vw + 1, cary, 0, ao->val.mask2, oval); cary >>= ao->val.cshift; } // Done if there is no carry and previous value did not have // the carry_bit set if(!cary && !cary_bit) return true; id = (id + reprobes[0]) & size_mask; return map_rec(id, key, cary, true, 0); } inline bool set_key(word *w, word nkey, word free_mask, word equal_mask) { word ow = *w, nw, okey; okey = ow & free_mask; while(okey == 0) { // large bit not set && key is free nw = atomic.cas(w, ow, ow | nkey); if(nw == ow) return true; ow = nw; okey = ow & free_mask; } return (ow & equal_mask) == nkey; } inline bool set_key(word *w, word nkey, word free_mask, word equal_mask, bool *is_new) { word ow = *w, nw, okey; okey = ow & free_mask; while(okey == 0) { // large bit not set && key is free nw = atomic.cas(w, ow, ow | nkey); if(nw == ow) { *is_new = true; return true; } ow = nw; okey = ow & free_mask; } *is_new = false; return (ow & equal_mask) == nkey; } inline word add_val(word *w, word val, uint_t shift, word mask) { word now = *w, ow, nw, nval; do { ow = now; nval = ((ow & mask) >> shift) + val; nw = (ow & ~mask) | ((nval << shift) & mask); now = atomic.cas(w, ow, nw); } while(now != ow); return nval & (~(mask >> shift)); } inline word set_val(word *w, word val, uint_t shift, word mask, word& oval) { word now = *w, ow, nw; word sval = (val << shift) & mask; do { ow = now; nw = (ow & ~mask) | sval; now = atomic.cas(w, ow, nw); } while(now != ow); oval = (ow & mask) >> shift; return val & (~(mask >> shift)); } }; /*****/ } } #endif // __REVERSIBLE_HASH__ jellyfish-1.1.11/jellyfish/dbg.hpp0000644015303500042660000000763712151455365014000 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __DBG_HPP__ #define __DBG_HPP__ #include #include #include #include #include #include #include #include #include #include #include #include #include namespace dbg { pid_t gettid(); class stringbuf : public std::stringbuf { public: stringbuf() : std::stringbuf(std::ios_base::out) { } explicit stringbuf(const std::string &str) : std::stringbuf(str, std::ios_base::out) { } bool end_is_space() { if(pptr() == pbase()) return true; return isspace(*(pptr() - 1)); } friend class print_t; }; class str { const char *_s; const size_t _l; public: str(const char *s, size_t len) : _s(s), _l(len) {} friend class print_t; }; class xspace { }; class no_flush { }; class print_t { static pthread_mutex_t _lock; static volatile pid_t _print_tid; stringbuf _strbuf; std::ostream _buf; bool _flush; public: print_t(const char *file, const char *function, int line) : _buf(&_strbuf), _flush(true) { const char *file_basename = strrchr(file, '/'); if(!file_basename) file_basename = file; _buf << pthread_self() << "/" << gettid() << ":" << file_basename << ":" << function << ":" << line << ": "; } ~print_t() { if(_print_tid == 0 || gettid() == _print_tid) { pthread_mutex_lock(&_lock); std::cerr.write(_strbuf.pbase(), _strbuf.pptr() - _strbuf.pbase()); if(_flush) std::cerr << std::endl; else std::cerr << "\n"; pthread_mutex_unlock(&_lock); } } static int set_signal(int signum = SIGUSR1); static void signal_handler(int signum, siginfo_t *info, void *context); static pid_t print_tid() { return _print_tid; } static void print_tid(pid_t new_tid) { _print_tid = new_tid; } print_t & operator<<(const char *a[]) { for(int i = 0; a[i]; i++) _buf << (i ? "\n" : "") << a[i]; return *this; } print_t & operator<<(const std::exception &e) { _buf << e.what(); return *this; } print_t & operator<<(const str &ss) { _buf.write(ss._s, ss._l); return *this; } print_t & operator<<(const xspace &xs) { if(!_strbuf.end_is_space()) _buf << " "; return *this; } print_t &operator<<(const no_flush &nf) { _flush = false; return *this; } print_t & operator<<(const Time &t) { _buf << t.str(); return *this; } template print_t & operator<<(const T &x) { _buf << x; return *this; } }; class no_print_t { public: no_print_t() {} template no_print_t & operator<<(const T &x) { return *this; } }; void tic(); Time toc(); } #ifdef DEBUG #define DBG if(1) dbg::print_t(__FILE__, __FUNCTION__, __LINE__) #define NFDBG if(1) dbg::print_t(__FILE__, __FUNCTION__, __LINE__) << dbg::no_flush() #define V(v) dbg::xspace() << #v ":" << v #else #define DBG if(1) dbg::no_print_t() #define NFDBG if(1) dbg::no_print_t() #define V(v) v #endif #endif /* __DBG_HPP__ */ jellyfish-1.1.11/jellyfish/generate_sequence_cmdline.hpp0000644015303500042660000001412612151455365020410 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __GENERATE_SEQUENCE_ARGS_HPP__ #define __GENERATE_SEQUENCE_ARGS_HPP__ #include class generate_sequence_args { public: long seed_arg; bool seed_given; std::vector mer_arg; typedef std::vector::iterator mer_arg_it; typedef std::vector::const_iterator mer_arg_const_it; bool mer_given; const char * output_arg; bool output_given; bool fastq_flag; uint32_t read_length_arg; bool read_length_given; bool verbose_flag; std::vector length_arg; typedef std::vector::iterator length_arg_it; typedef std::vector::const_iterator length_arg_const_it; enum { USAGE_OPT = 1000 }; generate_sequence_args() : seed_arg(), seed_given(false), mer_arg(), mer_given(false), output_arg("output"), output_given(false), fastq_flag(false), read_length_arg(), read_length_given(false), verbose_flag(false) { } generate_sequence_args(int argc, char* argv[]) : seed_arg(), seed_given(false), mer_arg(), mer_given(false), output_arg("output"), output_given(false), fastq_flag(false), read_length_arg(), read_length_given(false), verbose_flag(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"seed", 1, 0, 's'}, {"mer", 1, 0, 'm'}, {"output", 1, 0, 'o'}, {"fastq", 0, 0, 'q'}, {"read-length", 1, 0, 'r'}, {"verbose", 0, 0, 'v'}, {"help", 0, 0, 'h'}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVs:m:o:qr:v"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case 'h': std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case 's': seed_given = true; seed_arg = yaggo::conv_int((const char *)optarg, err, false); CHECK_ERR(long_t, optarg, "-s, --seed=long") break; case 'm': mer_given = true; mer_arg.push_back(yaggo::conv_uint((const char *)optarg, err, false)); CHECK_ERR(uint32_t, optarg, "-m, --mer=uint32") break; case 'o': output_given = true; output_arg = optarg; break; case 'q': fastq_flag = true; break; case 'r': read_length_given = true; read_length_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-r, --read-length=uint32") break; case 'v': verbose_flag = true; break; } } // Check that required switches are present if(!seed_given) error("[-s, --seed=long] required switch"); // Parse arguments if(argc - optind < 1) error("Requires at least 1 argument."); for( ; optind < argc; ++optind) { length_arg.push_back(yaggo::conv_uint((const char *)argv[optind], err, false)); CHECK_ERR(uint64_t, argv[optind], "length") } } #define generate_sequence_args_USAGE "Usage: generate_sequence [options] length:uint64+" const char * usage() const { return generate_sequence_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define generate_sequence_args_HELP "Generate randome sequence of given lengths.\n\n" \ "Options (default value in (), *required):\n" \ " -s, --seed=long *Seed\n" \ " -m, --mer=uint32 Mer length. Generate matrix of size 2*length\n" \ " -o, --output=string Output prefix (output)\n" \ " -q, --fastq Generate fastq file (false)\n" \ " -r, --read-length=uint32 Read length for fasta format (default=size of sequence)\n" \ " -v, --verbose Be verbose (false)\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " -V, --version Version" const char * help() const { return generate_sequence_args_HELP; } #define generate_sequence_args_HIDDEN "Hidden options:" const char * hidden() const { return generate_sequence_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "seed_given:" << seed_given << " seed_arg:" << seed_arg << "\n"; os << "mer_given:" << mer_given << " mer_arg:" << yaggo::vec_str(mer_arg) << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "fastq_flag:" << fastq_flag << "\n"; os << "read_length_given:" << read_length_given << " read_length_arg:" << read_length_arg << "\n"; os << "verbose_flag:" << verbose_flag << "\n"; os << "length_arg:" << yaggo::vec_str(length_arg) << "\n"; } private: }; #endif // __GENERATE_SEQUENCE_ARGS_HPP__" jellyfish-1.1.11/jellyfish/concurrent_queues.hpp0000644015303500042660000001155512200443056016774 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_CONCURRENT_QUEUES_HPP__ #define __JELLYFISH_CONCURRENT_QUEUES_HPP__ #include #include #include #include #include #include #include #include #include #include /*** * Circular buffer of fixed size with thread safe enqueue and dequeue * operation to make it behave like a FIFO. Elements are enqueued at * the head and dequeued at the tail. Never more than n elements * should be enqueued if the size is n+1. There is no check for this. * * It is possible for the tail pointer to go past an element (i.e. it * has been "dequeued"), but the thread is slow to zero the pointer * (i.e. to claim the element). It is then possible for the head * pointer to point to this not yet claimed element. The enqueue() * method blindly skip over such an element. Hence, it is possible * that the same element will be dequeued again before it is * claimed. Or, it will be claimed after being skipped and another * thread will dequeue what looks like an empty element. The outer * loop of dequeue() handles this situation. */ namespace jellyfish { template class concurrent_queue { Val **queue; const uint64_t size; uint64_t volatile head; uint64_t volatile tail; bool volatile closed; divisor64 size_div; public: explicit concurrent_queue(uint64_t _size) : size(20 *_size), head(0), tail(0), closed(false), size_div(size) { queue = new Val *[size]; memset(queue, 0, sizeof(Val *) * size); } ~concurrent_queue() { delete [] queue; } void enqueue(Val *v); Val *dequeue(); bool is_closed() { return closed; } void close() { closed = true; __sync_synchronize(); } bool has_space() { return head != tail; } bool is_low() { uint64_t ctail = tail; __sync_synchronize(); uint64_t chead = head; int64_t len = chead - ctail; if(len < 0) len += size; return (uint64_t)(4*len) <= size; } uint64_t usage() { uint64_t ctail = tail; __sync_synchronize(); uint64_t chead = head; int64_t len = chead - ctail; if(len < 0) len += size; return len; } }; template void concurrent_queue::enqueue(Val *v) { int done = 0; uint64_t chead; chead = head; do { // uint64_t q, nhead; uint64_t nhead = (chead + 1) % size_div; // size_div.division(chead + 1, q, nhead); // uint64_t nhead = (chead + 1) % size; done = (atomic::gcc::cas(&queue[chead], (Val*)0, v) == (Val*)0); chead = atomic::gcc::cas(&head, chead, nhead); } while(!done); assert(head < size); assert(tail < size); } template Val *concurrent_queue::dequeue() { bool done = false; Val *res; uint64_t ctail, ntail; ctail = tail; // __sync_synchronize(); do { bool dequeued = false; do { // if(ctail == head) // return NULL; // Complicated way to do ctail == head. Is it necessary? Or is // the memory barrier above sufficient? Or even necessary? if(atomic::gcc::cas(&head, ctail, ctail) == ctail) { assert(head < size); assert(tail < size); return NULL; } // ntail = (ctail + 1) % size; // uint64_t q; // size_div.division(ctail + 1, q, ntail); ntail = (ctail + 1) % size_div; ntail = atomic::gcc::cas(&tail, ctail, ntail); dequeued = ntail == ctail; ctail = ntail; } while(!dequeued); // Claim dequeued slot. We may have dequeued an element which is // empty or that another thread also has dequeued but not yet // claimed. This can happen if a thread is slow to claim (set // pointer to 0) and the enqueue method has queued elements past // this one. res = queue[ctail]; if(res) done = atomic::gcc::cas(&queue[ctail], res, (Val*)0) == res; } while(!done); assert(head < size); assert(tail < size); return res; } } #endif jellyfish-1.1.11/jellyfish/dumper.hpp0000644015303500042660000000346012200443056014513 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_DUMPER_HPP__ #define __JELLYFISH_DUMPER_HPP__ #include #include #include #include #include /** * A dumper is responsible to dump the hash array to permanent storage * and zero out the array. **/ namespace jellyfish { class dumper_t { Time writing_time; public: define_error_class(ErrorWriting); protected: void open_next_file(const char *prefix, int *index, std::ofstream &out) { int eindex = atomic::gcc::fetch_add(index, (int)1); std::ostringstream file_path; file_path << prefix << "_" << eindex; out.open(file_path.str().c_str()); if(out.fail()) eraise(ErrorWriting) << "'" << file_path.str() << "': " << "Can't open file for writing" << err::no; } public: dumper_t() : writing_time(::Time::zero) {} void dump() { Time start; _dump(); Time end; writing_time += end - start; } virtual void _dump() = 0; Time get_writing_time() const { return writing_time; } virtual ~dumper_t() {}; }; } #endif // __DUMPER_HPP__ jellyfish-1.1.11/jellyfish/parse_read.hpp0000644015303500042660000000602712151455365015341 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_FASTQ_READ_PARSER_HPP__ #define __JELLYFISH_FASTQ_READ_PARSER_HPP__ #include #include #include #include #include #include namespace jellyfish { class parse_read : public double_fifo_input { private: typedef std::vector fary_t; fary_t files; fary_t::const_iterator current_file; bool canonical; read_parser *fparser; public: typedef read_parser::read_t read_t; static const uint_t codes[256]; static const uint_t CODE_RESET = (uint_t)-1; // parse_read(int nb_files, char *argv[], unsigned int nb_buffers); template parse_read(T argv_start, T argv_end, unsigned int nb_buffers); template parse_read(int argc, T argv, unsigned int nb_buffers); ~parse_read() { } void set_canonical(bool v = true) { canonical = v; } virtual void fill(); class thread { parse_read *parser; bucket_t *sequence; int current_read; public: explicit thread(parse_read *_parser) : parser(_parser), sequence(parser->next()), current_read(0) {} read_parser::read_t * next_read() { while(sequence) { if(current_read < sequence->nb_reads) return &sequence->reads[current_read++]; sequence->unlink(); // unmap file if not used anymore parser->release(sequence); sequence = parser->next(); current_read = 0; } return 0; } private: bool next_sequence(); }; friend class thread; thread new_thread() { return thread(this); } }; } template jellyfish::parse_read::parse_read(T argv_start, T argv_end, unsigned int nb_buffers) : double_fifo_input(nb_buffers), files(argv_start, argv_end), current_file(files.begin()), fparser(read_parser::new_parser(*current_file)) { fparser->link(); } template jellyfish::parse_read::parse_read(int argc, T argv, unsigned int nb_buffers) : double_fifo_input(nb_buffers), files(argv, argv + argc), current_file(files.begin()), fparser(read_parser::new_parser(*current_file)) { fparser->link(); } #endif jellyfish-1.1.11/jellyfish/backtrace.hpp0000644015303500042660000000133312151455365015146 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ void print_backtrace(); void show_backtrace(); jellyfish-1.1.11/jellyfish/mer_counting.hpp0000644015303500042660000000571112151455365015724 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_MER_COUNTING__ #define __JELLYFISH_MER_COUNTING__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Invertible hash types #include #include typedef jellyfish::invertible_hash::array inv_hash_storage_t; typedef jellyfish::sorted_dumper< inv_hash_storage_t,atomic::gcc> inv_hash_dumper_t; typedef jellyfish::raw_hash::dumper raw_inv_hash_dumper_t; typedef jellyfish::raw_hash::query raw_inv_hash_query_t; typedef jellyfish::hash< uint64_t,uint64_t,inv_hash_storage_t,atomic::gcc > inv_hash_t; // Direct indexing types #include #include #include typedef jellyfish::direct_indexing::array,atomic::gcc,allocators::mmap> direct_index_storage_t; typedef jellyfish::direct_sorted_dumper< direct_index_storage_t, atomic::gcc> direct_index_dumper_t; typedef jellyfish::hash< uint64_t,jellyfish::capped_integer,direct_index_storage_t,atomic::gcc> direct_index_t; // Quake types #include #include #include #include typedef jellyfish::aligned_values::array fastq_storage_t; typedef jellyfish::hash fastq_hash_t; typedef jellyfish::fastq_hash::raw_dumper raw_fastq_dumper_t; // Compacted hash types typedef jellyfish::compacted_hash::reader hash_reader_t; typedef jellyfish::compacted_hash::query hash_query_t; typedef jellyfish::compacted_hash::writer hash_writer_t; #endif /* __MER_COUNTING__ */ jellyfish-1.1.11/jellyfish/dbg.cc0000644015303500042660000000327112200443056013551 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_SYS_SYSCALL_H #include #endif namespace dbg { pthread_mutex_t print_t::_lock = PTHREAD_MUTEX_INITIALIZER; volatile pid_t print_t::_print_tid = 0; #ifdef DEBUG Time _tic_time; #endif void tic() { #ifdef DEBUG _tic_time.now(); #endif } Time toc() { #ifdef DEBUG Time t; return t - _tic_time; #else return Time::zero; #endif } #ifdef SYS_gettid pid_t gettid() { return (pid_t)syscall(SYS_gettid); } #else pid_t gettid() { return getpid(); } #endif int print_t::set_signal(int signum) { struct sigaction act; memset(&act, '\0', sizeof(act)); act.sa_sigaction = signal_handler; act.sa_flags = SA_SIGINFO; return sigaction(signum, &act, 0); } void print_t::signal_handler(int signum, siginfo_t *info, void *context) { #ifdef HAVE_SI_INT if(info->si_code != SI_QUEUE) return; _print_tid = info->si_int; #endif } } jellyfish-1.1.11/jellyfish/heap.hpp0000644015303500042660000000671312151455365014153 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_HEAP_HPP__ #define __JELLYFISH_HEAP_HPP__ #include namespace jellyfish { template struct heap_item_t { uint64_t key; uint64_t val; uint64_t pos; iterator *it; heap_item_t() : key(0), val(0), pos(0) { } explicit heap_item_t(iterator &iter) { initialize(iter); } void initialize(iterator &iter) { key = iter.key; val = iter.val; pos = iter.get_pos(); it = &iter; } // STL make_heap creates a max heap. We want a min heap, so // reverse comparator! bool operator<(const heap_item_t & other) { if(pos == other.pos) return key > other.key; return pos > other.pos; } }; template class heap_item_compare { public: inline bool operator() (heap_item_t *i1, heap_item_t *i2) { return *i1 < *i2; } }; template class heap_t { heap_item_t *storage; heap_item_t **elts; size_t capacity_; size_t h; heap_item_compare compare; public: typedef const heap_item_t *const_item_t; heap_t() : storage(0), elts(0), capacity_(0), h(0) { } explicit heap_t(size_t _capacity) { initialize(_capacity); } ~heap_t() { delete[] storage; delete[] elts; } void initialize(size_t _capacity) { capacity_ = _capacity; h = 0; storage = new heap_item_t[capacity_]; elts = new heap_item_t*[capacity_]; for(size_t h1 = 0; h1 < capacity_; ++h1) elts[h1] = &storage[h1]; } void fill(iterator &it) { h = 0; while(h < capacity_) { if(!it.next()) break; storage[h].initialize(it); elts[h] = &storage[h]; h++; } std::make_heap(elts, elts + h, compare); } template void fill(ForwardIterator first, ForwardIterator last) { h = 0; while(h < capacity_ && first != last) { if(!first->next()) break; storage[h].initialize(*first++); elts[h] = &storage[h]; h++; } std::make_heap(elts, elts + h, compare); } bool is_empty() const { return h == 0; } bool is_not_empty() const { return h > 0; } size_t size() const { return h; } size_t capacity() const { return capacity_; } // The following 3 should only be used after fill has been called const_item_t head() const { return elts[0]; } void pop() { std::pop_heap(elts, elts + h--, compare); } void push(iterator &item) { elts[h]->initialize(item); std::push_heap(elts, elts + ++h, compare); } }; } #endif // __HEAP_HPP__ jellyfish-1.1.11/jellyfish/simple_growing_array.hpp0000644015303500042660000000350712151455365017457 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ // Simple growing array. Never shrinks. No construction or destruction // of objects in array, only copy with pushback() methods namespace jellyfish { template class simple_growing_array { size_t _capacity; size_t _size; T *_data; public: explicit simple_growing_array(size_t capacity = 100) : _capacity(capacity / 2), _size(0), _data(0) { resize(); } virtual ~simple_growing_array() { free(_data); } void push_back(const T &x) { if(_size >= _capacity) resize(); _data[_size++] = x; } void reset() { _size = 0; } size_t size() const { return _size; } bool empty() const { return _size == 0; } const T * begin() const { return _data; } const T * end() const { return _data + _size; } private: define_error_class(SimpleGrowingArrayError); void resize() { _capacity *= 2; void * ndata = realloc(_data, sizeof(T) * _capacity); if(ndata == 0) { free(ndata); _data = 0; _capacity = _capacity / 2; eraise(SimpleGrowingArrayError) << "Out of memory" << err::no; } _data = (T*)ndata; } }; } jellyfish-1.1.11/jellyfish/err.cc0000644015303500042660000000170012151455365013613 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include namespace err { std::ostream &operator<<(std::ostream &os, const err::substr &ss) { os.write(ss._s, ss._l); return os; } std::ostream &operator<<(std::ostream &os, const err::no_t &x) { x.write(os, errno); return os; } } jellyfish-1.1.11/jellyfish/mersenne.cpp0000644015303500042660000001415112151455365015040 00000000000000/************************** mersenne.cpp ********************************** * Author: Agner Fog * Date created: 2001 * Last modified: 2008-11-16 * Project: randomc.h * Platform: Any C++ * Description: * Random Number generator of type 'Mersenne Twister' * * This random number generator is described in the article by * M. Matsumoto & T. Nishimura, in: * ACM Transactions on Modeling and Computer Simulation, * vol. 8, no. 1, 1998, pp. 3-30. * Details on the initialization scheme can be found at * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html * * Further documentation: * The file ran-instructions.pdf contains further documentation and * instructions. * * Copyright 2001-2008 by Agner Fog. * GNU General Public License http://www.gnu.org/licenses/gpl.html *******************************************************************************/ #include void CRandomMersenne::Init0(int seed) { // Seed generator const uint32_t factor = 1812433253UL; mt[0]= seed; for (mti=1; mti < MERS_N; mti++) { mt[mti] = (factor * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti); } } void CRandomMersenne::RandomInit(int seed) { // Initialize and seed Init0(seed); // Randomize some more for (int i = 0; i < 37; i++) BRandom(); } void CRandomMersenne::RandomInitByArray(int const seeds[], int NumSeeds) { // Seed by more than 32 bits int i, j, k; // Initialize Init0(19650218); if (NumSeeds <= 0) return; // Randomize mt[] using whole seeds[] array i = 1; j = 0; k = (MERS_N > NumSeeds ? MERS_N : NumSeeds); for (; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) + (uint32_t)seeds[j] + j; i++; j++; if (i >= MERS_N) {mt[0] = mt[MERS_N-1]; i=1;} if (j >= NumSeeds) j=0;} for (k = MERS_N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) - i; if (++i >= MERS_N) {mt[0] = mt[MERS_N-1]; i=1;}} mt[0] = 0x80000000UL; // MSB is 1; assuring non-zero initial array // Randomize some more mti = 0; for (int i = 0; i <= MERS_N; i++) BRandom(); } uint32_t CRandomMersenne::BRandom() { // Generate 32 random bits uint32_t y; if (mti >= MERS_N) { // Generate MERS_N words at one time const uint32_t LOWER_MASK = (1LU << MERS_R) - 1; // Lower MERS_R bits const uint32_t UPPER_MASK = 0xFFFFFFFF << MERS_R; // Upper (32 - MERS_R) bits static const uint32_t mag01[2] = {0, MERS_A}; int kk; for (kk=0; kk < MERS_N-MERS_M; kk++) { y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK); mt[kk] = mt[kk+MERS_M] ^ (y >> 1) ^ mag01[y & 1];} for (; kk < MERS_N-1; kk++) { y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK); mt[kk] = mt[kk+(MERS_M-MERS_N)] ^ (y >> 1) ^ mag01[y & 1];} y = (mt[MERS_N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK); mt[MERS_N-1] = mt[MERS_M-1] ^ (y >> 1) ^ mag01[y & 1]; mti = 0; } y = mt[mti++]; // Tempering (May be omitted): y ^= y >> MERS_U; y ^= (y << MERS_S) & MERS_B; y ^= (y << MERS_T) & MERS_C; y ^= y >> MERS_L; return y; } double CRandomMersenne::Random() { // Output random float number in the interval 0 <= x < 1 // Multiply by 2^(-32) return (double)BRandom() * (1./(65536.*65536.)); } int CRandomMersenne::IRandom(int min, int max) { // Output random integer in the interval min <= x <= max // Relative error on frequencies < 2^-32 if (max <= min) { if (max == min) return min; else return 0x80000000; } // Multiply interval with random and truncate int r = int((double)(uint32_t)(max - min + 1) * Random() + min); if (r > max) r = max; return r; } int CRandomMersenne::IRandomX(int min, int max) { // Output random integer in the interval min <= x <= max // Each output value has exactly the same probability. // This is obtained by rejecting certain bit values so that the number // of possible bit values is divisible by the interval length if (max <= min) { if (max == min) return min; else return 0x80000000; } #ifdef INT64_SUPPORTED // 64 bit integers available. Use multiply and shift method uint32_t interval; // Length of interval uint64_t longran; // Random bits * interval uint32_t iran; // Longran / 2^32 uint32_t remainder; // Longran % 2^32 interval = uint32_t(max - min + 1); if (interval != LastInterval) { // Interval length has changed. Must calculate rejection limit // Reject when remainder >= 2^32 / interval * interval // RLimit will be 0 if interval is a power of 2. No rejection then RLimit = uint32_t(((uint64_t)1 << 32) / interval) * interval - 1; LastInterval = interval; } do { // Rejection loop longran = (uint64_t)BRandom() * interval; iran = (uint32_t)(longran >> 32); remainder = (uint32_t)longran; } while (remainder > RLimit); // Convert back to signed and return result return (int32_t)iran + min; #else // 64 bit integers not available. Use modulo method uint32_t interval; // Length of interval uint32_t bran; // Random bits uint32_t iran; // bran / interval uint32_t remainder; // bran % interval interval = uint32_t(max - min + 1); if (interval != LastInterval) { // Interval length has changed. Must calculate rejection limit // Reject when iran = 2^32 / interval // We can't make 2^32 so we use 2^32-1 and correct afterwards RLimit = (uint32_t)0xFFFFFFFF / interval; if ((uint32_t)0xFFFFFFFF % interval == interval - 1) RLimit++; } do { // Rejection loop bran = BRandom(); iran = bran / interval; remainder = bran % interval; } while (iran >= RLimit); // Convert back to signed and return result return (int32_t)remainder + min; #endif } jellyfish-1.1.11/jellyfish/hash.hpp0000644015303500042660000001753212151455365014162 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_HASH_HPP__ #define __JELLYFISH_HASH_HPP__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace jellyfish { /* Wrapper around a "storage". The hash class manages threads. In particular, it synchronizes the threads for the size-doubling operation and manages dumping the hash to disk. The storage class is reponsible for the details of storing the key,value pairs, memory management, reprobing, etc. */ class hash_t { public: virtual ~hash_t() {} }; template class hash : public hash_t { public: define_error_class(TableFull); // typedef typename std::pair kv_t; typedef ary_t storage_t; typedef typename ary_t::iterator iterator; hash() : ary(NULL), dumper(NULL), dumping_initiated(false) {} explicit hash(ary_t *_ary) : ary(_ary), dumper(NULL), dumping_initiated(false) {} virtual ~hash() {} size_t get_size() const { return ary->get_size(); } uint_t get_key_len() const { return ary->get_key_len(); } uint_t get_val_len() const { return ary->get_val_len(); } uint_t get_max_reprobe() const { return ary->get_max_reprobe(); } size_t get_max_reprobe_offset() const { return ary->get_max_reprobe_offset(); } void set_dumper(dumper_t *new_dumper) { dumper = new_dumper; } Time get_writing_time() const { if(!dumper) return Time::zero; return dumper->get_writing_time(); } void write_raw(std::ostream &out) { ary->write_raw(out); } iterator iterator_all() const { return ary->iterator_all(); } iterator iterator_slice(size_t slice_number, size_t number_of_slice) const { return ary->iterator_slice(slice_number, number_of_slice); } /* * Thread handle to the hash. */ enum status_t { FREE, INUSE, BLOCKED }; class thread { ary_t *ary; size_t hsize_mask; status_t status; status_t ostatus; hash *my_hash; public: typedef val_t val_type; thread(ary_t *_ary, hash *_my_hash) : ary(_ary), hsize_mask(ary->get_size() - 1), status(FREE), my_hash(_my_hash) { } // Add val to the value associated with key. Returns the old // value in *oval if oval is not NULL template inline void add(key_t key, const add_t &val, val_t *oval = 0) { while(true) { while(atomic::cas(&status, FREE, INUSE) != FREE) my_hash->wait_event_is_done(); if(ary->add(key, val, oval)) break; // Improve this. Undefined behavior if dump_to_file throws an error. if(my_hash->get_event_locks()) { my_hash->dump(); my_hash->release_event_locks(); } } if(atomic::cas(&status, INUSE, FREE) != INUSE) my_hash->signal_not_in_use(); } // void inc(key_t key, val_t *oval = 0) { return this->add(key, (add_t)1, oval); } // inline void operator()(key_t key) { return this->add(key, (val_t)1); } friend class hash; }; friend class thread; typedef std::list thread_list_t; class thread_ptr_t : public thread_list_t::iterator { public: explicit thread_ptr_t(const typename thread_list_t::iterator &thl) : thread_list_t::iterator(thl) {} typedef val_t val_type; }; // typedef typename thread_list_t::iterator thread_ptr_t; thread_ptr_t new_thread() { user_thread_lock.lock(); thread_ptr_t res(user_thread_list.insert(user_thread_list.begin(), thread(ary, this))); user_thread_lock.unlock(); return res; } void release_thread(thread_ptr_t &th) { user_thread_lock.lock(); user_thread_list.erase(th); user_thread_lock.unlock(); } void dump() { if(dumper) dumper->dump(); else eraise(TableFull) << "No dumper defined"; } private: /** * The following methods are called by threads to manage * administrative events: size doubling or dumping the hash to * disk. **/ /** * Called by a thread if it failed to switch its states from INUSE * to FREE. It lets the thread triggering the event that the hash * is free. This method returns after the signaling and does not * wait for the handling of the event to be over. **/ void signal_not_in_use(bool take_inuse_lock = true) { if(take_inuse_lock) inuse_thread_cond.lock(); if(--inuse_thread_count == 0) inuse_thread_cond.signal(); inuse_thread_cond.unlock(); } /** * Called by a thread if it failed to switch its states from FREE * to INUSE. An event management has been initiated. This call * waits for the event handling to be over. **/ void wait_event_is_done(bool take_event_lock = true) { if(take_event_lock) event_cond.lock(); while(dumping_initiated) event_cond.wait(); event_cond.unlock(); } /** * Get the locks before handling an event and returns true if * success. It guarantees than no thread is doing an operation on * the hash. If another thread is already handling an event, * degrade to wait_event_is_done and returns false. **/ bool get_event_locks() { inuse_thread_cond.lock(); event_cond.lock(); if(dumping_initiated) { // Another thread is doing the dumping signal_not_in_use(false); wait_event_is_done(false); return false; } // I am the thread doing the dumping user_thread_lock.lock(); dumping_initiated = true; event_cond.unlock(); inuse_thread_count = 0; // Block access to hash and wait for threads with INUSE state for(thread_ptr_t it(user_thread_list.begin()); it != user_thread_list.end(); it++) { it->ostatus = atomic::set(&it->status, BLOCKED); if(it->ostatus == INUSE) inuse_thread_count++; } inuse_thread_count--; // Remove 1 for myself! while(inuse_thread_count > 0) { inuse_thread_cond.wait(); } inuse_thread_cond.unlock(); return true; } void release_event_locks() { event_cond.lock(); for(thread_ptr_t it(user_thread_list.begin()); it != user_thread_list.end(); it++) { atomic::set(&it->status, FREE); } user_thread_lock.unlock(); dumping_initiated = false; event_cond.broadcast(); event_cond.unlock(); } private: ary_t *ary; dumper_t *dumper; volatile bool dumping_initiated; thread_list_t user_thread_list; locks::pthread::mutex user_thread_lock; locks::pthread::cond event_cond; locks::pthread::cond inuse_thread_cond; volatile uint_t inuse_thread_count; }; } #endif // __HASH_HPP__ jellyfish-1.1.11/jellyfish/stats_main.cc0000644015303500042660000001033512151455365015171 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include template void compute_stats(const hash_t &h, uint64_t lower_count, uint64_t upper_count, uint64_t &unique, uint64_t &distinct, uint64_t &total, uint64_t &max_count) { typename hash_t::iterator it = h.iterator_all(); while(it.next()) { if(it.get_val() < lower_count || it.get_val() > upper_count) continue; unique += it.get_val() == 1; distinct++; total += it.get_val(); if(it.get_val() > max_count) max_count = it.get_val(); } } int stats_main(int argc, char *argv[]) { stats_args args(argc, argv); ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Error opening output file '" << args.output_arg << "'"; mapped_file dbf(args.db_arg); dbf.sequential().will_need(); char type[8]; memcpy(type, dbf.base(), sizeof(type)); args.recompute_flag |= args.lower_count_given | args.upper_count_given; uint64_t lower_count = args.lower_count_given ? args.lower_count_arg : 0; uint64_t upper_count = args.upper_count_given ? args.upper_count_arg : (uint64_t)-1; uint64_t unique = 0, distinct = 0, total = 0, max_count = 0; if(!strncmp(type, jellyfish::compacted_hash::file_type, sizeof(type))) { hash_query_t hash(dbf); if(args.verbose_flag) out << "k-mer length (bases): " << hash.get_mer_len() << "\n" << "value length (bytes): " << hash.get_val_len() << "\n" << "max reprobe : " << hash.get_max_reprobe() << "\n" << "hash size : " << hash.get_size() << "\n"; if(args.recompute_flag) { compute_stats(hash, lower_count, upper_count, unique, distinct, total, max_count); } else { unique = hash.get_unique(); distinct = hash.get_distinct(); total = hash.get_total(); max_count = hash.get_max_count(); } } else if(!strncmp(type, jellyfish::raw_hash::file_type, sizeof(type))) { raw_inv_hash_query_t hash(dbf); if(args.verbose_flag) out << "k-mer length (bases): " << hash.get_mer_len() << "\n" << "value length (bits) : " << hash.get_val_len() << "\n"; compute_stats(hash, lower_count, upper_count, unique, distinct, total, max_count); } else { die << "Invalid file type '" << err::substr(type, sizeof(type)) << "'."; } out << "Unique: " << unique << "\n" << "Distinct: " << distinct << "\n" << "Total: " << total << "\n" << "Max_count: " << max_count << "\n"; out.close(); // if(args.fasta_flag) { // char key[hash.get_mer_len() + 1]; // while(hash.next()) { // if(hash.val < lower_count || hash.val > upper_count) // continue; // hash.get_string(key); // out << ">" << hash.val << "\n" << key << "\n"; // } // } else if(args.column_flag) { // char key[hash.get_mer_len() + 1]; // char spacer = args.tab_flag ? '\t' : ' '; // while(hash.next()) { // if(hash.val < lower_count || hash.val > upper_count) // continue; // hash.get_string(key); // out << key << spacer << hash.val << "\n"; // } // } else { // die << "Invalid file type '" << err::substr(type, sizeof(type)) << "'."; // } // out.close(); return 0; } jellyfish-1.1.11/jellyfish/count_main_cmdline.hpp0000644015303500042660000006121412200443056017047 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __COUNT_ARGS_HPP__ #define __COUNT_ARGS_HPP__ #include #include #include #include #include #include #include #include #include #include #include #include class count_args { // Boiler plate stuff. Conversion from string to other formats static bool adjust_double_si_suffix(double &res, const char *suffix) { if(*suffix == '\0') return true; if(*(suffix + 1) != '\0') return false; switch(*suffix) { case 'a': res *= 1e-18; break; case 'f': res *= 1e-15; break; case 'p': res *= 1e-12; break; case 'n': res *= 1e-9; break; case 'u': res *= 1e-6; break; case 'm': res *= 1e-3; break; case 'k': res *= 1e3; break; case 'M': res *= 1e6; break; case 'G': res *= 1e9; break; case 'T': res *= 1e12; break; case 'P': res *= 1e15; break; case 'E': res *= 1e18; break; default: return false; } return true; } static double conv_double(const char *str, ::std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; double res = strtod(str, &endptr); if(errno) { err.assign(strerror(errno)); return (double)0.0; } bool invalid = si_suffix ? !adjust_double_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (double)0.0; } return res; } static int conv_enum(const char* str, ::std::string& err, const char* const strs[]) { int res = 0; for(const char* const* cstr = strs; *cstr; ++cstr, ++res) if(!strcmp(*cstr, str)) return res; err += "Invalid constant '"; err += str; err += "'. Expected one of { "; for(const char* const* cstr = strs; *cstr; ++cstr) { if(cstr != strs) err += ", "; err += *cstr; } err += " }"; return -1; } template static bool adjust_int_si_suffix(T &res, const char *suffix) { if(*suffix == '\0') return true; if(*(suffix + 1) != '\0') return false; switch(*suffix) { case 'k': res *= (T)1000; break; case 'M': res *= (T)1000000; break; case 'G': res *= (T)1000000000; break; case 'T': res *= (T)1000000000000; break; case 'P': res *= (T)1000000000000000; break; case 'E': res *= (T)1000000000000000000; break; default: return false; } return true; } template static T conv_int(const char *str, ::std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; long long int res = strtoll(str, &endptr, 0); if(errno) { err.assign(strerror(errno)); return (T)0; } bool invalid = si_suffix ? !adjust_int_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (T)0; } if(res > ::std::numeric_limits::max() || res < ::std::numeric_limits::min()) { err.assign("Value out of range"); return (T)0; } return (T)res; } template static T conv_uint(const char *str, ::std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; while(isspace(*str)) { ++str; } if(*str == '-') { err.assign("Negative value"); return (T)0; } unsigned long long int res = strtoull(str, &endptr, 0); if(errno) { err.assign(strerror(errno)); return (T)0; } bool invalid = si_suffix ? !adjust_int_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (T)0; } if(res > ::std::numeric_limits::max() || res < ::std::numeric_limits::min()) { err.assign("Value out of range"); return (T)0; } return (T)res; } template static ::std::string vec_str(const std::vector &vec) { ::std::ostringstream os; for(typename ::std::vector::const_iterator it = vec.begin(); it != vec.end(); ++it) { if(it != vec.begin()) os << ","; os << *it; } return os.str(); } class string : public ::std::string { public: string() : ::std::string() {} explicit string(const ::std::string &s) : std::string(s) {} explicit string(const char *s) : ::std::string(s) {} int as_enum(const char* const strs[]) { ::std::string err; int res = conv_enum((const char*)this->c_str(), err, strs); if(!err.empty()) throw ::std::runtime_error(err); return res; } uint32_t as_uint32_suffix() const { return as_uint32(true); } uint32_t as_uint32(bool si_suffix = false) const { ::std::string err; uint32_t res = conv_uint((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to uint32_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } uint64_t as_uint64_suffix() const { return as_uint64(true); } uint64_t as_uint64(bool si_suffix = false) const { ::std::string err; uint64_t res = conv_uint((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to uint64_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } int32_t as_int32_suffix() const { return as_int32(true); } int32_t as_int32(bool si_suffix = false) const { ::std::string err; int32_t res = conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int32_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } int64_t as_int64_suffix() const { return as_int64(true); } int64_t as_int64(bool si_suffix = false) const { ::std::string err; int64_t res = conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int64_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } int as_int_suffix() const { return as_int(true); } int as_int(bool si_suffix = false) const { ::std::string err; int res = conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to int_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } long as_long_suffix() const { return as_long(true); } long as_long(bool si_suffix = false) const { ::std::string err; long res = conv_int((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to long_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } double as_double_suffix() const { return as_double(true); } double as_double(bool si_suffix = false) const { ::std::string err; double res = conv_double((const char*)this->c_str(), err, si_suffix); if(!err.empty()) { ::std::string msg("Invalid conversion of '"); msg += *this; msg += "' to double_t: "; msg += err; throw ::std::runtime_error(msg); } return res; } }; public: struct invalid_char { enum { warn, ignore, error }; static const char* const strs[4]; }; uint32_t mer_len_arg; bool mer_len_given; uint64_t size_arg; bool size_given; uint32_t threads_arg; bool threads_given; string output_arg; bool output_given; bool O_flag; uint32_t counter_len_arg; bool counter_len_given; uint32_t out_counter_len_arg; bool out_counter_len_given; bool both_strands_flag; uint32_t reprobes_arg; bool reprobes_given; bool raw_flag; bool both_flag; bool quake_flag; uint32_t quality_start_arg; bool quality_start_given; uint32_t min_quality_arg; bool min_quality_given; uint64_t lower_count_arg; bool lower_count_given; uint64_t upper_count_arg; bool upper_count_given; int invalid_char_arg; bool invalid_char_given; string matrix_arg; bool matrix_given; const char * timing_arg; bool timing_given; const char * stats_arg; bool stats_given; bool no_write_flag; bool measure_flag; uint64_t buffers_arg; bool buffers_given; uint64_t buffer_size_arg; bool buffer_size_given; uint64_t out_buffer_size_arg; bool out_buffer_size_given; bool lock_flag; bool stream_flag; ::std::vector file_arg; typedef ::std::vector::iterator file_arg_it; typedef ::std::vector::const_iterator file_arg_const_it; enum { START_OPT = 1000, FULL_HELP_OPT, USAGE_OPT, OUT_COUNTER_LEN_OPT, BOTH_OPT, QUALITY_START_OPT, MIN_QUALITY_OPT, INVALID_CHAR_OPT, MATRIX_OPT, TIMING_OPT, STATS_OPT, BUFFERS_OPT, BUFFER_SIZE_OPT, OUT_BUFFER_SIZE_OPT, LOCK_OPT, STREAM_OPT }; count_args() : mer_len_arg(), mer_len_given(false), size_arg(), size_given(false), threads_arg(1), threads_given(false), output_arg("mer_counts"), output_given(false), O_flag(false), counter_len_arg(7), counter_len_given(false), out_counter_len_arg(4), out_counter_len_given(false), both_strands_flag(false), reprobes_arg(62), reprobes_given(false), raw_flag(false), both_flag(false), quake_flag(false), quality_start_arg(64), quality_start_given(false), min_quality_arg(0), min_quality_given(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), invalid_char_arg(), invalid_char_given(false), matrix_arg(""), matrix_given(false), timing_arg(""), timing_given(false), stats_arg(""), stats_given(false), no_write_flag(false), measure_flag(false), buffers_arg(), buffers_given(false), buffer_size_arg(8192), buffer_size_given(false), out_buffer_size_arg(20000000), out_buffer_size_given(false), lock_flag(false), stream_flag(false), file_arg() { } count_args(int argc, char* argv[]) : mer_len_arg(), mer_len_given(false), size_arg(), size_given(false), threads_arg(1), threads_given(false), output_arg("mer_counts"), output_given(false), O_flag(false), counter_len_arg(7), counter_len_given(false), out_counter_len_arg(4), out_counter_len_given(false), both_strands_flag(false), reprobes_arg(62), reprobes_given(false), raw_flag(false), both_flag(false), quake_flag(false), quality_start_arg(64), quality_start_given(false), min_quality_arg(0), min_quality_given(false), lower_count_arg(), lower_count_given(false), upper_count_arg(), upper_count_given(false), invalid_char_arg(), invalid_char_given(false), matrix_arg(""), matrix_given(false), timing_arg(""), timing_given(false), stats_arg(""), stats_given(false), no_write_flag(false), measure_flag(false), buffers_arg(), buffers_given(false), buffer_size_arg(8192), buffer_size_given(false), out_buffer_size_arg(20000000), out_buffer_size_given(false), lock_flag(false), stream_flag(false), file_arg() { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"mer-len", 1, 0, 'm'}, {"size", 1, 0, 's'}, {"threads", 1, 0, 't'}, {"output", 1, 0, 'o'}, {"", 0, 0, 'O'}, {"counter-len", 1, 0, 'c'}, {"out-counter-len", 1, 0, OUT_COUNTER_LEN_OPT}, {"both-strands", 0, 0, 'C'}, {"reprobes", 1, 0, 'p'}, {"raw", 0, 0, 'r'}, {"both", 0, 0, BOTH_OPT}, {"quake", 0, 0, 'q'}, {"quality-start", 1, 0, QUALITY_START_OPT}, {"min-quality", 1, 0, MIN_QUALITY_OPT}, {"lower-count", 1, 0, 'L'}, {"upper-count", 1, 0, 'U'}, {"invalid-char", 1, 0, INVALID_CHAR_OPT}, {"matrix", 1, 0, MATRIX_OPT}, {"timing", 1, 0, TIMING_OPT}, {"stats", 1, 0, STATS_OPT}, {"no-write", 0, 0, 'w'}, {"measure", 0, 0, 'u'}, {"buffers", 1, 0, BUFFERS_OPT}, {"buffer-size", 1, 0, BUFFER_SIZE_OPT}, {"out-buffer-size", 1, 0, OUT_BUFFER_SIZE_OPT}, {"lock", 0, 0, LOCK_OPT}, {"stream", 0, 0, STREAM_OPT}, {"help", 0, 0, 'h'}, {"full-help", 0, 0, FULL_HELP_OPT}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "hVm:s:t:o:Oc:Cp:rqL:U:wu"; ::std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { ::std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': ::std::cerr << "Missing required argument for " << (index == -1 ? ::std::string(1, (char)optopt) : std::string(long_options[index].name)) << ::std::endl; exit(1); case 'h': ::std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: ::std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': ::std::cerr << "Use --usage or --help for some help\n"; exit(1); case FULL_HELP_OPT: ::std::cout << usage() << "\n\n" << help() << "\n\n" << hidden() << std::endl; exit(0); case 'm': mer_len_given = true; mer_len_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-m, --mer-len=uint32") break; case 's': size_given = true; size_arg = conv_uint((const char*)optarg, err, true); CHECK_ERR(uint64_t, optarg, "-s, --size=uint64") break; case 't': threads_given = true; threads_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-t, --threads=uint32") break; case 'o': output_given = true; output_arg.assign(optarg); break; case 'O': O_flag = true; break; case 'c': counter_len_given = true; counter_len_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-c, --counter-len=Length in bits") break; case OUT_COUNTER_LEN_OPT: out_counter_len_given = true; out_counter_len_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, " --out-counter-len=Length in bytes") break; case 'C': both_strands_flag = true; break; case 'p': reprobes_given = true; reprobes_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-p, --reprobes=uint32") break; case 'r': raw_flag = true; break; case BOTH_OPT: both_flag = true; break; case 'q': quake_flag = true; break; case QUALITY_START_OPT: quality_start_given = true; quality_start_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, " --quality-start=uint32") break; case MIN_QUALITY_OPT: min_quality_given = true; min_quality_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint32_t, optarg, " --min-quality=uint32") break; case 'L': lower_count_given = true; lower_count_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-L, --lower-count=uint64") break; case 'U': upper_count_given = true; upper_count_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-U, --upper-count=uint64") break; case INVALID_CHAR_OPT: invalid_char_given = true; invalid_char_arg = conv_enum((const char*)optarg, err, invalid_char::strs); CHECK_ERR(enum, optarg, " --invalid-char=warn|ignore|error") break; case MATRIX_OPT: matrix_given = true; matrix_arg.assign(optarg); break; case TIMING_OPT: timing_given = true; timing_arg = optarg; break; case STATS_OPT: stats_given = true; stats_arg = optarg; break; case 'w': no_write_flag = true; break; case 'u': measure_flag = true; break; case BUFFERS_OPT: buffers_given = true; buffers_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint64_t, optarg, " --buffers=uint64") break; case BUFFER_SIZE_OPT: buffer_size_given = true; buffer_size_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint64_t, optarg, " --buffer-size=uint64") break; case OUT_BUFFER_SIZE_OPT: out_buffer_size_given = true; out_buffer_size_arg = conv_uint((const char*)optarg, err, false); CHECK_ERR(uint64_t, optarg, " --out-buffer-size=uint64") break; case LOCK_OPT: lock_flag = true; break; case STREAM_OPT: stream_flag = true; break; } } // Check that required switches are present if(!mer_len_given) error("[-m, --mer-len=uint32] required switch"); if(!size_given) error("[-s, --size=uint64] required switch"); // Parse arguments if(argc - optind < 1) error("Requires at least 1 argument."); for( ; optind < argc; ++optind) { file_arg.push_back(argv[optind]); } } #define count_args_USAGE "Usage: jellyfish count [options] file:path+" const char * usage() const { return count_args_USAGE; } void error(const char *msg) { ::std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << ::std::endl; exit(1); } #define count_args_HELP "Count k-mers or qmers in fasta or fastq files\n\n" \ "Options (default value in (), *required):\n" \ " -m, --mer-len=uint32 *Length of mer\n" \ " -s, --size=uint64 *Hash size\n" \ " -t, --threads=uint32 Number of threads (1)\n" \ " -o, --output=string Output prefix (mer_counts)\n" \ " -c, --counter-len=Length in bits Length of counting field (7)\n" \ " --out-counter-len=Length in bytes Length of counter field in output (4)\n" \ " -C, --both-strands Count both strand, canonical representation (false)\n" \ " -p, --reprobes=uint32 Maximum number of reprobes (62)\n" \ " -r, --raw Write raw database (false)\n" \ " -q, --quake Quake compatibility mode (false)\n" \ " --quality-start=uint32 Starting ASCII for quality values (64)\n" \ " --min-quality=uint32 Minimum quality. A base with lesser quality becomes an N (0)\n" \ " -L, --lower-count=uint64 Don't output k-mer with count < lower-count\n" \ " -U, --upper-count=uint64 Don't output k-mer with count > upper-count\n" \ " --invalid-char=warn|ignore|error How to treat invalid characters. The char is changed to a N. (warn)\n" \ " --matrix=Matrix file Hash function binary matrix\n" \ " --timing=Timing file Print timing information\n" \ " --stats=Stats file Print stats\n" \ " --usage Usage\n" \ " -h, --help This message\n" \ " --full-help Detailed help\n" \ " -V, --version Version" const char * help() const { return count_args_HELP; } #define count_args_HIDDEN "Hidden options:\n" \ " -O Output is the file name (not a prefix) (false)\n" \ " --both Write list and raw database (false)\n" \ " -w, --no-write Don't write database (false)\n" \ " -u, --measure Write usage statistics (false)\n" \ " --buffers=uint64 Number of buffers per thread\n" \ " --buffer-size=uint64 Size of buffers (8192)\n" \ " --out-buffer-size=uint64 Size of output buffer per thread (20000000)\n" \ " --lock Lock hash in memory (no swapping) (false)\n" \ " --stream Read from stream, not memory map (false)" const char * hidden() const { return count_args_HIDDEN; } void print_version(::std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(::std::ostream &os = std::cout) { os << "mer_len_given:" << mer_len_given << " mer_len_arg:" << mer_len_arg << "\n"; os << "size_given:" << size_given << " size_arg:" << size_arg << "\n"; os << "threads_given:" << threads_given << " threads_arg:" << threads_arg << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "O_flag:" << O_flag << "\n"; os << "counter_len_given:" << counter_len_given << " counter_len_arg:" << counter_len_arg << "\n"; os << "out_counter_len_given:" << out_counter_len_given << " out_counter_len_arg:" << out_counter_len_arg << "\n"; os << "both_strands_flag:" << both_strands_flag << "\n"; os << "reprobes_given:" << reprobes_given << " reprobes_arg:" << reprobes_arg << "\n"; os << "raw_flag:" << raw_flag << "\n"; os << "both_flag:" << both_flag << "\n"; os << "quake_flag:" << quake_flag << "\n"; os << "quality_start_given:" << quality_start_given << " quality_start_arg:" << quality_start_arg << "\n"; os << "min_quality_given:" << min_quality_given << " min_quality_arg:" << min_quality_arg << "\n"; os << "lower_count_given:" << lower_count_given << " lower_count_arg:" << lower_count_arg << "\n"; os << "upper_count_given:" << upper_count_given << " upper_count_arg:" << upper_count_arg << "\n"; os << "invalid_char_given:" << invalid_char_given << " invalid_char_arg:" << invalid_char_arg << "|" << invalid_char::strs[invalid_char_arg] << "\n"; os << "matrix_given:" << matrix_given << " matrix_arg:" << matrix_arg << "\n"; os << "timing_given:" << timing_given << " timing_arg:" << timing_arg << "\n"; os << "stats_given:" << stats_given << " stats_arg:" << stats_arg << "\n"; os << "no_write_flag:" << no_write_flag << "\n"; os << "measure_flag:" << measure_flag << "\n"; os << "buffers_given:" << buffers_given << " buffers_arg:" << buffers_arg << "\n"; os << "buffer_size_given:" << buffer_size_given << " buffer_size_arg:" << buffer_size_arg << "\n"; os << "out_buffer_size_given:" << out_buffer_size_given << " out_buffer_size_arg:" << out_buffer_size_arg << "\n"; os << "lock_flag:" << lock_flag << "\n"; os << "stream_flag:" << stream_flag << "\n"; os << "file_arg:" << vec_str(file_arg) << "\n"; } }; const char* const count_args::invalid_char::strs[4] = { "warn", "ignore", "error", (const char*)0 }; #endif // __COUNT_ARGS_HPP__" jellyfish-1.1.11/jellyfish/query_main.cc0000644015303500042660000000456212151455365015205 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include template void print_mer_counts(const hash_t &h, std::istream &in, std::ostream &out) { uint_t mer_len = h.get_mer_len(); uint_t width = mer_len + 2; char mer[width + 1]; while(true) { in >> std::setw(width) >> mer; if(!in.good()) break; if(strlen(mer) != mer_len) die << "Invalid mer " << (char*)mer; out << mer << " " << h[mer] << "\n"; } } int query_main(int argc, char *argv[]) { query_args args(argc, argv); ifstream_default in(args.input_given ? args.input_arg : 0, std::cin); if(!in.good()) die << "Can't open input file '" << args.input_arg << "'" << err::no; ofstream_default out(args.input_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Can't open output file '" << args.output_arg << "'" << err::no; mapped_file dbf(args.db_arg.c_str()); char type[8]; memcpy(type, dbf.base(), sizeof(type)); if(!strncmp(type, jellyfish::raw_hash::file_type, sizeof(type))) { raw_inv_hash_query_t hash(dbf); hash.set_canonical(args.both_strands_flag); hash.set_cary_bit(args.cary_bit_flag); print_mer_counts(hash, in, out); } else if(!strncmp(type, jellyfish::compacted_hash::file_type, sizeof(type))) { hash_query_t hash(dbf); hash.set_canonical(args.both_strands_flag); print_mer_counts(hash, in, out); } out.close(); return 0; } jellyfish-1.1.11/jellyfish/fstream_default.hpp0000644015303500042660000000472312151455365016402 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_FSTREAM_WITH_DEFAULT_HPP__ #define __JELLYFISH_FSTREAM_WITH_DEFAULT_HPP__ #include #include template class fstream_default : public Base { typedef Base super; static std::streambuf* open_file(const char* str, std::ios_base::openmode mode) { std::filebuf* fb = new std::filebuf; return fb->open(str, mode); } static std::streambuf* get_streambuf(const char* str, Base& def, std::ios_base::openmode mode) { return (str != 0) ? open_file(str, mode) : def.rdbuf(); } static std::streambuf* get_streambuf(const char* str, std::streambuf* buf, std::ios_base::openmode mode) { return (str != 0) ? open_file(str, mode) : buf; } bool do_close; public: fstream_default(const char* str, Base& def, std::ios_base::openmode mode = def_mode) : Base(get_streambuf(str, def, mode)), do_close(str != 0) { if(Base::rdbuf() == 0) Base::setstate(std::ios_base::badbit); } fstream_default(const char* str, std::streambuf* def, std::ios_base::openmode mode = def_mode) : Base(get_streambuf(str, def, mode)), do_close(str != 0) { if(Base::rdbuf() == 0) Base::setstate(std::ios_base::badbit); } ~fstream_default() { if(do_close) { delete Base::rdbuf(0); do_close = false; } } // Close is a noop at this point as GCC 4.4 has a problem with // Base::rdbuf in methods (breaks strict aliasing). Beats me! I // think it is a false positive. void close() {} }; typedef fstream_default ofstream_default; typedef fstream_default ifstream_default; #endif // __JELLYFISH_FSTREAM_WITH_DEFAULT_HPP__ jellyfish-1.1.11/jellyfish/err.hpp0000644015303500042660000000666112200443056014015 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __ERR_HPP__ #define __ERR_HPP__ #include #include #include #include #include #include #include #include #ifdef HAVE_CONFIG_H #include #endif #if HAVE_DECL_STRERROR_R == 0 #ifdef STRERROR_R_CHAR_P extern char* strerror_r(int, char*, size_t); #else extern int strerror_r(int, char*, size_t); #endif #endif namespace err { class code { int _code; public: explicit code(int c) : _code(c) {} int get_code() const { return _code; } }; class no_t { public: no_t() {} static void write(std::ostream &os, int e) { char err_str[1024]; char* str; #ifdef STRERROR_R_CHAR_P str = strerror_r(e, err_str, sizeof(err_str)); if(!str) { // Should never happen strcpy(err_str, "error"); str = err_str; } #else int err = strerror_r(e, err_str, sizeof(err_str)); if(err) strcpy(err_str, "error"); str = err_str; #endif os << ": " << str; } }; static const no_t no; std::ostream &operator<<(std::ostream &os, const err::no_t &x); class substr { const char *_s; const size_t _l; public: substr(const char *s, size_t len) : _s(s), _l(len) {} friend std::ostream &operator<<(std::ostream &os, const substr &ss); }; class die_t { int _code; int _errno; public: die_t() : _code(1), _errno(errno) {} explicit die_t(int c) : _code(c), _errno(errno) {} ~die_t() { std::cerr << std::endl; exit(_code); } die_t & operator<<(const code &x) { _code = x.get_code(); return *this; } die_t & operator<<(const no_t &x) { x.write(std::cerr, _errno); return *this; } die_t & operator<<(const char *a[]) { for(int i = 0; a[i]; i++) std::cerr << (i ? "\n" : "") << a[i]; return *this; } die_t & operator<<(const std::exception &e) { std::cerr << e.what(); return *this; } template die_t & operator<<(const T &x) { std::cerr << x; return *this; } }; template class raise_t { int _errno; std::ostringstream oss; public: raise_t() : _errno(errno) {} ~raise_t() { throw err_t(oss.str()); } raise_t & operator<<(const no_t &x) { x.write(oss, _errno); return *this; } template raise_t & operator<<(const T &x) { oss << x; return *this; } }; } #define die if(1) err::die_t() #define eraise(e) if(1) err::raise_t() #define define_error_class(name) \ class name : public std::runtime_error { \ public: explicit name(const std::string &txt) : std::runtime_error(txt) {} \ } #endif jellyfish-1.1.11/jellyfish/mer_counter.cc0000644015303500042660000003271612151455365015360 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Temporary //#include void die_on_error(std::string& err) { std::cerr << "Error: " << err << std::endl; exit(1); } void warn_on_error(std::string& err) { std::cerr << "Warn: " << err << std::endl; } // TODO: This mer_counting_base stuff has become wild. Lots of code // duplication and slightly different behavior for each (e.g. setup of // the hashing matrix). Refactor! class mer_counting_base { public: virtual ~mer_counting_base() {} virtual void count() = 0; virtual Time get_writing_time() const = 0; virtual uint64_t get_distinct() const = 0; virtual uint64_t get_total() const = 0; }; template class mer_counting : public mer_counting_base, public thread_exec { protected: count_args *args; locks::pthread::barrier sync_barrier; parser_t *parser; typename hash_t::storage_t *ary; hash_t *hash; jellyfish::dumper_t *dumper; uint64_t distinct, total; public: explicit mer_counting(count_args &_args) : args(&_args), sync_barrier(args->threads_arg), distinct(0), total(0) {} ~mer_counting() { if(dumper) delete dumper; if(hash) delete hash; if(ary) delete ary; if(parser) delete parser; } void start(int id) { sync_barrier.wait(); typename parser_t::thread mer_stream(parser->new_thread()); typename hash_t::thread_ptr_t counter(hash->new_thread()); if(args->invalid_char_arg != count_args::invalid_char::ignore) { if(args->invalid_char_arg == count_args::invalid_char::warn) mer_stream.set_error_reporter(warn_on_error); else mer_stream.set_error_reporter(die_on_error); } mer_stream.parse(counter); bool is_serial = sync_barrier.wait() == PTHREAD_BARRIER_SERIAL_THREAD; if(is_serial) { hash->dump(); } atomic::gcc::fetch_add(&distinct, mer_stream.get_distinct()); atomic::gcc::fetch_add(&total, mer_stream.get_total()); } void count() { exec_join(args->threads_arg); } virtual Time get_writing_time() const { return hash->get_writing_time(); } virtual uint64_t get_distinct() const { return distinct; } virtual uint64_t get_total() const { return total; } }; class mer_counting_fasta_hash : public mer_counting { public: mer_counting_fasta_hash(const std::vector &files, count_args &_args) : mer_counting(_args) { parser = new jellyfish::parse_dna(files.begin(), files.end(), args->mer_len_arg, args->buffers_arg, args->buffer_size_arg); ary = new inv_hash_t::storage_t(args->size_arg, 2*args->mer_len_arg, args->counter_len_arg, args->reprobes_arg, jellyfish::quadratic_reprobes); if(args->matrix_given) { std::ifstream fd; fd.exceptions(std::ifstream::eofbit|std::ifstream::failbit|std::ifstream::badbit); fd.open(args->matrix_arg.c_str()); SquareBinaryMatrix m(&fd); fd.close(); ary->set_matrix(m); } hash = new inv_hash_t(ary); if(args->no_write_flag) { dumper = new jellyfish::noop_dumper(); } else { // if(args->measure) { // dumper = new jellyfish::measure_dumper(ary); // } else if(args->raw_flag) { dumper = new raw_inv_hash_dumper_t((uint_t)4, args->output_arg.c_str(), args->out_buffer_size_arg, ary); } else { inv_hash_dumper_t *_dumper = new inv_hash_dumper_t(args->threads_arg, args->output_arg.c_str(), args->out_buffer_size_arg, 8*args->out_counter_len_arg, ary); _dumper->set_one_file(args->O_flag); if(args->lower_count_given) _dumper->set_lower_count(args->lower_count_arg); if(args->upper_count_given) _dumper->set_upper_count(args->upper_count_arg); dumper = _dumper; } } hash->set_dumper(dumper); parser->set_canonical(args->both_strands_flag); } }; class mer_counting_qual_fasta_hash : public mer_counting { public: mer_counting_qual_fasta_hash(const std::vector &files, count_args &_args) : mer_counting(_args) { parser = new jellyfish::parse_qual_dna(files, args->mer_len_arg, args->buffers_arg, args->buffer_size_arg, args->quality_start_arg, args->min_quality_arg); ary = new inv_hash_t::storage_t(args->size_arg, 2*args->mer_len_arg, args->counter_len_arg, args->reprobes_arg, jellyfish::quadratic_reprobes); if(args->matrix_given) { std::ifstream fd; fd.exceptions(std::ifstream::eofbit|std::ifstream::failbit|std::ifstream::badbit); fd.open(args->matrix_arg.c_str()); SquareBinaryMatrix m(&fd); fd.close(); ary->set_matrix(m); } hash = new inv_hash_t(ary); if(args->no_write_flag) { dumper = new jellyfish::noop_dumper(); } else { if(args->raw_flag) { dumper = new raw_inv_hash_dumper_t((uint_t)4, args->output_arg.c_str(), args->out_buffer_size_arg, ary); } else { inv_hash_dumper_t *_dumper = new inv_hash_dumper_t(args->threads_arg, args->output_arg.c_str(), args->out_buffer_size_arg, 8*args->out_counter_len_arg, ary); _dumper->set_one_file(args->O_flag); if(args->lower_count_given) _dumper->set_lower_count(args->lower_count_arg); if(args->upper_count_given) _dumper->set_upper_count(args->upper_count_arg); dumper = _dumper; } } hash->set_dumper(dumper); parser->set_canonical(args->both_strands_flag); } }; class mer_counting_fasta_direct : public mer_counting { public: mer_counting_fasta_direct(const std::vector &files, count_args &_args) : mer_counting(_args) { parser = new jellyfish::parse_dna(files.begin(), files.end(), args->mer_len_arg, args->buffers_arg, args->buffer_size_arg); ary = new direct_index_t::storage_t(2 * args->mer_len_arg); hash = new direct_index_t(ary); if(args->no_write_flag) { dumper = new jellyfish::noop_dumper(); } else { if(args->raw_flag) std::cerr << "Switch --raw not (yet) supported with direct indexing. Ignoring." << std::endl; direct_index_dumper_t *_dumper = new direct_index_dumper_t(args->threads_arg, args->output_arg.c_str(), args->out_buffer_size_arg, 8*args->out_counter_len_arg, ary); _dumper->set_one_file(args->O_flag); if(args->lower_count_given) _dumper->set_lower_count(args->lower_count_arg); if(args->upper_count_given) _dumper->set_upper_count(args->upper_count_arg); dumper = _dumper; } hash->set_dumper(dumper); parser->set_canonical(args->both_strands_flag); } }; class mer_counting_qual_fasta_direct : public mer_counting { public: mer_counting_qual_fasta_direct(const std::vector &files, count_args &_args) : mer_counting(_args) { parser = new jellyfish::parse_qual_dna(files, args->mer_len_arg, args->buffers_arg, args->buffer_size_arg, args->quality_start_arg, args->min_quality_arg); ary = new direct_index_t::storage_t(2 * args->mer_len_arg); hash = new direct_index_t(ary); if(args->no_write_flag) { dumper = new jellyfish::noop_dumper(); } else { if(args->raw_flag) std::cerr << "Switch --raw not (yet) supported with direct indexing. Ignoring." << std::endl; direct_index_dumper_t *_dumper = new direct_index_dumper_t(args->threads_arg, args->output_arg.c_str(), args->out_buffer_size_arg, 8*args->out_counter_len_arg, ary); _dumper->set_one_file(args->O_flag); if(args->lower_count_given) _dumper->set_lower_count(args->lower_count_arg); if(args->upper_count_given) _dumper->set_upper_count(args->upper_count_arg); dumper = _dumper; } hash->set_dumper(dumper); parser->set_canonical(args->both_strands_flag); } }; class mer_counting_quake : public mer_counting { public: mer_counting_quake(std::vector, count_args &_args) : mer_counting(_args) { parser = new jellyfish::parse_quake(args->file_arg, args->mer_len_arg, args->buffers_arg, args->buffer_size_arg, args->quality_start_arg); ary = new fastq_hash_t::storage_t(args->size_arg, 2*args->mer_len_arg, args->reprobes_arg, jellyfish::quadratic_reprobes); hash = new fastq_hash_t(ary); if(args->no_write_flag) { dumper = new jellyfish::noop_dumper(); } else { dumper = new raw_fastq_dumper_t(args->threads_arg, args->output_arg.c_str(), args->out_buffer_size_arg, ary); } hash->set_dumper(dumper); parser->set_canonical(args->both_strands_flag); } }; int count_main(int argc, char *argv[]) { count_args args(argc, argv); if(args.mer_len_arg < 2 || args.mer_len_arg > 31) die << "Invalid mer length '" << args.mer_len_arg << "'. It must be in [2, 31]."; Time start; mer_counting_base *counter; if(!args.buffers_given) args.buffers_arg = 20 * args.threads_arg; if(args.quake_flag) { counter = new mer_counting_quake(args.file_arg, args); } else if(ceilLog2((unsigned long)args.size_arg) > 2 * (unsigned long)args.mer_len_arg) { if(args.min_quality_given) counter = new mer_counting_qual_fasta_direct(args.file_arg, args); else counter = new mer_counting_fasta_direct(args.file_arg, args); } else if(args.min_quality_given) { counter = new mer_counting_qual_fasta_hash(args.file_arg, args); } else { counter = new mer_counting_fasta_hash(args.file_arg, args); } Time after_init; counter->count(); Time all_done; if(args.timing_given) { std::ofstream timing_fd(args.timing_arg); if(!timing_fd.good()) { std::cerr << "Can't open timing file '" << args.timing_arg << err::no << std::endl; } else { Time writing = counter->get_writing_time(); Time counting = (all_done - after_init) - writing; timing_fd << "Init " << (after_init - start).str() << "\n" << "Counting " << counting.str() << "\n" << "Writing " << writing.str() << "\n"; timing_fd.close(); } } if(args.stats_given) { std::ofstream stats_fd(args.stats_arg); if(!stats_fd.good()) { std::cerr << "Can't open stats file '" << args.stats_arg << err::no << std::endl; } else { stats_fd << "Distinct: " << counter->get_distinct() << "\n" << "Total: " << counter->get_total() << std::endl; stats_fd.close(); } } return 0; } jellyfish-1.1.11/jellyfish/parse_read.cc0000644015303500042660000000234012151455365015131 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include void jellyfish::parse_read::fill() { read_parser::reads_t *new_seq = write_next(); while(new_seq) { new_seq->file = fparser; bool input_eof = !fparser->next_reads(new_seq); if(new_seq->nb_reads > 0) { new_seq->link(); write_release(new_seq); new_seq = write_next(); } if(input_eof) { fparser->unlink(); if(++current_file == files.end()) { close(); break; } fparser = read_parser::new_parser(*current_file); fparser->link(); } } } jellyfish-1.1.11/jellyfish/randomc.h0000644015303500042660000001660612151455365014323 00000000000000/***************************** randomc.h ********************************** * Author: Agner Fog * Date created: 1997 * Last modified: 2008-11-16 * Project: randomc.h * Source URL: www.agner.org/random * * Description: * This header file contains class declarations and other definitions for the * randomc class library of uniform random number generators in C++ language. * * Overview of classes: * ==================== * * class CRandomMersenne: * Random number generator of type Mersenne twister. * Source file mersenne.cpp * * class CRandomMother: * Random number generator of type Mother-of-All (Multiply with carry). * Source file mother.cpp * * class CRandomSFMT: * Random number generator of type SIMD-oriented Fast Mersenne Twister. * The class definition is not included here because it is not * portable to all platforms. See sfmt.h and sfmt.cpp for details. * * Member functions (methods): * =========================== * * All these classes have identical member functions: * * Constructor(int seed): * The seed can be any integer. The time may be used as seed. * Executing a program twice with the same seed will give the same sequence * of random numbers. A different seed will give a different sequence. * * void RandomInit(int seed); * Re-initializes the random number generator with a new seed. * * void RandomInitByArray(int const seeds[], int NumSeeds); * In CRandomMersenne and CRandomSFMT only: Use this function if you want * to initialize with a seed with more than 32 bits. All bits in the seeds[] * array will influence the sequence of random numbers generated. NumSeeds * is the number of entries in the seeds[] array. * * double Random(); * Gives a floating point random number in the interval 0 <= x < 1. * The resolution is 32 bits in CRandomMother and CRandomMersenne, and * 52 bits in CRandomSFMT. * * int IRandom(int min, int max); * Gives an integer random number in the interval min <= x <= max. * (max-min < MAXINT). * The precision is 2^-32 (defined as the difference in frequency between * possible output values). The frequencies are exact if max-min+1 is a * power of 2. * * int IRandomX(int min, int max); * Same as IRandom, but exact. In CRandomMersenne and CRandomSFMT only. * The frequencies of all output values are exactly the same for an * infinitely long sequence. (Only relevant for extremely long sequences). * * uint32_t BRandom(); * Gives 32 random bits. * * * Example: * ======== * The file EX-RAN.CPP contains an example of how to generate random numbers. * * * Library version: * ================ * Optimized versions of these random number generators are provided as function * libraries in randoma.zip. These function libraries are coded in assembly * language and support only x86 platforms, including 32-bit and 64-bit * Windows, Linux, BSD, Mac OS-X (Intel based). Use randoma.h from randoma.zip * * * Non-uniform random number generators: * ===================================== * Random number generators with various non-uniform distributions are * available in stocc.zip (www.agner.org/random). * * * Further documentation: * ====================== * The file ran-instructions.pdf contains further documentation and * instructions for these random number generators. * * Copyright 1997-2008 by Agner Fog. * GNU General Public License http://www.gnu.org/licenses/gpl.html *******************************************************************************/ #ifndef RANDOMC_H #define RANDOMC_H // Define integer types with known size: int32_t, uint32_t, int64_t, uint64_t. // If this doesn't work then insert compiler-specific definitions here: #if defined(__GNUC__) // Compilers supporting C99 or C++0x have inttypes.h defining these integer types #include #define INT64_SUPPORTED // Remove this if the compiler doesn't support 64-bit integers #elif defined(_WIN16) || defined(__MSDOS__) || defined(_MSDOS) // 16 bit systems use long int for 32 bit integer typedef signed long int int32_t; typedef unsigned long int uint32_t; #elif defined(_MSC_VER) // Microsoft have their own definition typedef signed __int32 int32_t; typedef unsigned __int32 uint32_t; typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; #define INT64_SUPPORTED // Remove this if the compiler doesn't support 64-bit integers #else // This works with most compilers typedef signed int int32_t; typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned long long uint64_t; #define INT64_SUPPORTED // Remove this if the compiler doesn't support 64-bit integers #endif /*********************************************************************** System-specific user interface functions ***********************************************************************/ void EndOfProgram(void); // System-specific exit code (userintf.cpp) void FatalError(const char *ErrorText);// System-specific error reporting (userintf.cpp) #if defined(__cplusplus) // class definitions only in C++ /*********************************************************************** Define random number generator classes ***********************************************************************/ class CRandomMersenne { // Encapsulate random number generator // Choose which version of Mersenne Twister you want: #if 0 // Define constants for type MT11213A: #define MERS_N 351 #define MERS_M 175 #define MERS_R 19 #define MERS_U 11 #define MERS_S 7 #define MERS_T 15 #define MERS_L 17 #define MERS_A 0xE4BD75F5 #define MERS_B 0x655E5280 #define MERS_C 0xFFD58000 #else // or constants for type MT19937: #define MERS_N 624 #define MERS_M 397 #define MERS_R 31 #define MERS_U 11 #define MERS_S 7 #define MERS_T 15 #define MERS_L 18 #define MERS_A 0x9908B0DF #define MERS_B 0x9D2C5680 #define MERS_C 0xEFC60000 #endif public: explicit CRandomMersenne(int seed) { // Constructor RandomInit(seed); LastInterval = 0;} void RandomInit(int seed); // Re-seed void RandomInitByArray(int const seeds[], int NumSeeds); // Seed by more than 32 bits int IRandom (int min, int max); // Output random integer int IRandomX(int min, int max); // Output random integer, exact double Random(); // Output random float uint32_t BRandom(); // Output random bits private: void Init0(int seed); // Basic initialization procedure uint32_t mt[MERS_N]; // State vector int mti; // Index into mt uint32_t LastInterval; // Last interval length for IRandomX uint32_t RLimit; // Rejection limit used by IRandomX }; class CRandomMother { // Encapsulate random number generator public: void RandomInit(int seed); // Initialization int IRandom(int min, int max); // Get integer random number in desired interval double Random(); // Get floating point random number uint32_t BRandom(); // Output random bits explicit CRandomMother(int seed) { // Constructor RandomInit(seed);} protected: uint32_t x[5]; // History buffer }; #endif // __cplusplus #endif // RANDOMC_H jellyfish-1.1.11/jellyfish/hash_fastq_merge.cc0000644015303500042660000000360312151455365016327 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include int hash_fastq_merge_main(int argc, char *argv[]) { hash_fastq_merge_args args(argc, argv); fastq_hash_t::storage_t ary(args.size_arg, 2*args.mer_len_arg, args.reprobes_arg, jellyfish::quadratic_reprobes); fastq_hash_t hash(&ary); fastq_hash_t::thread_ptr_t counter(hash.new_thread()); int num_hashes = args.db_arg.size(); for(int i = 0; i < num_hashes; ++i) { fastq_storage_t *ihash = raw_fastq_dumper_t::read(args.db_arg[i]); if(ihash->get_key_len() != hash.get_key_len()) die << "Invalid mer length '" << (ihash->get_key_len() / 2) << "' for database '" << args.db_arg[i] << "'. Should be '" << (hash.get_key_len() / 2) << "'"; fastq_storage_t::iterator iit = ihash->iterator_all(); while(iit.next()) { counter->add(iit.get_key(), iit.get_val().to_float()); } delete ihash; } raw_fastq_dumper_t dumper(4, args.output_arg, args.out_buffer_size_arg, &ary); hash.set_dumper(&dumper); hash.dump(); return 0; } jellyfish-1.1.11/jellyfish/parse_quake.cc0000644015303500042660000001117412151455365015331 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include namespace jellyfish { parse_quake::parse_quake(const fary_t &_files, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size, const char _qs) : double_fifo_input(nb_buffers), mer_len(_mer_len), buffer_size(allocators::mmap::round_to_page(_buffer_size)), files(_files), current_file(files.begin()), have_seam(false), buffer_data(buffer_size * nb_buffers), quality_start(_qs), canonical(false) { seam = new char[2*mer_len]; unsigned long i = 0; for(bucket_iterator it = bucket_begin(); it != bucket_end(); ++it, ++i) { it->end = it->start = (char*)buffer_data.get_ptr() + i * buffer_size; } fparser = seq_qual_parser::new_parser(*current_file); } void parse_quake::fill() { bucket_t *new_seq = 0; while(true) { if(!new_seq) { new_seq = write_next(); if(!new_seq) break; } new_seq->end = new_seq->start + buffer_size; char *start = new_seq->start; if(have_seam) { have_seam = false; memcpy(start, seam, 2 * (mer_len - 1)); start += 2 * (mer_len - 1); } bool input_eof = !fparser->parse(start, &new_seq->end); if(new_seq->end > new_seq->start + 2 * mer_len) { have_seam = true; memcpy(seam, new_seq->end - 2 * (mer_len - 1), 2 * (mer_len - 1)); write_release(new_seq); new_seq = 0; } if(input_eof) { delete fparser; have_seam = false; if(++current_file == files.end()) { close(); break; } fparser = seq_qual_parser::new_parser(*current_file); } } } const float parse_quake::proba_codes[41] = { 1.00000000000000000000f, 0.79432823472428149003f, 0.63095734448019324958f, 0.50118723362727224391f, 0.39810717055349720273f, 0.31622776601683794118f, 0.25118864315095801309f, 0.19952623149688797355f, 0.15848931924611134314f, 0.12589254117941672817f, 0.10000000000000000000f, 0.07943282347242813790f, 0.06309573444801933051f, 0.05011872336272722023f, 0.03981071705534973415f, 0.03162277660168379134f, 0.02511886431509579437f, 0.01995262314968879874f, 0.01584893192461113431f, 0.01258925411794167490f, 0.01000000000000000000f, 0.00794328234724281379f, 0.00630957344480193028f, 0.00501187233627272462f, 0.00398107170553497342f, 0.00316227766016837939f, 0.00251188643150957944f, 0.00199526231496887892f, 0.00158489319246111408f, 0.00125892541179416749f, 0.00100000000000000000f, 0.00079432823472428131f, 0.00063095734448019298f, 0.00050118723362727253f, 0.00039810717055349735f, 0.00031622776601683794f, 0.00025118864315095795f, 0.00019952623149688788f, 0.00015848931924611142f, 0.00012589254117941674f, 0.00010000000000000000f, }; const float parse_quake::one_minus_proba_codes[41] = { 0.00000000000000000000f, 0.20567176527571850997f, 0.36904265551980675042f, 0.49881276637272775609f, 0.60189282944650279727f, 0.68377223398316200331f, 0.74881135684904198691f, 0.80047376850311202645f, 0.84151068075388868461f, 0.87410745882058327183f, 0.90000000000000002220f, 0.92056717652757180659f, 0.93690426555198069725f, 0.94988127663727273120f, 0.96018928294465022422f, 0.96837722339831622254f, 0.97488113568490419869f, 0.98004737685031118044f, 0.98415106807538887956f, 0.98741074588205834939f, 0.98999999999999999112f, 0.99205671765275715845f, 0.99369042655519801421f, 0.99498812766372723981f, 0.99601892829446503352f, 0.99683772233983158895f, 0.99748811356849043097f, 0.99800473768503117356f, 0.99841510680753886575f, 0.99874107458820582384f, 0.99899999999999999911f, 0.99920567176527574915f, 0.99936904265551984583f, 0.99949881276637275729f, 0.99960189282944644784f, 0.99968377223398319220f, 0.99974881135684900979f, 0.99980047376850311736f, 0.99984151068075388658f, 0.99987410745882054908f, 0.99990000000000001101f }; } jellyfish-1.1.11/jellyfish/read_parser.cc0000644015303500042660000000565612151455365015330 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include jellyfish::read_parser * jellyfish::read_parser::new_parser(const char *path) { int fd; char peek; fd = file_peek(path, &peek); switch(peek) { case '>': return new fasta_read_parser(fd, path, &peek, 1); case '@': return new fastq_read_parser(fd, path, &peek, 1); default: eraise(FileParserError) << "'" << path << "'" << "Invalid input file. Expected fasta or fastq format"; } return 0; } #define BREAK_AT_END if(eof()) break; namespace jellyfish { bool fasta_read_parser::next_reads(read_parser::reads_t *rs) { for(rs->nb_reads = 0; rs->nb_reads < read_parser::reads_t::max_nb_reads && !eof(); ++rs->nb_reads) { read_t *r = &rs->reads[rs->nb_reads]; r->qual_s = r->qual_e = 0; while(sbumpc() != '>') BREAK_AT_END; BREAK_AT_END; r->header = ptr(); while(sbumpc() != '\n') BREAK_AT_END; BREAK_AT_END; r->hlen = ptr() - r->header - 1; r->seq_s = ptr(); // find end of sequence while(!eof()) if(sbumpc() == '\n') if(speekc() == '>') break; r->seq_e = ptr(); } return !eof(); } bool fastq_read_parser::next_reads(read_parser::reads_t *rs) { for(rs->nb_reads = 0; rs->nb_reads < read_parser::reads_t::max_nb_reads && !eof(); ++rs->nb_reads) { read_t *r = &rs->reads[rs->nb_reads]; while(sbumpc() != '@') BREAK_AT_END; BREAK_AT_END; r->header = ptr(); while(sbumpc() != '\n') BREAK_AT_END; BREAK_AT_END; r->hlen = ptr() - r->header - 1; r->seq_s = ptr(); // find end of sequence size_t nb_bases = 0; while(!eof()) { if(sbumpc() == '\n') { if(speekc() == '+') break; } else { ++nb_bases; } } r->seq_e = ptr(); // Skip qual header while(sbumpc() != '\n') BREAK_AT_END; BREAK_AT_END; r->qual_s = ptr(); // Skip qual values while(!eof() && nb_bases > 0) if(sbumpc() != '\n') --nb_bases; if(nb_bases == 0) r->qual_e = ptr(); else BREAK_AT_END; } return !eof(); } } jellyfish-1.1.11/jellyfish/allocators_shm.hpp0000644015303500042660000000511512151455365016243 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_ALLOCATORS_SHM_HPP__ #define __JELLYFISH_ALLOCATORS_SHM_HPP__ #include #include #include #include #include namespace allocators { class shm { int fd; void *ptr; size_t size; std::string name; bool unlink; public: shm() : fd(-1), ptr(MAP_FAILED), size(0), name(""), unlink(true) {} explicit shm(size_t _size) : fd(-1), ptr(MAP_FAILED), size(0), name(""), unlink(true) { realloc(_size); } shm(size_t _size, std::string _name) : fd(-1), ptr(MAP_FAILED), size(0), name(_name), unlink(false) { realloc(_size); } ~shm() { if(ptr != MAP_FAILED) ::munmap(ptr, size); if(fd != -1) { close(fd); if(unlink) ::shm_unlink(name.c_str()); } } void *get_ptr() { return ptr != MAP_FAILED ? ptr : NULL; } size_t get_size() const { return size; } void *realloc(size_t new_size) { size_t old_size = size; if(fd == -1) { // Create a temporary file name. Security considerations? if(name.empty()) { std::ostringstream name_stream("/shm_alloc_"); name_stream << getpid() << "_" << (void *)this; name = name_stream.str(); } fd = ::shm_open(name.c_str(), O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); if(fd == -1) return NULL; } else if(ptr != MAP_FAILED) { ::munmap(ptr, old_size); ptr = MAP_FAILED; } if(ftruncate(fd, new_size) == -1) return NULL; void *new_ptr = ::mmap(NULL, new_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); if(new_ptr == MAP_FAILED) return NULL; ptr = new_ptr; size = new_size; return ptr; } // Not yet implemented int lock() { return 0; } int unlock() { return 0; } }; }; #endif jellyfish-1.1.11/jellyfish/seq_qual_parser.hpp0000644015303500042660000000420512151455365016416 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_SEQ_QUAL_PARSER_HPP__ #define __JELLYFISH_SEQ_QUAL_PARSER_HPP__ #include #include #include #include #include namespace jellyfish { class seq_qual_parser : public file_parser { public: seq_qual_parser(int fd, const char *path, const char *str, size_t len) : file_parser(fd, path, str, len) {} virtual ~seq_qual_parser() {} struct sequence_t { char *start; char *end; }; static seq_qual_parser *new_parser(const char *path); // parse some input data into the buffer [start, *end). Returns // false if there is no more data in the input. **end is an // input/output parameter. It points past the end of the buffer // when called and should point past the end of the data when // returned. The base and its ASCII qual value are one next to // another. virtual bool parse(char *start, char **end) = 0; protected: }; class fastq_seq_qual_parser : public seq_qual_parser { public: fastq_seq_qual_parser(int fd, const char *path, const char *str, size_t len) : seq_qual_parser(fd, path, str, len) {} virtual ~fastq_seq_qual_parser() {} virtual bool parse(char *start, char **end); define_error_class(FastqSeqQualParserError); private: void copy_qual_values(char *&qual_start, const char *start); simple_growing_array _read_buf; }; } #endif jellyfish-1.1.11/jellyfish/simple_circular_buffer.hpp0000644015303500042660000000762112151455365017743 00000000000000/* Jellyfish * Copyright (C) 2012 Genome group at University of Maryland. * * 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 3 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, see . */ #ifndef __SIMPLE_CIRCULAR_BUFFER_H__ #define __SIMPLE_CIRCULAR_BUFFER_H__ #include namespace jellyfish { namespace simple_circular_buffer { // T: type of element in container. D: type of derived class for // CRTP. A: allocator type. template class base { public: explicit base(T* data) : data_(data), front_(0), back_(0), full_(false) { } // Return true if empty bool empty() const { return front_ == back_ && !full(); } // Return true if full bool full() const { return full_; } void clear() { front_ = back_; full_ = false; } // Valid only if empty() is false T& front() { return data_[front_]; } // Valid only if empty() is false T& back() { return data_[prev_index(back_)]; } // Unlike the corresponding method on list or deqeue, push_back may // fail if full() is true. Then false is returned. bool push_back(const T& x) { if(full()) return false; data_[back_] = x; back_ = next_index(back_); full_ = back_ == front_; return true; } bool push_back() { if(full()) return false; back_ = next_index(back_); full_ = back_ == front_; return true; } // Pop an element from the front. It has no effect if empty() is true void pop_front() { if(empty()) return; front_ = next_index(front_); full_ = false; } int size() const { if(full()) return static_cast(this)->capacity(); int s = back_ - front_; return s < 0 ? s + static_cast(this)->capacity() : s; } protected: int next_index(int i) const { return (i + 1) % static_cast(this)->capacity(); } int prev_index(int i) const { return i ? i - 1 : static_cast(this)->capacity() - 1; } T* data() const { return data_; } T* data_; int front_, back_; bool full_; }; template class pre_alloc : public base > { typedef base > super; public: explicit pre_alloc(T* data) : super(data) { } static int capacity() { return capa; } }; // template > // class fixed : public base, A> { // typedef base, A> super; // public: // explicit fixed(const T v = T()) : super(capa, v) { } // // fixed(const int ignored_size, const T v = T()) : super(capa, v) { } // int capacity() const { return capa; } // }; // template > // class dyn : public base, A> { // typedef base, A> super; // public: // explicit dyn(int size, const T v = T()) : super(size, v), capa_(size) { } // int capacity() const { return capa_; } // int capa_; // }; } } #endif /* __SIMPLE_CIRCULAR_BUFFER_H__ */ jellyfish-1.1.11/jellyfish/offsets_key_value.hpp0000644015303500042660000002147512151455365016755 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_OFFSETS_KEY_VALUE_HPP__ #define __JELLYFISH_OFFSETS_KEY_VALUE_HPP__ #include #include #include namespace jellyfish { /* A word is whatever aligned type used for atomic operations * (CAS). Typically, a uint64_t. We store pairs of (key, value), in a * bit packed fashion. The key and value can have abritrary size as * long as they each fit in one word. A block is the largest number of * (key, value) pair such that the first key, and only the first, * starts at an aligned word. * * The key 0x0 is not valid. A key which fits completely within one * word is not protected by a "set" bit. A key which straddle the * boundary between two aligned words has a set bit in each parts. * * A value field can have any value and is initialized to 0x0. It has * no "set" bit ever. * * A key is prefixed with a "large" bit. If this bit is 0, the key * field is length key_len (not counting the possible set bits) and * the value field has length val_len. If the large bit has value 1, * the key field is just long enough to encode the number of * reprobing hops to go backward to find the actual key. The * remainder bits is used for the value field. In this scheme, we * assume the length needed to encode the number of reprobes is much * less than the length needed to encode the key. */ /* Offsets holds all the possible offset for a given combination of * key length, value length and reprobe limit. */ template class Offsets { public: // woff: offset in words from beginning of block // boff: offset in bits within that word. Past large bit. // shift: shift in second word, if any // mask1: includes the large bit and the set bit if any. // mask2: mask in second word. Idem as mask1. 0 if fits in one word. // sb_mask[12]: mask for set bit in word 1 and 2, if any. set bit is the // last usable bit of the field. // lb_mask: mask for the large bit. It is the first bit of the key field. typedef struct { struct { uint_t woff, boff, shift, cshift; word mask1, mask2, sb_mask1, sb_mask2, lb_mask; } key; struct { uint_t woff, boff, shift, cshift; word mask1, mask2; } val; } offset_t; typedef struct { offset_t normal; offset_t large; } offset_pair_t; struct block_info { uint_t len; uint_t word_len; }; // Offsets() {} Offsets(uint_t _key_len, uint_t _val_len, uint_t _reprobe_limit) : key_len(_key_len), val_len(_val_len), reprobe_limit(_reprobe_limit), reprobe_len(bitsize(reprobe_limit)), lval_len(key_len + val_len - reprobe_len), block(compute_offsets()), bld(block.len) { } ~Offsets() {} uint_t get_block_len() const { return block.len; } uint_t get_block_word_len() const { return block.word_len; } uint_t get_reprobe_len() const { return reprobe_len; } uint_t get_key_len() const { return key_len; } uint_t get_val_len() const { return val_len; } uint_t get_lval_len() const { return lval_len; } word get_max_val(bool large) const { return (((uint64_t)1) << (large ? lval_len : val_len)) - 1; } // Discretize and round down number of entries according to length // of a block. Return in blocks the number of blocks. size_t floor_block(size_t entries, size_t &blocks) const { blocks = entries / bld; return block.len * blocks; } word *get_word_offset(size_t id, const offset_t **o, const offset_t **lo, word * const base) const { uint64_t q, r; bld.division(id, q, r); word *w = base + (block.word_len * q); *o = &offsets[r].normal; *lo = &offsets[r].large; return w; } private: const uint_t key_len, val_len; const uint_t reprobe_limit, reprobe_len, lval_len; const block_info block; const divisor64 bld; // Fast divisor by block.len offset_pair_t offsets[bsizeof(word)]; block_info compute_offsets(); bool update_current_offsets(uint_t &cword, uint_t &cboff, uint_t add); word mask(uint_t length, uint_t shift); }; template bool Offsets::update_current_offsets(uint_t &cword, uint_t &cboff, uint_t add) { cboff += add; if(cboff >= bsizeof(word)) { cword++; cboff %= bsizeof(word); return cboff > 0; } return false; } template word Offsets::mask(uint_t length, uint_t shift) { return (((word)1u << length) - 1) << shift; } template typename Offsets::block_info Offsets::compute_offsets() { offset_pair_t *offset = offsets; uint_t cword = 0; // current word in block uint_t cboff = 0; // current offset in word uint_t lcword; // idem for large fields uint_t lcboff; uint_t ocboff; memset(offsets, '\0', sizeof(offsets)); do { offset->normal.key.woff = offset->large.key.woff = lcword = cword; ocboff = lcboff = cboff; offset->normal.key.boff = cboff + 1; offset->normal.key.lb_mask = mask(1, cboff); if(update_current_offsets(cword, cboff, key_len + 1)) { // key extends over two words -> add extra set bits update_current_offsets(cword, cboff, 2); offset->normal.key.mask1 = mask(bsizeof(word) - ocboff, ocboff); offset->normal.key.mask2 = mask(cboff, 0); offset->normal.key.shift = key_len + 1 - cboff; offset->normal.key.cshift = cboff - 1; offset->normal.key.sb_mask1 = mask(1, bsizeof(word) - 1); offset->normal.key.sb_mask2 = mask(1, cboff - 1); } else { offset->normal.key.mask1 = mask(key_len + 1, ocboff); offset->normal.key.mask2 = 0; offset->normal.key.shift = 0; offset->normal.key.cshift = 0; offset->normal.key.sb_mask1 = 0; offset->normal.key.sb_mask2 = 0; } offset->normal.val.woff = cword; offset->normal.val.boff = cboff; offset->normal.val.mask1 = mask(val_len, cboff); if(update_current_offsets(cword, cboff, val_len)) { offset->normal.val.mask2 = mask(cboff, 0); offset->normal.val.shift = val_len - cboff; offset->normal.val.cshift = cboff; } else { offset->normal.val.mask2 = 0; offset->normal.val.shift = val_len; offset->normal.val.cshift = 0; } ocboff = lcboff; offset->large.key.boff = lcboff + 1; offset->large.key.lb_mask = mask(1, lcboff); if(update_current_offsets(lcword, lcboff, reprobe_len + 1)) { update_current_offsets(lcword, lcboff, 2); offset->large.key.mask1 = mask(bsizeof(word) - ocboff, ocboff); offset->large.key.mask2 = mask(lcboff, 0); offset->large.key.shift = reprobe_len + 1 - lcboff; offset->large.key.cshift = lcboff - 1; offset->large.key.sb_mask1 = mask(1, bsizeof(word) - 1); offset->large.key.sb_mask2 = mask(1, lcboff - 1); } else { offset->large.key.mask1 = mask(reprobe_len + 1, ocboff); offset->large.key.mask2 = 0; offset->large.key.boff = ocboff + 1; offset->large.key.shift = 0; offset->large.key.cshift = 0; offset->large.key.sb_mask1 = 0; offset->large.key.sb_mask2 = 0; } offset->large.val.woff = lcword; offset->large.val.boff = lcboff; offset->large.val.mask1 = mask(lval_len, lcboff); if(update_current_offsets(lcword, lcboff, lval_len)) { offset->large.val.mask2 = mask(lcboff, 0); offset->large.val.shift = lval_len - lcboff; offset->large.val.cshift = lcboff; } else { offset->large.val.mask2 = 0; offset->large.val.shift = lval_len; offset->large.val.cshift = 0; } offset++; } while(cboff != 0 && cboff < bsizeof(word) - 2); block_info res = { static_cast(offset - offsets), cword + (cboff == 0 ? 0 : 1) }; return res; } } #endif // __OFFSETS_KEY_VALUE_HPP__ jellyfish-1.1.11/jellyfish/yaggo.hpp0000644015303500042660000001137512151455365014344 00000000000000/* Copyright (c) 2011 Guillaume Marcais * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __YAGGO_HPP__ #define __YAGGO_HPP__ #include #include #include #include #include #include #include #include #include #include #include namespace yaggo { class string : public std::string { public: string() : std::string() {} explicit string(const std::string &s) : std::string(s) {} explicit string(const char *s) : std::string(s) {} int as_enum(const char* const strs[]); uint32_t as_uint32_suffix() const { return as_uint32(true); } uint32_t as_uint32(bool si_suffix = false) const; uint64_t as_uint64_suffix() const { return as_uint64(true); } uint64_t as_uint64(bool si_suffix = false) const; int32_t as_int32_suffix() const { return as_int32(true); } int32_t as_int32(bool si_suffix = false) const; int64_t as_int64_suffix() const { return as_int64(true); } int64_t as_int64(bool si_suffix = false) const; int as_int_suffix() const { return as_int(true); } int as_int(bool si_suffix = false) const; long as_long_suffix() const { return as_long(true); } long as_long(bool si_suffix = false) const; double as_double_suffix() const { return as_double(true); } double as_double(bool si_suffix = false) const; }; bool adjust_double_si_suffix(double &res, const char *unit); double conv_double(const char *str, std::string &err, bool si_suffix); int conv_enum(const char* str, std::string& err, const char* const strs[]); template static bool adjust_int_si_suffix(T &res, const char *suffix) { if(*suffix == '\0') return true; if(*(suffix + 1) != '\0') return false; switch(*suffix) { case 'k': res *= (T)1000; break; case 'M': res *= (T)1000000; break; case 'G': res *= (T)1000000000; break; case 'T': res *= (T)1000000000000; break; case 'P': res *= (T)1000000000000000; break; case 'E': res *= (T)1000000000000000000; break; default: return false; } return true; } template static T conv_int(const char *str, std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; long long int res = strtoll(str, &endptr, 0); if(errno) { err.assign(strerror(errno)); return (T)0; } bool invalid = si_suffix ? !adjust_int_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (T)0; } if(res > std::numeric_limits::max() || res < std::numeric_limits::min()) { err.assign("Value out of range"); return (T)0; } return (T)res; } template static T conv_uint(const char *str, std::string &err, bool si_suffix) { char *endptr = 0; errno = 0; while(isspace(*str)) { ++str; } if(*str == '-') { err.assign("Negative value"); return (T)0; } unsigned long long int res = strtoull(str, &endptr, 0); if(errno) { err.assign(strerror(errno)); return (T)0; } bool invalid = si_suffix ? !adjust_int_si_suffix(res, endptr) : *endptr != '\0'; if(invalid) { err.assign("Invalid character"); return (T)0; } if(res > std::numeric_limits::max() || res < std::numeric_limits::min()) { err.assign("Value out of range"); return (T)0; } return (T)res; } template static std::string vec_str(const std::vector &vec) { std::ostringstream os; for(typename std::vector::const_iterator it = vec.begin(); it != vec.end(); ++it) { if(it != vec.begin()) os << ","; os << *it; } return os.str(); } } #endif jellyfish-1.1.11/jellyfish/histo_main_cmdline.hpp0000644015303500042660000001645412151455365017066 00000000000000/***** This code was generated by Yaggo. Do not edit ******/ #ifndef __HISTO_ARGS_HPP__ #define __HISTO_ARGS_HPP__ #include class histo_args { public: uint64_t low_arg; bool low_given; uint64_t high_arg; bool high_given; uint64_t increment_arg; bool increment_given; uint32_t threads_arg; bool threads_given; bool full_flag; const char * output_arg; bool output_given; uint64_t buffer_size_arg; bool buffer_size_given; bool verbose_flag; yaggo::string db_arg; enum { USAGE_OPT = 1000, FULL_HELP_OPT, HELP_OPT }; histo_args() : low_arg(1), low_given(false), high_arg(10000), high_given(false), increment_arg(1), increment_given(false), threads_arg(1), threads_given(false), full_flag(false), output_arg(""), output_given(false), buffer_size_arg(10000000), buffer_size_given(false), verbose_flag(false) { } histo_args(int argc, char* argv[]) : low_arg(1), low_given(false), high_arg(10000), high_given(false), increment_arg(1), increment_given(false), threads_arg(1), threads_given(false), full_flag(false), output_arg(""), output_given(false), buffer_size_arg(10000000), buffer_size_given(false), verbose_flag(false) { parse(argc, argv); } void parse(int argc, char* argv[]) { static struct option long_options[] = { {"low", 1, 0, 'l'}, {"high", 1, 0, 'h'}, {"increment", 1, 0, 'i'}, {"threads", 1, 0, 't'}, {"full", 0, 0, 'f'}, {"output", 1, 0, 'o'}, {"buffer-size", 1, 0, 's'}, {"verbose", 0, 0, 'v'}, {"help", 0, 0, HELP_OPT}, {"full-help", 0, 0, FULL_HELP_OPT}, {"usage", 0, 0, USAGE_OPT}, {"version", 0, 0, 'V'}, {0, 0, 0, 0} }; static const char *short_options = "Vl:h:i:t:fo:s:v"; std::string err; #define CHECK_ERR(type,val,which) if(!err.empty()) { std::cerr << "Invalid " #type " '" << val << "' for [" which "]: " << err << "\n"; exit(1); } while(true) { int index = -1; int c = getopt_long(argc, argv, short_options, long_options, &index); if(c == -1) break; switch(c) { case ':': std::cerr << "Missing required argument for " << (index == -1 ? std::string(1, (char)optopt) : std::string(long_options[index].name)) << std::endl; exit(1); case HELP_OPT: std::cout << usage() << "\n\n" << help() << std::endl; exit(0); case USAGE_OPT: std::cout << usage() << "\nUse --help for more information." << std::endl; exit(0); case 'V': print_version(); exit(0); case '?': std::cerr << "Use --usage or --help for some help\n"; exit(1); case FULL_HELP_OPT: std::cout << usage() << "\n\n" << help() << "\n\n" << hidden() << std::endl; exit(0); case 'l': low_given = true; low_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-l, --low=uint64") break; case 'h': high_given = true; high_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-h, --high=uint64") break; case 'i': increment_given = true; increment_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint64_t, optarg, "-i, --increment=uint64") break; case 't': threads_given = true; threads_arg = yaggo::conv_uint((const char *)optarg, err, false); CHECK_ERR(uint32_t, optarg, "-t, --threads=uint32") break; case 'f': full_flag = true; break; case 'o': output_given = true; output_arg = optarg; break; case 's': buffer_size_given = true; buffer_size_arg = yaggo::conv_uint((const char *)optarg, err, true); CHECK_ERR(uint64_t, optarg, "-s, --buffer-size=Buffer length") break; case 'v': verbose_flag = true; break; } } // Parse arguments if(argc - optind != 1) error("Requires exactly 1 argument."); db_arg = yaggo::string(argv[optind]); ++optind; } #define histo_args_USAGE "Usage: jellyfish histo [options] db:path" const char * usage() const { return histo_args_USAGE; } void error(const char *msg) { std::cerr << "Error: " << msg << "\n" << usage() << "\nUse --help for more information" << std::endl; exit(1); } #define histo_args_HELP "Create an histogram of k-mer occurrences\n\nCreate an histogram with the number of k-mers having a given\n" \ "count. In bucket 'i' are tallied the k-mers which have a count 'c'\n" \ "satisfying 'low+i*inc <= c < low+(i+1)*inc'. Buckets in the output are\n" \ "labeled by the low end point (low+i*inc).\n" \ "\n" \ "The last bucket in the output behaves as a catchall: it tallies all\n" \ "k-mers with a count greater or equal to the low end point of this\n" \ "bucket.\n\n" \ "Options (default value in (), *required):\n" \ " -l, --low=uint64 Low count value of histogram (1)\n" \ " -h, --high=uint64 High count value of histogram (10000)\n" \ " -i, --increment=uint64 Increment value for buckets (1)\n" \ " -t, --threads=uint32 Number of threads (1)\n" \ " -f, --full Full histo. Don't skip count 0. (false)\n" \ " -o, --output=string Output file\n" \ " -v, --verbose Output information (false)\n" \ " --usage Usage\n" \ " --help This message\n" \ " --full-help Detailed help\n" \ " -V, --version Version" const char * help() const { return histo_args_HELP; } #define histo_args_HIDDEN "Hidden options:\n" \ " -s, --buffer-size=Buffer length Length in bytes of input buffer (10000000)" const char * hidden() const { return histo_args_HIDDEN; } void print_version(std::ostream &os = std::cout) const { #ifndef PACKAGE_VERSION #define PACKAGE_VERSION "0.0.0" #endif os << PACKAGE_VERSION << "\n"; } void dump(std::ostream &os = std::cout) { os << "low_given:" << low_given << " low_arg:" << low_arg << "\n"; os << "high_given:" << high_given << " high_arg:" << high_arg << "\n"; os << "increment_given:" << increment_given << " increment_arg:" << increment_arg << "\n"; os << "threads_given:" << threads_given << " threads_arg:" << threads_arg << "\n"; os << "full_flag:" << full_flag << "\n"; os << "output_given:" << output_given << " output_arg:" << output_arg << "\n"; os << "buffer_size_given:" << buffer_size_given << " buffer_size_arg:" << buffer_size_arg << "\n"; os << "verbose_flag:" << verbose_flag << "\n"; os << "db_arg:" << db_arg << "\n"; } private: }; #endif // __HISTO_ARGS_HPP__" jellyfish-1.1.11/jellyfish/token_ring.hpp0000644015303500042660000000366712151455365015402 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_TOKEN_RING_HPP__ #define __JELLYFISH_TOKEN_RING_HPP__ template class token_ring { public: class token { token *next; bool val; cond_t cond; token(token *_next, bool _val) : next(_next), val(_val) {} friend class token_ring; public: bool is_active() { return val; } void wait() { cond.lock(); while(!val) { cond.wait(); } cond.unlock(); } void pass() { next->cond.lock(); val = false; next->val = true; next->cond.signal(); next->cond.unlock(); } }; private: token *first, *last; cond_t cond; public: token_ring() : first(0), last(0) { } ~token_ring() { if(!first) return; while(first != last) { token *del = first; first = first->next; delete del; } delete last; } void reset() { if(!first) return; token *c = first; while(c != last) { c->val = false; c = c->next; } last->val = false; first->val = true; } token *new_token() { token *nt = new token(first, first == 0); if(first) { last->next = nt; last = nt; } else { first = last = nt; nt->next = nt; } return nt; } }; #endif jellyfish-1.1.11/jellyfish/histo_fastq_main.cc0000644015303500042660000000430212151455365016354 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include int histo_fastq_main(int argc, char *argv[]) { histo_fastq_main_args args(argc, argv); if(args.low_arg < 0.0) args.error("Low count (option --low,-l) must be >= 0.0"); fastq_storage_t *hash = raw_fastq_dumper_t::read(args.db_arg); fastq_storage_t::iterator it = hash->iterator_all(); float low_arg = args.low_arg; float increment_arg = args.increment_arg; float high_arg = args.high_arg; const float base = low_arg > 0.0 ? (increment_arg >= low_arg ? 0.0 : low_arg - increment_arg) : 0.0; const float ceil = high_arg + increment_arg; const int nb_buckets = (int)ceilf((ceil + increment_arg - base) / increment_arg); const int last_bucket = nb_buckets - 1; std::vector histogram(nb_buckets, 0UL); while(it.next()) { int i = (int)roundf((it.get_val().to_float() - base) / increment_arg); if(i < 0) { histogram[0]++; } else if(i >= last_bucket) { histogram[last_bucket]++; } else { histogram[i]++; } } for(int i = 0; i < nb_buckets; i++) if(histogram[i] > 0.0 || args.full_flag) std::cout << (base + (float)i * increment_arg) << " " << histogram[i] << "\n"; std::cout << std::flush; return 0; } jellyfish-1.1.11/jellyfish/parse_qual_dna.hpp0000644015303500042660000001130612151455365016206 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_PARSE_QUAL_DNA_HPP__ #define __JELLYFISH_PARSE_QUAL_DNA_HPP__ #include #include #include #include #include #include #include #include namespace jellyfish { class parse_qual_dna : public double_fifo_input { typedef std::vector fary_t; uint_t mer_len; size_t buffer_size; const fary_t files; fary_t::const_iterator current_file; bool have_seam; allocators::mmap buffer_data; char *seam; const char quality_start; const char min_q; bool canonical; seq_qual_parser *fparser; public: /* Action to take for a given letter in fasta file: * A, C, G, T: map to 0, 1, 2, 3. Append to kmer * Other nucleic acid code: map to -1. reset kmer * '\n': map to -2. ignore * Other ASCII: map to -3. Skip to next line */ parse_qual_dna(const fary_t &_files, uint_t _mer_len, unsigned int nb_buffers, size_t _buffer_size, const char _qs, const char _min_q); ~parse_qual_dna() { } void set_canonical(bool v = true) { canonical = v; } virtual void fill(); class thread { parse_qual_dna *parser; bucket_t *sequence; const uint_t mer_len, lshift; uint64_t kmer, rkmer; const uint64_t masq; uint_t cmlen; const bool canonical; const char q_thresh; uint64_t distinct, total; typedef void (*error_reporter)(std::string& err); error_reporter error_report; public: thread(parse_qual_dna *_parser, const char _qs, const char _min_q) : parser(_parser), sequence(0), mer_len(_parser->mer_len), lshift(2 * (mer_len - 1)), kmer(0), rkmer(0), masq((1UL << (2 * mer_len)) - 1), cmlen(0), canonical(parser->canonical), q_thresh(_qs + _min_q), distinct(0), total(0), error_report(0) { } uint64_t get_distinct() const { return distinct; } uint64_t get_total() const { return total; } template void parse(T &counter) { cmlen = kmer = rkmer = 0; while((sequence = parser->next())) { const char *start = sequence->start; const char * const end = sequence->end; while(start < end) { uint_t c = dna_codes[(uint_t)*start++]; const char q = *start++; if(q < q_thresh) c = CODE_RESET; switch(c) { case CODE_IGNORE: break; case CODE_COMMENT: report_bad_input(*(start-1)); // Fall through case CODE_RESET: cmlen = kmer = rkmer = 0; break; default: kmer = ((kmer << 2) & masq) | c; rkmer = (rkmer >> 2) | ((0x3 - c) << lshift); if(++cmlen >= mer_len) { cmlen = mer_len; typename T::val_type oval; if(canonical) counter->add(kmer < rkmer ? kmer : rkmer, 1, &oval); else counter->add(kmer, 1, &oval); distinct += !oval; ++total; } } } // Buffer exhausted. Get a new one cmlen = kmer = rkmer = 0; parser->release(sequence); } } void set_error_reporter(error_reporter e) { error_report = e; } private: void report_bad_input(char c) { if(!error_report) return; std::string error("Bad input: "); error += c; error_report(error); } }; friend class thread; thread new_thread() { return thread(this, quality_start, min_q); } }; } #endif jellyfish-1.1.11/jellyfish/locks_pthread.hpp0000644015303500042660000001003212151455365016045 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_LOCKS_PTHREAD_HPP__ #define __JELLYFISH_LOCKS_PTHREAD_HPP__ #include namespace locks { namespace pthread { class cond { pthread_mutex_t _mutex; pthread_cond_t _cond; public: cond() { pthread_mutex_init(&_mutex, NULL); pthread_cond_init(&_cond, NULL); } ~cond() { pthread_cond_destroy(&_cond); pthread_mutex_destroy(&_mutex); } inline void lock() { pthread_mutex_lock(&_mutex); } inline void unlock() { pthread_mutex_unlock(&_mutex); } inline void wait() { pthread_cond_wait(&_cond, &_mutex); } inline void signal() { pthread_cond_signal(&_cond); } inline void broadcast() { pthread_cond_broadcast(&_cond); } }; class mutex { pthread_mutex_t _mutex; public: mutex() { pthread_mutex_init(&_mutex, NULL); } ~mutex() { pthread_mutex_destroy(&_mutex); } inline void lock() { pthread_mutex_lock(&_mutex); } inline void unlock() { pthread_mutex_unlock(&_mutex); } inline bool try_lock() { return !pthread_mutex_trylock(&_mutex); } }; class Semaphore { int _value, _wakeups; cond _cv; public: explicit Semaphore(int value) : _value(value), _wakeups(0) { // nothing to do } ~Semaphore() {} inline void wait() { _cv.lock(); _value--; if (_value < 0) { do { _cv.wait(); } while(_wakeups < 1); _wakeups--; } _cv.unlock(); } inline void signal() { _cv.lock(); _value++; if(_value <= 0) { _wakeups++; _cv.signal(); } _cv.unlock(); } }; #if defined(_POSIX_BARRIERS) && (_POSIX_BARRIERS - 20012L) >= 0 class barrier { pthread_barrier_t _barrier; public: explicit barrier(unsigned count) { pthread_barrier_init(&_barrier, NULL, count); } ~barrier() { pthread_barrier_destroy(&_barrier); } inline int wait() { return pthread_barrier_wait(&_barrier); } }; #else # ifndef PTHREAD_BARRIER_SERIAL_THREAD # define PTHREAD_BARRIER_SERIAL_THREAD 1 # endif class barrier { int count; // required # of threads int current; // current # of threads that have passed thru mutex barlock; // protect current Semaphore barrier1; // implement the barrier Semaphore barrier2; public: explicit barrier(unsigned cnt) : count(cnt), current(0), barrier1(0), barrier2(0) { } ~barrier() {} inline int wait() { int ret = 0; barlock.lock(); current += 1; if(current == count) { ret = PTHREAD_BARRIER_SERIAL_THREAD; for(int i=0; i. */ #include #include #include #include #include #ifndef random // Implement random from the old rand() function. Don't trust low bit // to be as random, so call rand twice and reverse one of the result. long random() { return rand() ^ reverse_bits((uint32_t)rand()); } #endif void SquareBinaryMatrix::init_random() { uint64_t _mask = mask(); int i, j; int lrm = floorLog2((unsigned long)RAND_MAX); for(i = 0; i < size; i++) { for(j = 0; j < size; j += lrm) columns[i] ^= (uint64_t)random() << j; columns[i] &= _mask; } } SquareBinaryMatrix SquareBinaryMatrix::init_random_inverse() { while(true) { init_random(); try { return inverse(); } catch(SquareBinaryMatrix::SingularMatrix &e) { } } } SquareBinaryMatrix SquareBinaryMatrix::transpose() const { SquareBinaryMatrix res(size); uint64_t *a = res.columns, *b; int i, j; for(i = size - 1; i >= 0; i--, a++) for(j = size - 1, b = columns; j >= 0; j--, b++) *a |= ((*b >> i) & 0x1) << j; return res; } SquareBinaryMatrix SquareBinaryMatrix::operator*(const SquareBinaryMatrix &other) const { int i; SquareBinaryMatrix res(size); if(size != other.get_size()) eraise(MismatchingSize) << "Multiplication operator dimension mismatch:" << size << "x" << size << " != " << other.get_size() << "x" << other.get_size(); for(i = 0; i < size; i++) { res[i] = this->times(other[i]); } return res; } SquareBinaryMatrix SquareBinaryMatrix::inverse() const { SquareBinaryMatrix pivot(*this); SquareBinaryMatrix res(size); int i, j; res.init_identity(); // forward elimination for(i = 0; i < size; i++) { if(!((pivot.columns[i] >> (size - i - 1)) & (uint64_t)0x1)) { for(j = i + 1; j < size; j++) if((pivot.columns[j] >> (size - i - 1)) & (uint64_t)0x1) break; if(j >= size) eraise(SingularMatrix) << "Matrix is singular"; pivot.columns[i] ^= pivot.columns[j]; res.columns[i] ^= res.columns[j]; } for(j = i+1; j < size; j++) { if((pivot.columns[j] >> (size - i - 1)) & (uint64_t)0x1) { pivot.columns[j] ^= pivot.columns[i]; res.columns[j] ^= res.columns[i]; } } } // backward elimination for(i = size - 1; i > 0; i--) { for(j = i - 1; j >= 0; j--) { if((pivot.columns[j] >> (size - i - 1)) & (uint64_t)0x1) { pivot.columns[j] ^= pivot.columns[i]; res.columns[j] ^= res.columns[i]; } } } return res; } void SquareBinaryMatrix::print(std::ostream *os) const { int i, j; uint64_t a, *v; *os << size << "x" << size << std::endl; for(i = 0, a = msb(); i < size; i++, a >>= 1) { for(j = 0, v = columns; j < size; j++, v++) *os << ((*v & a) ? 1 : 0); *os << std::endl; } } std::string SquareBinaryMatrix::str() const { std::ostringstream os; print(&os); return os.str(); } void SquareBinaryMatrix::dump(std::ostream *os) const { os->write((char *)&size, sizeof(size)); os->write((char *)columns, sizeof(uint64_t) * size); } void SquareBinaryMatrix::load(std::istream *is) { is->read((char *)&size, sizeof(size)); alloc_columns(); is->read((char *)columns, sizeof(uint64_t) * size); } size_t SquareBinaryMatrix::read(const char *map) { int nsize = 0; memcpy(&nsize, map, sizeof(nsize)); if(nsize <= 0 || nsize > 64) eraise(MismatchingSize) << "Invalid matrix size '" << nsize << "'. Must be between 1 and 64"; size = nsize; alloc_columns(); memcpy(columns, map + sizeof(size), sizeof(uint64_t) * size); return sizeof(size) + sizeof(uint64_t) * size; } void SquareBinaryMatrix::print_vector(std::ostream *os, uint64_t v, bool vertical) const { uint64_t a; for(a = msb(); a; a >>= 1) *os << ((v & a) ? 1 : 0) << (vertical ? "\n" : ""); } std::string SquareBinaryMatrix::str_vector(uint64_t v, bool vertical) const { std::ostringstream os; print_vector(&os, v, vertical); return os.str(); } #ifdef HAVE_SSE uint64_t SquareBinaryMatrix::times_sse(uint64_t v) const { #define FFs ((uint64_t)-1) static const uint64_t smear[8] asm("smear") __attribute__ ((aligned(16),used)) = {0, 0, 0, FFs, FFs, 0, FFs, FFs}; uint64_t *c = columns + (size - 2); uint64_t res; // How do I make sure that gcc does not use the smear register for something else? // Is the & constraint for res enough? __asm__ __volatile__ ("pxor %%xmm0, %%xmm0\n" "times_sse_loop%=:\n\t" "movq %2, %0\n\t" "andq $3, %0\n\t" "shlq $4, %0\n\t" "movdqa (%5,%0), %%xmm1\n\t" "pand (%1), %%xmm1\n\t" "pxor %%xmm1, %%xmm0\n\t" "subq $0x10, %1\n\t" "shrq $2, %2\n\t" "movq %2, %0\n\t" "andq $3, %0\n\t" "shlq $4, %0\n\t" "movdqa (%5,%0), %%xmm1\n\t" "pand (%1), %%xmm1\n\t" "pxor %%xmm1, %%xmm0\n\t" "subq $0x10, %1\n\t" "shrq $2, %2\n\t" "jnz times_sse_loop%=\n\t" "movd %%xmm0, %0\n\t" "psrldq $8, %%xmm0\n\t" "movd %%xmm0, %1\n\t" "xorq %1, %0\n\t" : "=&r" (res), "=r" (c), "=r" (v) : "1" (c), "2" (v), "r" (smear) : "xmm0", "xmm1"); return res; } #else uint64_t SquareBinaryMatrix::times_sse(uint64_t v) const { return 0; } #endif uint64_t SquareBinaryMatrix::times_unrolled(uint64_t v) const { uint64_t res = 0, *c = columns+(size-1); switch(size) { case 64: res ^= (-(v & 1)) & *c--; v >>= 1; case 63: res ^= (-(v & 1)) & *c--; v >>= 1; case 62: res ^= (-(v & 1)) & *c--; v >>= 1; case 61: res ^= (-(v & 1)) & *c--; v >>= 1; case 60: res ^= (-(v & 1)) & *c--; v >>= 1; case 59: res ^= (-(v & 1)) & *c--; v >>= 1; case 58: res ^= (-(v & 1)) & *c--; v >>= 1; case 57: res ^= (-(v & 1)) & *c--; v >>= 1; case 56: res ^= (-(v & 1)) & *c--; v >>= 1; case 55: res ^= (-(v & 1)) & *c--; v >>= 1; case 54: res ^= (-(v & 1)) & *c--; v >>= 1; case 53: res ^= (-(v & 1)) & *c--; v >>= 1; case 52: res ^= (-(v & 1)) & *c--; v >>= 1; case 51: res ^= (-(v & 1)) & *c--; v >>= 1; case 50: res ^= (-(v & 1)) & *c--; v >>= 1; case 49: res ^= (-(v & 1)) & *c--; v >>= 1; case 48: res ^= (-(v & 1)) & *c--; v >>= 1; case 47: res ^= (-(v & 1)) & *c--; v >>= 1; case 46: res ^= (-(v & 1)) & *c--; v >>= 1; case 45: res ^= (-(v & 1)) & *c--; v >>= 1; case 44: res ^= (-(v & 1)) & *c--; v >>= 1; case 43: res ^= (-(v & 1)) & *c--; v >>= 1; case 42: res ^= (-(v & 1)) & *c--; v >>= 1; case 41: res ^= (-(v & 1)) & *c--; v >>= 1; case 40: res ^= (-(v & 1)) & *c--; v >>= 1; case 39: res ^= (-(v & 1)) & *c--; v >>= 1; case 38: res ^= (-(v & 1)) & *c--; v >>= 1; case 37: res ^= (-(v & 1)) & *c--; v >>= 1; case 36: res ^= (-(v & 1)) & *c--; v >>= 1; case 35: res ^= (-(v & 1)) & *c--; v >>= 1; case 34: res ^= (-(v & 1)) & *c--; v >>= 1; case 33: res ^= (-(v & 1)) & *c--; v >>= 1; case 32: res ^= (-(v & 1)) & *c--; v >>= 1; case 31: res ^= (-(v & 1)) & *c--; v >>= 1; case 30: res ^= (-(v & 1)) & *c--; v >>= 1; case 29: res ^= (-(v & 1)) & *c--; v >>= 1; case 28: res ^= (-(v & 1)) & *c--; v >>= 1; case 27: res ^= (-(v & 1)) & *c--; v >>= 1; case 26: res ^= (-(v & 1)) & *c--; v >>= 1; case 25: res ^= (-(v & 1)) & *c--; v >>= 1; case 24: res ^= (-(v & 1)) & *c--; v >>= 1; case 23: res ^= (-(v & 1)) & *c--; v >>= 1; case 22: res ^= (-(v & 1)) & *c--; v >>= 1; case 21: res ^= (-(v & 1)) & *c--; v >>= 1; case 20: res ^= (-(v & 1)) & *c--; v >>= 1; case 19: res ^= (-(v & 1)) & *c--; v >>= 1; case 18: res ^= (-(v & 1)) & *c--; v >>= 1; case 17: res ^= (-(v & 1)) & *c--; v >>= 1; case 16: res ^= (-(v & 1)) & *c--; v >>= 1; case 15: res ^= (-(v & 1)) & *c--; v >>= 1; case 14: res ^= (-(v & 1)) & *c--; v >>= 1; case 13: res ^= (-(v & 1)) & *c--; v >>= 1; case 12: res ^= (-(v & 1)) & *c--; v >>= 1; case 11: res ^= (-(v & 1)) & *c--; v >>= 1; case 10: res ^= (-(v & 1)) & *c--; v >>= 1; case 9: res ^= (-(v & 1)) & *c--; v >>= 1; case 8: res ^= (-(v & 1)) & *c--; v >>= 1; case 7: res ^= (-(v & 1)) & *c--; v >>= 1; case 6: res ^= (-(v & 1)) & *c--; v >>= 1; case 5: res ^= (-(v & 1)) & *c--; v >>= 1; case 4: res ^= (-(v & 1)) & *c--; v >>= 1; case 3: res ^= (-(v & 1)) & *c--; v >>= 1; case 2: res ^= (-(v & 1)) & *c--; v >>= 1; case 1: res ^= (-(v & 1)) & *c; } return res; } jellyfish-1.1.11/jellyfish/cite.cc0000644015303500042660000000461612200443056013745 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ const char *cite = "A fast, lock-free approach for efficient parallel counting of occurrences of k-mers\n" "Guillaume Marcais; Carl Kingsford\n" "Bioinformatics (2011) 27(6): 764-770 first published online January 7, 2011 doi:10.1093/bioinformatics/btr011\n"; const char *url = "http://www.cbcb.umd.edu/software/jellyfish\n" "http://bioinformatics.oxfordjournals.org/content/early/2011/01/07/bioinformatics.btr011"; const char *bibtex = "@article{Jellyfish2010,\n" " author = {Mar\\c{c}ais, Guillaume and Kingsford, Carl},\n" " title = {A fast, lock-free approach for efficient parallel counting of occurrences of k-mers},\n" " volume = {27},\n" " number = {6},\n" " pages = {764-770},\n" " year = {2011},\n" " doi = {10.1093/bioinformatics/btr011},\n" " URL = {http://bioinformatics.oxfordjournals.org/content/27/6/764.abstract},\n" " eprint = {http://bioinformatics.oxfordjournals.org/content/27/6/764.full.pdf+html},\n" " journal = {Bioinformatics}\n" "}"; #include #include #include #include #include #include #include int cite_main(int argc, char *argv[]) { cite_cmdline args(argc, argv); ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) die << "Can't open output file '" << args.output_arg << "'" << err::no; if(args.bibtex_flag) { out << bibtex << std::endl; } else { out << "This software has been published. If you use it for your research, cite:\n\n" << cite << "\n\n" << url << std::endl; } out.close(); return 0; } jellyfish-1.1.11/jellyfish/mapped_file.hpp0000644015303500042660000001137112151455365015477 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH_MAPPED_FILE_HPP__ #define __JELLYFISH_MAPPED_FILE_HPP__ #include #include #include #include #include #include #include #include #include #include #include #include class mapped_file { protected: std::string _path; bool _unmap; char *_base, *_end; size_t _length; void map(const char *filename) { int fd = open(filename, O_RDONLY); struct stat stat; if(fd < 0) eraise(ErrorMMap) << "Can't open file '" << filename << "'" << err::no; if(fstat(fd, &stat) < 0) eraise(ErrorMMap) << "Can't stat file '" << filename << "'" << err::no; _length = stat.st_size; _base = (char *)mmap(NULL, _length, PROT_READ, MAP_PRIVATE, fd, 0); if(_base == MAP_FAILED) eraise(ErrorMMap) << "Can't mmap file '" << filename << "'" << err::no; close(fd); _end = _base + _length; } public: define_error_class(ErrorMMap); mapped_file(char *__base, size_t __length) : _unmap(false), _base(__base), _end(__base + __length), _length(__length) {} explicit mapped_file(const char *filename) : _path(filename), _unmap(false) { map(filename); } mapped_file(const mapped_file &mf) : _path(mf.path()), _unmap(false), _base(mf._base), _end(mf._end), _length(mf._length) {} ~mapped_file() { if(_unmap) unmap(); } void unmap() { if(!_base) return; munmap(_base, _length); _base = 0; _length = 0; } char *base() const { return _base; } char *end() const { return _end; } size_t length() const { return _length; } std::string path() const { return _path; } bool will_unmap(bool value = true) { bool ovalue = _unmap; _unmap = value; return ovalue; } // No error checking here. Should I throw something? const mapped_file & will_need() const { madvise(_base, _length, MADV_WILLNEED); return *this; } const mapped_file & sequential() const { madvise(_base, _length, MADV_SEQUENTIAL); return *this; } const mapped_file & random() const { madvise(_base, _length, MADV_RANDOM); return *this; } const mapped_file & lock() const { if(mlock(_base, _length) < 0) eraise(ErrorMMap) << "Can't lock map in memory" << err::no; return *this; } // Do not optimize. Side effect is that every page is accessed and should now be in cache. // The flagg __attribute__((optimize(0))) does not compile, so return a useless char argument char load() const; }; class mapped_files_t : public std::vector { public: mapped_files_t(int nb_files, char *argv[]) { for(int j = 0; j < nb_files; j++) push_back(mapped_file(argv[j])); } mapped_files_t(int nb_files, char *argv[], bool sequential) { for(int j = 0; j < nb_files; j++) { push_back(mapped_file(argv[j])); if(sequential) end()->sequential(); } } }; // File mapped on demand. class lazy_mapped_file_t : public mapped_file { std::string _path; volatile bool done; volatile long used_counter; public: explicit lazy_mapped_file_t(const char *path) : mapped_file((char *)0, (size_t)0), _path(path), done(false), used_counter(0) {} void map() { used_counter = 1; done = false; mapped_file::map(_path.c_str()); } void unmap() { done = true; dec(); } void inc() { atomic::gcc::fetch_add(&used_counter, (long)1); } void dec() { long val = atomic::gcc::add_fetch(&used_counter, (long)-1); if(done && val == 0) mapped_file::unmap(); } }; class lazy_mapped_files_t : public std::vector { public: lazy_mapped_files_t(int nb_files, char *argv[]) { for(int j = 0; j < nb_files; j++) push_back(lazy_mapped_file_t(argv[j])); } lazy_mapped_files_t(int nb_files, char *argv[], bool sequential) { for(int j = 0; j < nb_files; j++) { push_back(lazy_mapped_file_t(argv[j])); if(sequential) end()->sequential(); } } }; #endif jellyfish-1.1.11/jellyfish/read_parser.hpp0000644015303500042660000000446212151455365015524 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #ifndef __JELLYFISH__READ_PARSER_HPP__ #define __JELLYFISH__READ_PARSER_HPP__ #include #include namespace jellyfish { class read_parser : public file_parser { unsigned long usage; public: struct read_t { const char *seq_s, *seq_e, *header, *qual_s, *qual_e; size_t hlen; }; struct reads_t { static const int max_nb_reads = 100; int nb_reads; read_t reads[max_nb_reads]; read_parser *file; void unlink() { if(file->unlink() == 0) delete file; } void link() { file->link(); } }; read_parser(int fd, const char *path, const char *str, size_t len) : file_parser(fd, path, str, len), usage(0) {} virtual ~read_parser() {} static read_parser *new_parser(const char *path); virtual bool next_reads(reads_t *rs) = 0; unsigned long unlink() { return atomic::gcc::add_fetch(&usage, (unsigned long)-1); } unsigned long link() { return atomic::gcc::add_fetch(&usage, (unsigned long)1); } }; class fasta_read_parser : public read_parser { public: fasta_read_parser(int fd, const char *path, const char *str, size_t len) : read_parser(fd, path, str, len) {} virtual ~fasta_read_parser() {} virtual bool next_reads(reads_t *rs); }; class fastq_read_parser : public read_parser { public: fastq_read_parser(int fd, const char *path, const char *str, size_t len) : read_parser(fd, path, str, len) {} virtual ~fastq_read_parser() {} virtual bool next_reads(reads_t *rs); }; } #endif jellyfish-1.1.11/jellyfish/dna_codes.cc0000644015303500042660000000172612151455365014752 00000000000000#include #define R -1 #define I -2 #define O -3 #define A 0 #define C 1 #define G 2 #define T 3 const char jellyfish::dna_codes[256] = { O, O, O, O, O, O, O, O, O, O, I, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, R, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, A, R, C, R, O, O, G, R, O, O, R, O, R, R, O, O, O, R, R, T, O, R, R, R, R, O, O, O, O, O, O, O, A, R, C, R, O, O, G, R, O, O, R, O, R, R, O, O, O, R, R, T, O, R, R, R, R, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O }; jellyfish-1.1.11/jellyfish/test_double_fifo_input.cc0000644015303500042660000000410112151455365017554 00000000000000/* This file is part of Jellyfish. Jellyfish 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 3 of the License, or (at your option) any later version. Jellyfish 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 Jellyfish. If not, see . */ #include #include #include #include #include class display_kmer { int _k; unsigned long count; public: typedef unsigned long val_type; explicit display_kmer(int k) : _k(k), count(0) {} void add(uint64_t mer, int i, val_type *oval = 0) { ++count; } void inc(uint64_t mer) { // char mer_str[_k+1]; // jellyfish::parse_dna::mer_binary_to_string(mer, _k, mer_str); // std::cout << mer_str << std::endl; ++count; } display_kmer *operator->() { return this; } unsigned long get_count() { return count; } }; class parser : public thread_exec { jellyfish::parse_dna _parser; unsigned long count; public: parser(int argc, const char *argv[]) : _parser(argv, argv + argc, 25, 100, 1024*10), count(0) { } void start(int id) { jellyfish::parse_dna::thread tparse = _parser.new_thread(); display_kmer display(25); tparse.parse(display); atomic::gcc::fetch_add(&count, display.get_count()); } unsigned long get_count() { return count; } }; int main(int argc, const char *argv[]) { show_backtrace(); if(argc != 3) die << "Need the number of threads and file name"; parser parse(argc - 2, argv + 2); parse.exec_join(atoi(argv[1])); std::cout << "Get count " << parse.get_count() << std::endl; return 0; } jellyfish-1.1.11/Makefile.in0000644015303500042660000024513212200542305012563 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = bin/jellyfish$(EXEEXT) check_PROGRAMS = bin/generate_sequence$(EXEEXT) \ bin/test_double_fifo_input$(EXEEXT) \ bin/test_read_parser$(EXEEXT) bin/test_all$(EXEEXT) DIST_COMMON = README $(am__configure_deps) $(library_include_HEADERS) \ $(noinst_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(srcdir)/gtest.mk \ $(srcdir)/jellyfish-1.1.pc.in $(top_srcdir)/configure \ $(top_srcdir)/tests/compat.sh.in config.guess config.sub \ depcomp install-sh ltmain.sh missing subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = tests/compat.sh jellyfish-1.1.pc CONFIG_CLEAN_VPATH_FILES = ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgtest_a_AR = $(AR) $(ARFLAGS) libgtest_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libgtest_a_OBJECTS = \ unit_tests/gtest/src/libgtest_a-gtest-all.$(OBJEXT) libgtest_a_OBJECTS = $(am_libgtest_a_OBJECTS) libgtest_main_a_AR = $(AR) $(ARFLAGS) libgtest_main_a_DEPENDENCIES = libgtest.a am_libgtest_main_a_OBJECTS = \ unit_tests/gtest/src/libgtest_main_a-gtest_main.$(OBJEXT) libgtest_main_a_OBJECTS = $(am_libgtest_main_a_OBJECTS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(library_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libjellyfish_1_1_la_LIBADD = am__objects_1 = jellyfish/square_binary_matrix.lo jellyfish/err.lo \ jellyfish/misc.lo jellyfish/storage.lo \ jellyfish/thread_exec.lo jellyfish/time.lo \ jellyfish/file_parser.lo jellyfish/read_parser.lo \ jellyfish/parse_read.lo jellyfish/half.lo \ jellyfish/mapped_file.lo jellyfish/parse_dna.lo \ jellyfish/parse_quake.lo jellyfish/parse_qual_dna.lo \ jellyfish/sequence_parser.lo jellyfish/seq_qual_parser.lo \ jellyfish/backtrace.lo jellyfish/floats.lo jellyfish/dbg.lo \ jellyfish/allocators_mmap.lo jellyfish/dna_codes.lo am_libjellyfish_1_1_la_OBJECTS = $(am__objects_1) libjellyfish_1_1_la_OBJECTS = $(am_libjellyfish_1_1_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libjellyfish_1_1_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libjellyfish_1_1_la_LDFLAGS) \ $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_bin_generate_sequence_OBJECTS = \ jellyfish/generate_sequence.$(OBJEXT) \ jellyfish/mersenne.$(OBJEXT) bin_generate_sequence_OBJECTS = $(am_bin_generate_sequence_OBJECTS) bin_generate_sequence_LDADD = $(LDADD) bin_generate_sequence_DEPENDENCIES = libjellyfish-1.1.la am_bin_jellyfish_OBJECTS = jellyfish/jellyfish.$(OBJEXT) \ jellyfish/stats_main.$(OBJEXT) jellyfish/hash_merge.$(OBJEXT) \ jellyfish/mer_counter.$(OBJEXT) jellyfish/histo_main.$(OBJEXT) \ jellyfish/dump_main.$(OBJEXT) jellyfish/query_main.$(OBJEXT) \ jellyfish/dump_fastq_main.$(OBJEXT) \ jellyfish/histo_fastq_main.$(OBJEXT) jellyfish/cite.$(OBJEXT) \ jellyfish/hash_fastq_merge.$(OBJEXT) jellyfish/yaggo.$(OBJEXT) bin_jellyfish_OBJECTS = $(am_bin_jellyfish_OBJECTS) bin_jellyfish_LDADD = $(LDADD) bin_jellyfish_DEPENDENCIES = libjellyfish-1.1.la bin_jellyfish_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_jellyfish_LDFLAGS) $(LDFLAGS) \ -o $@ am_bin_test_all_OBJECTS = \ unit_tests/bin_test_all-test_offsets_key_value.$(OBJEXT) \ unit_tests/bin_test_all-test_simple_circular_buffer.$(OBJEXT) \ unit_tests/bin_test_all-test_square_binary_matrix.$(OBJEXT) bin_test_all_OBJECTS = $(am_bin_test_all_OBJECTS) bin_test_all_DEPENDENCIES = libgtest_main.a libgtest.a $(LDADD) bin_test_all_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(bin_test_all_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_bin_test_double_fifo_input_OBJECTS = \ jellyfish/test_double_fifo_input.$(OBJEXT) bin_test_double_fifo_input_OBJECTS = \ $(am_bin_test_double_fifo_input_OBJECTS) bin_test_double_fifo_input_LDADD = $(LDADD) bin_test_double_fifo_input_DEPENDENCIES = libjellyfish-1.1.la am_bin_test_read_parser_OBJECTS = \ jellyfish/test_read_parser.$(OBJEXT) bin_test_read_parser_OBJECTS = $(am_bin_test_read_parser_OBJECTS) bin_test_read_parser_LDADD = $(LDADD) bin_test_read_parser_DEPENDENCIES = libjellyfish-1.1.la DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgtest_a_SOURCES) $(libgtest_main_a_SOURCES) \ $(libjellyfish_1_1_la_SOURCES) \ $(bin_generate_sequence_SOURCES) $(bin_jellyfish_SOURCES) \ $(bin_test_all_SOURCES) $(bin_test_double_fifo_input_SOURCES) \ $(bin_test_read_parser_SOURCES) DIST_SOURCES = $(libgtest_a_SOURCES) $(libgtest_main_a_SOURCES) \ $(libjellyfish_1_1_la_SOURCES) \ $(bin_generate_sequence_SOURCES) $(bin_jellyfish_SOURCES) \ $(bin_test_all_SOURCES) $(bin_test_double_fifo_input_SOURCES) \ $(bin_test_read_parser_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) DATA = $(pkgconfig_DATA) HEADERS = $(library_include_HEADERS) $(noinst_HEADERS) ETAGS = etags CTAGS = ctags # If stdout is a non-dumb tty, use colors. If test -t is not supported, # then this fails; a conservative approach. Of course do not redirect # stdout here, just stderr. am__tty_colors = \ red=; grn=; lgn=; blu=; std=; \ test "X$(AM_COLOR_TESTS)" != Xno \ && test "X$$TERM" != Xdumb \ && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ && { \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ std=''; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.sh.log=.log) SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MD5 = @MD5@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STATIC_FLAGS = @STATIC_FLAGS@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = doc/jellyfish.pdf doc/jellyfish.man README LICENSE \ HalfLICENSE jellyfish/cite_cmdline.hpp \ jellyfish/query_cmdline.hpp jellyfish/hash_merge_cmdline.hpp \ jellyfish/histo_main_cmdline.hpp \ jellyfish/stats_main_cmdline.hpp \ jellyfish/histo_fastq_main_cmdline.hpp \ jellyfish/dump_fastq_main_cmdline.hpp \ jellyfish/count_main_cmdline.hpp \ jellyfish/hash_fastq_merge_cmdline.hpp \ jellyfish/dump_main_cmdline.hpp \ jellyfish/double_fifo_input.hpp \ jellyfish/simple_growing_array.hpp jellyfish/backtrace.hpp \ jellyfish/noop_dumper.hpp jellyfish/yaggo.hpp \ jellyfish/fstream_default.hpp jellyfish/randomc.h \ jellyfish/generate_sequence_cmdline.hpp $(TESTS) $(GTEST_SRC) man1_MANS = doc/jellyfish.man pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = jellyfish-1.1.pc AM_LDFLAGS = -lpthread AM_CPPFLAGS = -Wall -Wnon-virtual-dtor -I$(top_srcdir) AM_CXXFLAGS = -g -O3 LDADD = libjellyfish-1.1.la # What to build lib_LTLIBRARIES = libjellyfish-1.1.la ######################################## # Build Jellyfish the exec ######################################## bin_jellyfish_SOURCES = jellyfish/jellyfish.cc \ jellyfish/stats_main.cc \ jellyfish/hash_merge.cc \ jellyfish/mer_counter.cc \ jellyfish/histo_main.cc \ jellyfish/dump_main.cc \ jellyfish/query_main.cc \ jellyfish/dump_fastq_main.cc \ jellyfish/histo_fastq_main.cc \ jellyfish/cite.cc \ jellyfish/hash_fastq_merge.cc \ jellyfish/yaggo.cpp # bin_jellyfish_LDADD = libjellyfish-1.1.la bin_jellyfish_LDFLAGS = $(AM_LDFLAGS) $(STATIC_FLAGS) ######################################## # Build Jellyfish the shared library ######################################## libjellyfish_srcs = jellyfish/square_binary_matrix.cc \ jellyfish/err.cc jellyfish/misc.cc \ jellyfish/storage.cc jellyfish/thread_exec.cc \ jellyfish/time.cc jellyfish/file_parser.cc \ jellyfish/read_parser.cc \ jellyfish/parse_read.cc jellyfish/half.cpp \ jellyfish/mapped_file.cc \ jellyfish/parse_dna.cc \ jellyfish/parse_quake.cc \ jellyfish/parse_qual_dna.cc \ jellyfish/sequence_parser.cc \ jellyfish/seq_qual_parser.cc \ jellyfish/backtrace.cc jellyfish/floats.cc \ jellyfish/dbg.cc jellyfish/allocators_mmap.cc \ jellyfish/dna_codes.cc libjellyfish_1_1_la_SOURCES = $(libjellyfish_srcs) libjellyfish_1_1_la_LDFLAGS = -version-info 1:1:0 library_includedir = $(includedir)/jellyfish-@PACKAGE_VERSION@/jellyfish library_include_HEADERS = jellyfish/allocators_malloc.hpp \ jellyfish/allocators_mmap.hpp \ jellyfish/allocators_shm.hpp \ jellyfish/atomic_gcc.hpp \ jellyfish/compacted_dumper.hpp \ jellyfish/compacted_hash.hpp \ jellyfish/concurrent_queues.hpp \ jellyfish/direct_indexing_array.hpp \ jellyfish/direct_sorted_dumper.hpp \ jellyfish/divisor.hpp jellyfish/dumper.hpp \ jellyfish/hash_function.hpp \ jellyfish/hash.hpp jellyfish/heap.hpp \ jellyfish/invertible_hash_array.hpp \ jellyfish/locking_hash_counters.hpp \ jellyfish/locks_pthread.hpp \ jellyfish/mapped_file.hpp \ jellyfish/mer_counting.hpp \ jellyfish/err.hpp jellyfish/misc.hpp \ jellyfish/offsets_key_value.hpp \ jellyfish/reversible_hash_function.hpp \ jellyfish/sorted_dumper.hpp \ jellyfish/square_binary_matrix.hpp \ jellyfish/storage.hpp \ jellyfish/thread_exec.hpp \ jellyfish/time.hpp jellyfish/token_ring.hpp \ jellyfish/raw_dumper.hpp \ jellyfish/capped_integer.hpp \ jellyfish/aligned_values_array.hpp \ jellyfish/fastq_dumper.hpp \ jellyfish/floats.hpp \ jellyfish/circular_buffer.hpp \ jellyfish/counter.hpp \ jellyfish/parse_quake.hpp \ jellyfish/parse_dna.hpp \ jellyfish/parse_qual_dna.hpp \ jellyfish/file_parser.hpp \ jellyfish/sequence_parser.hpp \ jellyfish/seq_qual_parser.hpp \ jellyfish/double_fifo_input.hpp \ jellyfish/read_parser.hpp \ jellyfish/parse_read.hpp \ jellyfish/simple_growing_array.hpp \ jellyfish/toFloat.h jellyfish/eLut.h \ jellyfish/dbg.hpp jellyfish/half.h \ jellyfish/backtrace.hpp \ jellyfish/dna_codes.hpp \ jellyfish/simple_circular_buffer.hpp ######################################## # Build tests ######################################## bin_generate_sequence_SOURCES = jellyfish/generate_sequence.cc \ jellyfish/mersenne.cpp bin_test_double_fifo_input_SOURCES = jellyfish/test_double_fifo_input.cc bin_test_read_parser_SOURCES = jellyfish/test_read_parser.cc ######################################## # Tests ######################################## TEST_EXTENSIONS = .sh SH_LOG_COMPILER = /bin/sh AM_SH_LOG_FLAGS = ######################################## # Unit tests ######################################## TESTS = tests/generate_sequence.sh tests/serial_hashing.sh \ tests/parallel_hashing.sh tests/serial_direct_indexing.sh \ tests/parallel_direct_indexing.sh tests/raw_hash.sh \ tests/generate_fastq_sequence.sh \ tests/parallel_fastq_hashing.sh tests/multi_file.sh \ tests/multi_file_fastq.sh tests/from_stream.sh \ tests/parallel_fastq_sequence_hashing.sh \ tests/from_stream_fastq.sh tests/merge.sh tests/min_qual.sh \ tests/big.sh tests/parsers.sh tests/small.sh \ tests/parallel_fastq_direct_indexing.sh \ unit_tests/unit_tests.sh bin_test_all_SOURCES = unit_tests/test_offsets_key_value.cc \ unit_tests/test_simple_circular_buffer.cc \ unit_tests/test_square_binary_matrix.cc bin_test_all_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest/include -I$(top_srcdir)/unit_tests/gtest bin_test_all_LDADD = libgtest_main.a libgtest.a $(LDADD) ############################## # Gtest build. ############################## # Build rules for libraries. # check_LTLIBRARIES = libgtest.la libgtest_main.la check_LIBRARIES = libgtest.a libgtest_main.a libgtest_a_SOURCES = unit_tests/gtest/src/gtest-all.cc libgtest_main_a_SOURCES = unit_tests/gtest/src/gtest_main.cc libgtest_main_a_LIBADD = libgtest.a libgtest_a_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest \ -I$(top_srcdir)/unit_tests/gtest/include libgtest_main_a_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest \ -I$(top_srcdir)/unit_tests/gtest/include # gtest source files that we don't compile directly. They are # #included by gtest-all.cc. GTEST_SRC = unit_tests/gtest/src/gtest-death-test.cc \ unit_tests/gtest/src/gtest-filepath.cc \ unit_tests/gtest/src/gtest-internal-inl.h \ unit_tests/gtest/src/gtest-port.cc \ unit_tests/gtest/src/gtest-printers.cc \ unit_tests/gtest/src/gtest-test-part.cc \ unit_tests/gtest/src/gtest-typed-test.cc \ unit_tests/gtest/src/gtest.cc # Headers, not installed GTEST_I = unit_tests/gtest/include/gtest noinst_HEADERS = $(GTEST_I)/gtest-death-test.h \ $(GTEST_I)/gtest-message.h \ $(GTEST_I)/gtest-param-test.h \ $(GTEST_I)/gtest-printers.h $(GTEST_I)/gtest-spi.h \ $(GTEST_I)/gtest-test-part.h \ $(GTEST_I)/gtest-typed-test.h $(GTEST_I)/gtest.h \ $(GTEST_I)/gtest_pred_impl.h $(GTEST_I)/gtest_prod.h \ $(GTEST_I)/internal/gtest-death-test-internal.h \ $(GTEST_I)/internal/gtest-filepath.h \ $(GTEST_I)/internal/gtest-internal.h \ $(GTEST_I)/internal/gtest-linked_ptr.h \ $(GTEST_I)/internal/gtest-param-util-generated.h \ $(GTEST_I)/internal/gtest-param-util.h \ $(GTEST_I)/internal/gtest-port.h \ $(GTEST_I)/internal/gtest-string.h \ $(GTEST_I)/internal/gtest-tuple.h \ $(GTEST_I)/internal/gtest-type-util.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cc .cpp .html .lo .log .o .obj .sh .sh$(EXEEXT) am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/gtest.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(srcdir)/gtest.mk: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 tests/compat.sh: $(top_builddir)/config.status $(top_srcdir)/tests/compat.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ jellyfish-1.1.pc: $(top_builddir)/config.status $(srcdir)/jellyfish-1.1.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-checkLIBRARIES: -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) unit_tests/gtest/src/$(am__dirstamp): @$(MKDIR_P) unit_tests/gtest/src @: > unit_tests/gtest/src/$(am__dirstamp) unit_tests/gtest/src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unit_tests/gtest/src/$(DEPDIR) @: > unit_tests/gtest/src/$(DEPDIR)/$(am__dirstamp) unit_tests/gtest/src/libgtest_a-gtest-all.$(OBJEXT): \ unit_tests/gtest/src/$(am__dirstamp) \ unit_tests/gtest/src/$(DEPDIR)/$(am__dirstamp) libgtest.a: $(libgtest_a_OBJECTS) $(libgtest_a_DEPENDENCIES) $(EXTRA_libgtest_a_DEPENDENCIES) $(AM_V_at)-rm -f libgtest.a $(AM_V_AR)$(libgtest_a_AR) libgtest.a $(libgtest_a_OBJECTS) $(libgtest_a_LIBADD) $(AM_V_at)$(RANLIB) libgtest.a unit_tests/gtest/src/libgtest_main_a-gtest_main.$(OBJEXT): \ unit_tests/gtest/src/$(am__dirstamp) \ unit_tests/gtest/src/$(DEPDIR)/$(am__dirstamp) libgtest_main.a: $(libgtest_main_a_OBJECTS) $(libgtest_main_a_DEPENDENCIES) $(EXTRA_libgtest_main_a_DEPENDENCIES) $(AM_V_at)-rm -f libgtest_main.a $(AM_V_AR)$(libgtest_main_a_AR) libgtest_main.a $(libgtest_main_a_OBJECTS) $(libgtest_main_a_LIBADD) $(AM_V_at)$(RANLIB) libgtest_main.a install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done jellyfish/$(am__dirstamp): @$(MKDIR_P) jellyfish @: > jellyfish/$(am__dirstamp) jellyfish/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) jellyfish/$(DEPDIR) @: > jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/square_binary_matrix.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/err.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/misc.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/storage.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/thread_exec.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/time.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/file_parser.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/read_parser.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/parse_read.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/half.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/mapped_file.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/parse_dna.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/parse_quake.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/parse_qual_dna.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/sequence_parser.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/seq_qual_parser.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/backtrace.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/floats.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/dbg.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/allocators_mmap.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/dna_codes.lo: jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) libjellyfish-1.1.la: $(libjellyfish_1_1_la_OBJECTS) $(libjellyfish_1_1_la_DEPENDENCIES) $(EXTRA_libjellyfish_1_1_la_DEPENDENCIES) $(AM_V_CXXLD)$(libjellyfish_1_1_la_LINK) -rpath $(libdir) $(libjellyfish_1_1_la_OBJECTS) $(libjellyfish_1_1_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list jellyfish/generate_sequence.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/mersenne.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) bin/$(am__dirstamp): @$(MKDIR_P) bin @: > bin/$(am__dirstamp) bin/generate_sequence$(EXEEXT): $(bin_generate_sequence_OBJECTS) $(bin_generate_sequence_DEPENDENCIES) $(EXTRA_bin_generate_sequence_DEPENDENCIES) bin/$(am__dirstamp) @rm -f bin/generate_sequence$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(bin_generate_sequence_OBJECTS) $(bin_generate_sequence_LDADD) $(LIBS) jellyfish/jellyfish.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/stats_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/hash_merge.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/mer_counter.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/histo_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/dump_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/query_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/dump_fastq_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/histo_fastq_main.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/cite.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/hash_fastq_merge.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) jellyfish/yaggo.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) bin/jellyfish$(EXEEXT): $(bin_jellyfish_OBJECTS) $(bin_jellyfish_DEPENDENCIES) $(EXTRA_bin_jellyfish_DEPENDENCIES) bin/$(am__dirstamp) @rm -f bin/jellyfish$(EXEEXT) $(AM_V_CXXLD)$(bin_jellyfish_LINK) $(bin_jellyfish_OBJECTS) $(bin_jellyfish_LDADD) $(LIBS) unit_tests/$(am__dirstamp): @$(MKDIR_P) unit_tests @: > unit_tests/$(am__dirstamp) unit_tests/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unit_tests/$(DEPDIR) @: > unit_tests/$(DEPDIR)/$(am__dirstamp) unit_tests/bin_test_all-test_offsets_key_value.$(OBJEXT): \ unit_tests/$(am__dirstamp) \ unit_tests/$(DEPDIR)/$(am__dirstamp) unit_tests/bin_test_all-test_simple_circular_buffer.$(OBJEXT): \ unit_tests/$(am__dirstamp) \ unit_tests/$(DEPDIR)/$(am__dirstamp) unit_tests/bin_test_all-test_square_binary_matrix.$(OBJEXT): \ unit_tests/$(am__dirstamp) \ unit_tests/$(DEPDIR)/$(am__dirstamp) bin/test_all$(EXEEXT): $(bin_test_all_OBJECTS) $(bin_test_all_DEPENDENCIES) $(EXTRA_bin_test_all_DEPENDENCIES) bin/$(am__dirstamp) @rm -f bin/test_all$(EXEEXT) $(AM_V_CXXLD)$(bin_test_all_LINK) $(bin_test_all_OBJECTS) $(bin_test_all_LDADD) $(LIBS) jellyfish/test_double_fifo_input.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) bin/test_double_fifo_input$(EXEEXT): $(bin_test_double_fifo_input_OBJECTS) $(bin_test_double_fifo_input_DEPENDENCIES) $(EXTRA_bin_test_double_fifo_input_DEPENDENCIES) bin/$(am__dirstamp) @rm -f bin/test_double_fifo_input$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(bin_test_double_fifo_input_OBJECTS) $(bin_test_double_fifo_input_LDADD) $(LIBS) jellyfish/test_read_parser.$(OBJEXT): jellyfish/$(am__dirstamp) \ jellyfish/$(DEPDIR)/$(am__dirstamp) bin/test_read_parser$(EXEEXT): $(bin_test_read_parser_OBJECTS) $(bin_test_read_parser_DEPENDENCIES) $(EXTRA_bin_test_read_parser_DEPENDENCIES) bin/$(am__dirstamp) @rm -f bin/test_read_parser$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(bin_test_read_parser_OBJECTS) $(bin_test_read_parser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f jellyfish/allocators_mmap.$(OBJEXT) -rm -f jellyfish/allocators_mmap.lo -rm -f jellyfish/backtrace.$(OBJEXT) -rm -f jellyfish/backtrace.lo -rm -f jellyfish/cite.$(OBJEXT) -rm -f jellyfish/dbg.$(OBJEXT) -rm -f jellyfish/dbg.lo -rm -f jellyfish/dna_codes.$(OBJEXT) -rm -f jellyfish/dna_codes.lo -rm -f jellyfish/dump_fastq_main.$(OBJEXT) -rm -f jellyfish/dump_main.$(OBJEXT) -rm -f jellyfish/err.$(OBJEXT) -rm -f jellyfish/err.lo -rm -f jellyfish/file_parser.$(OBJEXT) -rm -f jellyfish/file_parser.lo -rm -f jellyfish/floats.$(OBJEXT) -rm -f jellyfish/floats.lo -rm -f jellyfish/generate_sequence.$(OBJEXT) -rm -f jellyfish/half.$(OBJEXT) -rm -f jellyfish/half.lo -rm -f jellyfish/hash_fastq_merge.$(OBJEXT) -rm -f jellyfish/hash_merge.$(OBJEXT) -rm -f jellyfish/histo_fastq_main.$(OBJEXT) -rm -f jellyfish/histo_main.$(OBJEXT) -rm -f jellyfish/jellyfish.$(OBJEXT) -rm -f jellyfish/mapped_file.$(OBJEXT) -rm -f jellyfish/mapped_file.lo -rm -f jellyfish/mer_counter.$(OBJEXT) -rm -f jellyfish/mersenne.$(OBJEXT) -rm -f jellyfish/misc.$(OBJEXT) -rm -f jellyfish/misc.lo -rm -f jellyfish/parse_dna.$(OBJEXT) -rm -f jellyfish/parse_dna.lo -rm -f jellyfish/parse_quake.$(OBJEXT) -rm -f jellyfish/parse_quake.lo -rm -f jellyfish/parse_qual_dna.$(OBJEXT) -rm -f jellyfish/parse_qual_dna.lo -rm -f jellyfish/parse_read.$(OBJEXT) -rm -f jellyfish/parse_read.lo -rm -f jellyfish/query_main.$(OBJEXT) -rm -f jellyfish/read_parser.$(OBJEXT) -rm -f jellyfish/read_parser.lo -rm -f jellyfish/seq_qual_parser.$(OBJEXT) -rm -f jellyfish/seq_qual_parser.lo -rm -f jellyfish/sequence_parser.$(OBJEXT) -rm -f jellyfish/sequence_parser.lo -rm -f jellyfish/square_binary_matrix.$(OBJEXT) -rm -f jellyfish/square_binary_matrix.lo -rm -f jellyfish/stats_main.$(OBJEXT) -rm -f jellyfish/storage.$(OBJEXT) -rm -f jellyfish/storage.lo -rm -f jellyfish/test_double_fifo_input.$(OBJEXT) -rm -f jellyfish/test_read_parser.$(OBJEXT) -rm -f jellyfish/thread_exec.$(OBJEXT) -rm -f jellyfish/thread_exec.lo -rm -f jellyfish/time.$(OBJEXT) -rm -f jellyfish/time.lo -rm -f jellyfish/yaggo.$(OBJEXT) -rm -f unit_tests/bin_test_all-test_offsets_key_value.$(OBJEXT) -rm -f unit_tests/bin_test_all-test_simple_circular_buffer.$(OBJEXT) -rm -f unit_tests/bin_test_all-test_square_binary_matrix.$(OBJEXT) -rm -f unit_tests/gtest/src/libgtest_a-gtest-all.$(OBJEXT) -rm -f unit_tests/gtest/src/libgtest_main_a-gtest_main.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/allocators_mmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/backtrace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/cite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/dbg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/dna_codes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/dump_fastq_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/dump_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/file_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/floats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/generate_sequence.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/half.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/hash_fastq_merge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/hash_merge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/histo_fastq_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/histo_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/jellyfish.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/mapped_file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/mer_counter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/mersenne.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/parse_dna.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/parse_quake.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/parse_qual_dna.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/parse_read.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/query_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/read_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/seq_qual_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/sequence_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/square_binary_matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/stats_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/storage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/test_double_fifo_input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/test_read_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/thread_exec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/time.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@jellyfish/$(DEPDIR)/yaggo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< unit_tests/gtest/src/libgtest_a-gtest-all.o: unit_tests/gtest/src/gtest-all.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_a_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/gtest/src/libgtest_a-gtest-all.o -MD -MP -MF unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Tpo -c -o unit_tests/gtest/src/libgtest_a-gtest-all.o `test -f 'unit_tests/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`unit_tests/gtest/src/gtest-all.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Tpo unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/gtest/src/gtest-all.cc' object='unit_tests/gtest/src/libgtest_a-gtest-all.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_a_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/gtest/src/libgtest_a-gtest-all.o `test -f 'unit_tests/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`unit_tests/gtest/src/gtest-all.cc unit_tests/gtest/src/libgtest_a-gtest-all.obj: unit_tests/gtest/src/gtest-all.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_a_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/gtest/src/libgtest_a-gtest-all.obj -MD -MP -MF unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Tpo -c -o unit_tests/gtest/src/libgtest_a-gtest-all.obj `if test -f 'unit_tests/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'unit_tests/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/gtest/src/gtest-all.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Tpo unit_tests/gtest/src/$(DEPDIR)/libgtest_a-gtest-all.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/gtest/src/gtest-all.cc' object='unit_tests/gtest/src/libgtest_a-gtest-all.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_a_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/gtest/src/libgtest_a-gtest-all.obj `if test -f 'unit_tests/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'unit_tests/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/gtest/src/gtest-all.cc'; fi` unit_tests/gtest/src/libgtest_main_a-gtest_main.o: unit_tests/gtest/src/gtest_main.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_main_a_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/gtest/src/libgtest_main_a-gtest_main.o -MD -MP -MF unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Tpo -c -o unit_tests/gtest/src/libgtest_main_a-gtest_main.o `test -f 'unit_tests/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`unit_tests/gtest/src/gtest_main.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Tpo unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/gtest/src/gtest_main.cc' object='unit_tests/gtest/src/libgtest_main_a-gtest_main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_main_a_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/gtest/src/libgtest_main_a-gtest_main.o `test -f 'unit_tests/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`unit_tests/gtest/src/gtest_main.cc unit_tests/gtest/src/libgtest_main_a-gtest_main.obj: unit_tests/gtest/src/gtest_main.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_main_a_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/gtest/src/libgtest_main_a-gtest_main.obj -MD -MP -MF unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Tpo -c -o unit_tests/gtest/src/libgtest_main_a-gtest_main.obj `if test -f 'unit_tests/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'unit_tests/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/gtest/src/gtest_main.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Tpo unit_tests/gtest/src/$(DEPDIR)/libgtest_main_a-gtest_main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/gtest/src/gtest_main.cc' object='unit_tests/gtest/src/libgtest_main_a-gtest_main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtest_main_a_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/gtest/src/libgtest_main_a-gtest_main.obj `if test -f 'unit_tests/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'unit_tests/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/gtest/src/gtest_main.cc'; fi` unit_tests/bin_test_all-test_offsets_key_value.o: unit_tests/test_offsets_key_value.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_offsets_key_value.o -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Tpo -c -o unit_tests/bin_test_all-test_offsets_key_value.o `test -f 'unit_tests/test_offsets_key_value.cc' || echo '$(srcdir)/'`unit_tests/test_offsets_key_value.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_offsets_key_value.cc' object='unit_tests/bin_test_all-test_offsets_key_value.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_offsets_key_value.o `test -f 'unit_tests/test_offsets_key_value.cc' || echo '$(srcdir)/'`unit_tests/test_offsets_key_value.cc unit_tests/bin_test_all-test_offsets_key_value.obj: unit_tests/test_offsets_key_value.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_offsets_key_value.obj -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Tpo -c -o unit_tests/bin_test_all-test_offsets_key_value.obj `if test -f 'unit_tests/test_offsets_key_value.cc'; then $(CYGPATH_W) 'unit_tests/test_offsets_key_value.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_offsets_key_value.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_offsets_key_value.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_offsets_key_value.cc' object='unit_tests/bin_test_all-test_offsets_key_value.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_offsets_key_value.obj `if test -f 'unit_tests/test_offsets_key_value.cc'; then $(CYGPATH_W) 'unit_tests/test_offsets_key_value.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_offsets_key_value.cc'; fi` unit_tests/bin_test_all-test_simple_circular_buffer.o: unit_tests/test_simple_circular_buffer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_simple_circular_buffer.o -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Tpo -c -o unit_tests/bin_test_all-test_simple_circular_buffer.o `test -f 'unit_tests/test_simple_circular_buffer.cc' || echo '$(srcdir)/'`unit_tests/test_simple_circular_buffer.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_simple_circular_buffer.cc' object='unit_tests/bin_test_all-test_simple_circular_buffer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_simple_circular_buffer.o `test -f 'unit_tests/test_simple_circular_buffer.cc' || echo '$(srcdir)/'`unit_tests/test_simple_circular_buffer.cc unit_tests/bin_test_all-test_simple_circular_buffer.obj: unit_tests/test_simple_circular_buffer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_simple_circular_buffer.obj -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Tpo -c -o unit_tests/bin_test_all-test_simple_circular_buffer.obj `if test -f 'unit_tests/test_simple_circular_buffer.cc'; then $(CYGPATH_W) 'unit_tests/test_simple_circular_buffer.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_simple_circular_buffer.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_simple_circular_buffer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_simple_circular_buffer.cc' object='unit_tests/bin_test_all-test_simple_circular_buffer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_simple_circular_buffer.obj `if test -f 'unit_tests/test_simple_circular_buffer.cc'; then $(CYGPATH_W) 'unit_tests/test_simple_circular_buffer.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_simple_circular_buffer.cc'; fi` unit_tests/bin_test_all-test_square_binary_matrix.o: unit_tests/test_square_binary_matrix.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_square_binary_matrix.o -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Tpo -c -o unit_tests/bin_test_all-test_square_binary_matrix.o `test -f 'unit_tests/test_square_binary_matrix.cc' || echo '$(srcdir)/'`unit_tests/test_square_binary_matrix.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_square_binary_matrix.cc' object='unit_tests/bin_test_all-test_square_binary_matrix.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_square_binary_matrix.o `test -f 'unit_tests/test_square_binary_matrix.cc' || echo '$(srcdir)/'`unit_tests/test_square_binary_matrix.cc unit_tests/bin_test_all-test_square_binary_matrix.obj: unit_tests/test_square_binary_matrix.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -MT unit_tests/bin_test_all-test_square_binary_matrix.obj -MD -MP -MF unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Tpo -c -o unit_tests/bin_test_all-test_square_binary_matrix.obj `if test -f 'unit_tests/test_square_binary_matrix.cc'; then $(CYGPATH_W) 'unit_tests/test_square_binary_matrix.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_square_binary_matrix.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Tpo unit_tests/$(DEPDIR)/bin_test_all-test_square_binary_matrix.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unit_tests/test_square_binary_matrix.cc' object='unit_tests/bin_test_all-test_square_binary_matrix.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bin_test_all_CXXFLAGS) $(CXXFLAGS) -c -o unit_tests/bin_test_all-test_square_binary_matrix.obj `if test -f 'unit_tests/test_square_binary_matrix.cc'; then $(CYGPATH_W) 'unit_tests/test_square_binary_matrix.cc'; else $(CYGPATH_W) '$(srcdir)/unit_tests/test_square_binary_matrix.cc'; fi` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf bin/.libs bin/_libs -rm -rf jellyfish/.libs jellyfish/_libs distclean-libtool: -rm -f libtool config.lt install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-library_includeHEADERS: $(library_include_HEADERS) @$(NORMAL_INSTALL) @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(library_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(library_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(library_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(library_includedir)" || exit $$?; \ done uninstall-library_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(library_includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_LIBRARIES) $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv .sh.log: @p='$<'; $(am__check_pre) $(SH_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.sh$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(SH_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) \ config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(library_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f bin/$(am__dirstamp) -rm -f jellyfish/$(DEPDIR)/$(am__dirstamp) -rm -f jellyfish/$(am__dirstamp) -rm -f unit_tests/$(DEPDIR)/$(am__dirstamp) -rm -f unit_tests/$(am__dirstamp) -rm -f unit_tests/gtest/src/$(DEPDIR)/$(am__dirstamp) -rm -f unit_tests/gtest/src/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-checkLIBRARIES clean-checkPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf jellyfish/$(DEPDIR) unit_tests/$(DEPDIR) unit_tests/gtest/src/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-library_includeHEADERS install-man \ install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf jellyfish/$(DEPDIR) unit_tests/$(DEPDIR) unit_tests/gtest/src/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ uninstall-library_includeHEADERS uninstall-man \ uninstall-pkgconfigDATA uninstall-man: uninstall-man1 .MAKE: all check-am check-html install-am install-strip recheck-html .PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html am--refresh \ check check-TESTS check-am check-html clean clean-binPROGRAMS \ clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local ctags dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES \ install-library_includeHEADERS install-man install-man1 \ install-pdf install-pdf-am install-pkgconfigDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck recheck-html \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-libLTLIBRARIES uninstall-library_includeHEADERS \ uninstall-man uninstall-man1 uninstall-pkgconfigDATA clean-local: clean-local-check .PHONY: clean-local-check clean-local-check: -cd tests; rm -f seq10m* seq1m* *_0 *_1 *_2 *_S *.md5sum *.histo *.stats *.timing *.query *.dump *.fa tests/serial_hashing.log: tests/generate_sequence.log tests/parallel_hashing.log: tests/generate_sequence.log tests/serial_direct_indexing.log: tests/generate_sequence.log tests/parallel_direct_indexing.log: tests/generate_sequence.log tests/parallel_fastq_direct_indexing.log: tests/generate_fastq_sequence.log tests/multi_file.log: tests/generate_sequence.log tests/raw_hash.log: tests/generate_sequence.log tests/from_stream.log: tests/generate_sequence.log tests/parallel_fastq_hashing.log: tests/generate_fastq_sequence.log tests/parallel_fastq_sequence_hashing.log: tests/generate_fastq_sequence.log tests/multi_file_fastq.log: tests/generate_fastq_sequence.log tests/from_stream_fastq.log: tests/generate_fastq_sequence.log tests/merge.log: tests/generate_fastq_sequence.log tests/min_qual.log: tests/generate_fastq_sequence.log tests/parsers.log: tests/generate_sequence.log -include $(top_srcdir)/development.mk ######## # info # ######## print-%: @echo -n $($*) # 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: jellyfish-1.1.11/m4/0000755015303500042660000000000012200542320011104 500000000000000jellyfish-1.1.11/m4/ltsugar.m40000644015303500042660000001042412200542300012746 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) jellyfish-1.1.11/m4/lt~obsolete.m40000644015303500042660000001375612200542301013653 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) jellyfish-1.1.11/m4/ltversion.m40000644015303500042660000000126212200542301013313 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) jellyfish-1.1.11/m4/ltoptions.m40000644015303500042660000003007312200542300013322 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) jellyfish-1.1.11/m4/libtool.m40000644015303500042660000105743212200542300012744 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # 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' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS jellyfish-1.1.11/config.sub0000755015303500042660000010517612200542304012503 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: jellyfish-1.1.11/gtest.mk0000755015303500042660000000411012151455365012203 00000000000000############################## # Gtest build. ############################## # Build rules for libraries. # check_LTLIBRARIES = libgtest.la libgtest_main.la check_LIBRARIES = libgtest.a libgtest_main.a libgtest_a_SOURCES = unit_tests/gtest/src/gtest-all.cc libgtest_main_a_SOURCES = unit_tests/gtest/src/gtest_main.cc libgtest_main_a_LIBADD = libgtest.a libgtest_a_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest \ -I$(top_srcdir)/unit_tests/gtest/include libgtest_main_a_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest \ -I$(top_srcdir)/unit_tests/gtest/include # gtest source files that we don't compile directly. They are # #included by gtest-all.cc. GTEST_SRC = unit_tests/gtest/src/gtest-death-test.cc \ unit_tests/gtest/src/gtest-filepath.cc \ unit_tests/gtest/src/gtest-internal-inl.h \ unit_tests/gtest/src/gtest-port.cc \ unit_tests/gtest/src/gtest-printers.cc \ unit_tests/gtest/src/gtest-test-part.cc \ unit_tests/gtest/src/gtest-typed-test.cc \ unit_tests/gtest/src/gtest.cc EXTRA_DIST += $(GTEST_SRC) # Headers, not installed GTEST_I = unit_tests/gtest/include/gtest noinst_HEADERS = $(GTEST_I)/gtest-death-test.h \ $(GTEST_I)/gtest-message.h \ $(GTEST_I)/gtest-param-test.h \ $(GTEST_I)/gtest-printers.h $(GTEST_I)/gtest-spi.h \ $(GTEST_I)/gtest-test-part.h \ $(GTEST_I)/gtest-typed-test.h $(GTEST_I)/gtest.h \ $(GTEST_I)/gtest_pred_impl.h $(GTEST_I)/gtest_prod.h \ $(GTEST_I)/internal/gtest-death-test-internal.h \ $(GTEST_I)/internal/gtest-filepath.h \ $(GTEST_I)/internal/gtest-internal.h \ $(GTEST_I)/internal/gtest-linked_ptr.h \ $(GTEST_I)/internal/gtest-param-util-generated.h \ $(GTEST_I)/internal/gtest-param-util.h \ $(GTEST_I)/internal/gtest-port.h \ $(GTEST_I)/internal/gtest-string.h \ $(GTEST_I)/internal/gtest-tuple.h \ $(GTEST_I)/internal/gtest-type-util.h jellyfish-1.1.11/LICENSE0000644015303500042660000010451312151455365011536 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . jellyfish-1.1.11/Makefile.am0000644015303500042660000002141012151455365012557 00000000000000ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = doc/jellyfish.pdf doc/jellyfish.man README LICENSE HalfLICENSE man1_MANS = doc/jellyfish.man pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = jellyfish-1.1.pc AM_LDFLAGS = -lpthread AM_CPPFLAGS = -Wall -Wnon-virtual-dtor -I$(top_srcdir) AM_CXXFLAGS = -g -O3 LDADD = libjellyfish-1.1.la # What to build lib_LTLIBRARIES = libjellyfish-1.1.la bin_PROGRAMS = bin/jellyfish check_PROGRAMS = bin/generate_sequence bin/test_double_fifo_input \ bin/test_read_parser ######################################## # Build Jellyfish the exec ######################################## bin_jellyfish_SOURCES = jellyfish/jellyfish.cc \ jellyfish/stats_main.cc \ jellyfish/hash_merge.cc \ jellyfish/mer_counter.cc \ jellyfish/histo_main.cc \ jellyfish/dump_main.cc \ jellyfish/query_main.cc \ jellyfish/dump_fastq_main.cc \ jellyfish/histo_fastq_main.cc \ jellyfish/cite.cc \ jellyfish/hash_fastq_merge.cc \ jellyfish/yaggo.cpp # bin_jellyfish_LDADD = libjellyfish-1.1.la bin_jellyfish_LDFLAGS = $(AM_LDFLAGS) $(STATIC_FLAGS) EXTRA_DIST += jellyfish/cite_cmdline.hpp jellyfish/query_cmdline.hpp \ jellyfish/hash_merge_cmdline.hpp \ jellyfish/histo_main_cmdline.hpp \ jellyfish/stats_main_cmdline.hpp \ jellyfish/histo_fastq_main_cmdline.hpp \ jellyfish/dump_fastq_main_cmdline.hpp \ jellyfish/count_main_cmdline.hpp \ jellyfish/hash_fastq_merge_cmdline.hpp \ jellyfish/dump_main_cmdline.hpp \ jellyfish/double_fifo_input.hpp \ jellyfish/simple_growing_array.hpp \ jellyfish/backtrace.hpp jellyfish/noop_dumper.hpp \ jellyfish/yaggo.hpp jellyfish/fstream_default.hpp ######################################## # Build Jellyfish the shared library ######################################## libjellyfish_srcs = jellyfish/square_binary_matrix.cc \ jellyfish/err.cc jellyfish/misc.cc \ jellyfish/storage.cc jellyfish/thread_exec.cc \ jellyfish/time.cc jellyfish/file_parser.cc \ jellyfish/read_parser.cc \ jellyfish/parse_read.cc jellyfish/half.cpp \ jellyfish/mapped_file.cc \ jellyfish/parse_dna.cc \ jellyfish/parse_quake.cc \ jellyfish/parse_qual_dna.cc \ jellyfish/sequence_parser.cc \ jellyfish/seq_qual_parser.cc \ jellyfish/backtrace.cc jellyfish/floats.cc \ jellyfish/dbg.cc jellyfish/allocators_mmap.cc \ jellyfish/dna_codes.cc libjellyfish_1_1_la_SOURCES = $(libjellyfish_srcs) libjellyfish_1_1_la_LDFLAGS = -version-info 1:1:0 library_includedir=$(includedir)/jellyfish-@PACKAGE_VERSION@/jellyfish library_include_HEADERS = jellyfish/allocators_malloc.hpp \ jellyfish/allocators_mmap.hpp \ jellyfish/allocators_shm.hpp \ jellyfish/atomic_gcc.hpp \ jellyfish/compacted_dumper.hpp \ jellyfish/compacted_hash.hpp \ jellyfish/concurrent_queues.hpp \ jellyfish/direct_indexing_array.hpp \ jellyfish/direct_sorted_dumper.hpp \ jellyfish/divisor.hpp jellyfish/dumper.hpp \ jellyfish/hash_function.hpp \ jellyfish/hash.hpp jellyfish/heap.hpp \ jellyfish/invertible_hash_array.hpp \ jellyfish/locking_hash_counters.hpp \ jellyfish/locks_pthread.hpp \ jellyfish/mapped_file.hpp \ jellyfish/mer_counting.hpp \ jellyfish/err.hpp jellyfish/misc.hpp \ jellyfish/offsets_key_value.hpp \ jellyfish/reversible_hash_function.hpp \ jellyfish/sorted_dumper.hpp \ jellyfish/square_binary_matrix.hpp \ jellyfish/storage.hpp \ jellyfish/thread_exec.hpp \ jellyfish/time.hpp jellyfish/token_ring.hpp \ jellyfish/raw_dumper.hpp \ jellyfish/capped_integer.hpp \ jellyfish/aligned_values_array.hpp \ jellyfish/fastq_dumper.hpp \ jellyfish/floats.hpp \ jellyfish/circular_buffer.hpp \ jellyfish/counter.hpp \ jellyfish/parse_quake.hpp \ jellyfish/parse_dna.hpp \ jellyfish/parse_qual_dna.hpp \ jellyfish/file_parser.hpp \ jellyfish/sequence_parser.hpp \ jellyfish/seq_qual_parser.hpp \ jellyfish/double_fifo_input.hpp \ jellyfish/read_parser.hpp \ jellyfish/parse_read.hpp \ jellyfish/simple_growing_array.hpp \ jellyfish/toFloat.h jellyfish/eLut.h \ jellyfish/dbg.hpp jellyfish/half.h \ jellyfish/backtrace.hpp \ jellyfish/dna_codes.hpp \ jellyfish/simple_circular_buffer.hpp ######################################## # Build tests ######################################## bin_generate_sequence_SOURCES = jellyfish/generate_sequence.cc \ jellyfish/mersenne.cpp bin_test_double_fifo_input_SOURCES = jellyfish/test_double_fifo_input.cc bin_test_read_parser_SOURCES = jellyfish/test_read_parser.cc EXTRA_DIST += jellyfish/randomc.h jellyfish/generate_sequence_cmdline.hpp ######################################## # Tests ######################################## TEST_EXTENSIONS = .sh SH_LOG_COMPILER = /bin/sh AM_SH_LOG_FLAGS = TESTS = tests/generate_sequence.sh tests/serial_hashing.sh \ tests/parallel_hashing.sh tests/serial_direct_indexing.sh \ tests/parallel_direct_indexing.sh tests/raw_hash.sh \ tests/generate_fastq_sequence.sh \ tests/parallel_fastq_hashing.sh tests/multi_file.sh \ tests/multi_file_fastq.sh tests/from_stream.sh \ tests/parallel_fastq_sequence_hashing.sh \ tests/from_stream_fastq.sh tests/merge.sh tests/min_qual.sh \ tests/big.sh tests/parsers.sh tests/small.sh \ tests/parallel_fastq_direct_indexing.sh EXTRA_DIST += $(TESTS) clean-local: clean-local-check .PHONY: clean-local-check clean-local-check: -cd tests; rm -f seq10m* seq1m* *_0 *_1 *_2 *_S *.md5sum *.histo *.stats *.timing *.query *.dump *.fa tests/serial_hashing.log: tests/generate_sequence.log tests/parallel_hashing.log: tests/generate_sequence.log tests/serial_direct_indexing.log: tests/generate_sequence.log tests/parallel_direct_indexing.log: tests/generate_sequence.log tests/parallel_fastq_direct_indexing.log: tests/generate_fastq_sequence.log tests/multi_file.log: tests/generate_sequence.log tests/raw_hash.log: tests/generate_sequence.log tests/from_stream.log: tests/generate_sequence.log tests/parallel_fastq_hashing.log: tests/generate_fastq_sequence.log tests/parallel_fastq_sequence_hashing.log: tests/generate_fastq_sequence.log tests/multi_file_fastq.log: tests/generate_fastq_sequence.log tests/from_stream_fastq.log: tests/generate_fastq_sequence.log tests/merge.log: tests/generate_fastq_sequence.log tests/min_qual.log: tests/generate_fastq_sequence.log tests/parsers.log: tests/generate_sequence.log ######################################## # Unit tests ######################################## TESTS += unit_tests/unit_tests.sh check_PROGRAMS += bin/test_all bin_test_all_SOURCES = unit_tests/test_offsets_key_value.cc \ unit_tests/test_simple_circular_buffer.cc \ unit_tests/test_square_binary_matrix.cc bin_test_all_CXXFLAGS = -I$(top_srcdir)/unit_tests/gtest/include -I$(top_srcdir)/unit_tests/gtest bin_test_all_LDADD = libgtest_main.a libgtest.a $(LDADD) include gtest.mk -include $(top_srcdir)/development.mk ######## # info # ######## print-%: @echo -n $($*) jellyfish-1.1.11/missing0000755015303500042660000002415212200542304012111 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: jellyfish-1.1.11/install-sh0000755015303500042660000003325612200542304012523 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: jellyfish-1.1.11/README0000644015303500042660000000443512151455365011413 00000000000000Installation ============ % ./configure % make # As root: % make install To install in a custom directory: % ./configure --prefix=/my/dir % make % make install Then make sure the following environment variables contain the correct paths: PATH -> /my/dir/bin LD_LIBRARY_PATH -> /my/dir/lib MANPATH -> /my/dir/share/man PKG_CONFIG_PATH -> /my/dir/lib/pkgconfig Only the PATH environment variables is necessary to run jellyfish. MANPATH is used by the man command. PKG_CONFIG_PATH and LD_LIBRARY_PATH are used to compile software against the jellyfish shared library. Tests ===== To run the built-in tests, do: % make check All tests should pass and 1 test should be skipped (big.sh). Running 'make check' will use about 50MB of disk space and will use every CPUs found on the machine. On our test machine with 32 cores, it takes a few minutes to run. To tests also on large data set, do: % make check BIG=1 WARNING: this uses >40GB of disk space and takes 30 minutes to run (20 to create the data, 10 to run jellyfish). Notes ===== * Jellyfish has been devellopped and tested on x86-64 GNU/Linux. It compiles and runs correctly the tests on MacOS X (Intel) and FreeBSD. It should be fairly easy to port on other *NIX platform with the gcc compiler, but no guarantee is made. Support for 32-bits platform has not been tested. License ======= * The Mersenne Twister random generator is copyrighted by Agner Fog and distributed under the GPL version 3 or higher. http://www.agner.org. * The Half float implementation is copyrighted by Industrial Light & Magic and is distributed under the license described in the HalfLICENSE file. * 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 3 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, see . jellyfish-1.1.11/configure0000755015303500042660000210771412200542304012431 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for jellyfish 1.1.11. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and gmarcais@umd.edu $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='jellyfish' PACKAGE_TARNAME='jellyfish' PACKAGE_VERSION='1.1.11' PACKAGE_STRING='jellyfish 1.1.11' PACKAGE_BUGREPORT='gmarcais@umd.edu' PACKAGE_URL='' ac_unique_file="jellyfish" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS STATIC_FLAGS MD5 CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LIBTOOL AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock with_sse with_half enable_all_static ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP MD5' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures jellyfish 1.1.11 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/jellyfish] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of jellyfish 1.1.11:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-all-static create statically linked executable Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-sse enable SSE --with-half enable half float (16 bits) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor MD5 Path to md5 hashing program Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF jellyfish configure 1.1.11 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES # ----------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_cxx_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_decl # ac_fn_cxx_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to gmarcais@umd.edu ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_member LINENO AGGR MEMBER VAR INCLUDES # ------------------------------------------------------ # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_cxx_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by jellyfish $as_me 1.1.11, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='jellyfish' VERSION='1.1.11' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers config.h" case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST 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_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # 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' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi 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 CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Change default compilation flags #AC_SUBST([ALL_CXXFLAGS], [-std=c++0x]) #CXXFLAGS="-std=c++0x $CXXFLAGS" ac_ext=cpp 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 ac_ext=cpp 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 if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp 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 depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp 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 else _lt_caught_CXX_error=yes fi ac_ext=cpp 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 archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # 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' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp 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 ac_config_files="$ac_config_files Makefile tests/compat.sh jellyfish-1.1.pc" if test "x$MD5" = "x"; then : # Extract the first word of "md5sum", so it can be a program name with args. set dummy md5sum; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MD5+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MD5"; then ac_cv_prog_MD5="$MD5" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MD5="md5sum" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MD5=$ac_cv_prog_MD5 if test -n "$MD5"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MD5" >&5 $as_echo "$MD5" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$MD5" = "x"; then : # Extract the first word of "md5", so it can be a program name with args. set dummy md5; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MD5+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MD5"; then ac_cv_prog_MD5="$MD5" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MD5="md5 -r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MD5=$ac_cv_prog_MD5 if test -n "$MD5"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MD5" >&5 $as_echo "$MD5" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$MD5" = "x"; then : as_fn_error $? "Could not find md5 hashing program in your path" "$LINENO" 5 fi # Check whether --with-sse was given. if test "${with_sse+set}" = set; then : withval=$with_sse; else with_sse=no fi if test "x$with_sse" != xno; then : $as_echo "#define HAVE_SSE 1" >>confdefs.h fi # Check whether --with-half was given. if test "${with_half+set}" = set; then : withval=$with_half; else with_half=no fi if test "x$with_half" = "xyes"; then : $as_echo "#define HALF_FLOATS 1" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "__int128" "ac_cv_type___int128" "$ac_includes_default" if test "x$ac_cv_type___int128" = xyes; then : $as_echo "#define HAVE_INT128 1" >>confdefs.h fi # Check the version of strerror_r ac_fn_cxx_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_cxx_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if ${ac_cv_func_strerror_r_char_p+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi for ac_header in execinfo.h sys/syscall.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_cxx_check_member "$LINENO" "siginfo_t" "si_int" "ac_cv_member_siginfo_t_si_int" "#include " if test "x$ac_cv_member_siginfo_t_si_int" = xyes; then : $as_echo "#define HAVE_SI_INT 1" >>confdefs.h fi # --enable-all-static # Do not use libtool if building all static # Check whether --enable-all-static was given. if test "${enable_all_static+set}" = set; then : enableval=$enable_all_static; fi STATIC_FLAGS= if test x$enable_all_static = xyes; then : STATIC_FLAGS=-all-static fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by jellyfish $as_me 1.1.11, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ jellyfish config.status 1.1.11 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "tests/compat.sh") CONFIG_FILES="$CONFIG_FILES tests/compat.sh" ;; "jellyfish-1.1.pc") CONFIG_FILES="$CONFIG_FILES jellyfish-1.1.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi jellyfish-1.1.11/tests/0000755015303500042660000000000012200542320011726 500000000000000jellyfish-1.1.11/tests/multi_file.sh0000644015303500042660000000072012151455365014353 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.stats && \ check ${pref}.md5sum RET=$? # [ -z "$NODEL" ] && \ # rm -f ${pref}_* ${pref}.md5sum ${pref}.timing ${pref}.stats exit $RET jellyfish-1.1.11/tests/parallel_fastq_sequence_hashing.sh0000644015303500042660000000077412151455365020616 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && \ # rm ${pref}.md5sum ${pref}.histo ${pref}_* ${pref}.timing exit $RET jellyfish-1.1.11/tests/parallel_hashing.sh0000755015303500042660000000263112151455365015525 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum <= 2 $JF count --matrix seq10m_matrix_22 -m 22 -t $nCPUs -o ${pref}_L \ -s 10000000 --timing ${pref}.timing -L 2 seq10m.fa # Stream output $JF count --matrix seq10m_matrix_22 -m 22 -t $nCPUs -o /dev/fd/1 -O \ -s 10000000 --timing ${pref}.timing --stats ${pref}.stats seq10m.fa | \ cat > ${pref}_S $JF histo -f ${pref}_0 > ${pref}.histo $JF dump -c ${pref}_L_0 > ${pref}_L.dump $JF dump -c -L 2 ${pref}_0 > ${pref}.dump cat ${pref}_0 | $JF dump -c -L 2 /dev/fd/0 > ${pref}_stream.dump echo "GCCATTTCGATTAAAGAATGAT TAGGCATGCAACGCTTCCCTTT" | $JF query ${pref}_0 > ${pref}.query $JF dump -c ${pref}_0 > ${pref}_all.dump $JF dump -c ${pref}_S > ${pref}_S_all.dump check ${pref}.md5sum cat ${pref}.timing jellyfish-1.1.11/tests/merge.sh0000644015303500042660000000107212151455365013322 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}_quake.histo && \ check ${pref}.md5sum RET=$? echo "Qmer timing"; cat ${pref}_quake.timing 2>/dev/null exit $RET jellyfish-1.1.11/tests/raw_hash.sh0000644015303500042660000000147612151455365014027 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.stats && \ $JF dump -c -L 2 ${pref}_0 > ${pref}_L.dump && \ $JF histo -f ${pref}_0 > ${pref}.histo && echo "GCCATTTCGATTAAAGAATGAT TAGGCATGCAACGCTTCCCTTT" | $JF query ${pref}_0 > ${pref}.query && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && \ # rm -f ${pref}_* ${pref}.md5sum ${pref}.timing ${pref}.stats exit $RET jellyfish-1.1.11/tests/compat.sh.in0000644015303500042660000000045512200443056014104 00000000000000if [ -z "$nCPUs" ]; then nCPUs=$(grep -c '^processor' /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu) fi pref=$(basename $0 .sh) DIR=../bin JF=$DIR/jellyfish check () { cut -d\ -f 2 $1 | xargs @MD5@ | sed -e 's/ \*//' | sort | diff -w $1 - } if [ -n "$DEBUG" ]; then set -x; fi set -e jellyfish-1.1.11/tests/big.sh0000644015303500042660000000160112151455365012762 00000000000000#! /bin/sh cd tests . ./compat.sh if [ -z "$BIG" ]; then echo "Skip big test" exit 77 fi sort > ${pref}.md5sum < ${pref}_31.histo && \ echo "Generate 30 Gigs of sequence and count k-mers on it" && \ ([ -f seq30g.fa ] || ${DIR}/generate_sequence -v -o seq30g -r 1000 -s 1602176487 30000000000) && \ $JF count -m 16 -s 4000000000 -o ${pref}_16 -c 4 -p 253 -C --out-counter-len 2 \ -t $nCPUs --timing ${pref}_16.timing --stats ${pref}_16.stats $JFPARAM seq30g.fa && \ $JF histo ${pref}_16_0 > ${pref}_16.histo && \ check ${pref}.md5sum RET=$? echo "16-mer timing"; cat ${pref}_16.timing exit $RET jellyfish-1.1.11/tests/small.sh0000755015303500042660000000077312151455365013345 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? echo "Small timing"; cat ${pref}.timing exit $RET jellyfish-1.1.11/tests/from_stream.sh0000644015303500042660000000132212151455365014537 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ echo "GCCATTTCGATTAAAGAATGAT TAGGCATGCAACGCTTCCCTTT" | $JF query ${pref}_0 > ${pref}.query && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && \ # rm -f ${pref}_* ${pref}.histo ${pref}.query ${pref}.md5sum \ # ${pref}.timing exit $RET jellyfish-1.1.11/tests/multi_file_fastq.sh0000644015303500042660000000077712151455365015565 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && \ # rm -f ${pref}_* ${pref}.md5sum ${pref}.histo ${pref}.timing exit $RET jellyfish-1.1.11/tests/generate_sequence.sh0000755015303500042660000000031012151455365015702 00000000000000#! /bin/sh cd tests . ./compat.sh ${DIR}/generate_sequence -v -o seq10m -m 10 -m 22 -s 3141592653 10000000 ${DIR}/generate_sequence -v -o seq1m -s 1040104553 1000000 1000000 1000000 1000000 1000000 jellyfish-1.1.11/tests/parsers.sh0000644015303500042660000000042412151455365013702 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}_double_fifo.stats && echo "Test read parser" && $DIR/test_read_parser seq10m.fa > ${pref}_read_parser_fa.dump RET=$? exit $RET jellyfish-1.1.11/tests/from_stream_fastq.sh0000644015303500042660000000102612151455365015736 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && \ # rm -f ${pref}_* ${pref}.histo ${pref}.md5sum ${pref}.timing exit $RET jellyfish-1.1.11/tests/parallel_fastq_hashing.sh0000644015303500042660000000112412151455365016714 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo $JF qdump -c -L 0.035 -U 0.905 ${pref}_0 | wc -l | awk '{ print $1 }' > ${pref}_lines.dump check ${pref}.md5sum cat ${pref}.timing jellyfish-1.1.11/tests/min_qual.sh0000644015303500042660000000064512151455365014035 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? cat ${pref}.timing 2>/dev/null exit $RET jellyfish-1.1.11/tests/parallel_direct_indexing.sh0000755015303500042660000000153212151455365017242 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}_S $JF count --matrix seq10m_matrix_10 -m 10 -t $nCPUs \ -o ${pref}_LU -s 10M -C -L 2 -U 4 seq1m_0.fa $JF histo ${pref}_0 > ${pref}.histo $JF histo ${pref}_S > ${pref}_S.histo $JF histo ${pref}_LU_0 > ${pref}_LU.histo check ${pref}.md5sum cat ${pref}.timing jellyfish-1.1.11/tests/generate_fastq_sequence.sh0000644015303500042660000000031012151455365017075 00000000000000#! /bin/sh cd tests . ./compat.sh ${DIR}/generate_sequence -v -q -o seq10m -m 19 -s 2718281828 10000000 ${DIR}/generate_sequence -v -q -o seq1m -s 3246465313 1000000 1000000 1000000 1000000 1000000 jellyfish-1.1.11/tests/serial_direct_indexing.sh0000755015303500042660000000061212151455365016723 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.md5sum < ${pref}.histo && \ check ${pref}.md5sum RET=$? cat ${pref}.timing # [ -z "$NODEL" ] && rm -f ${pref}_* ${pref}.timing ${pref}.md5sum* ${pref}.histo exit $RET jellyfish-1.1.11/tests/parallel_fastq_direct_indexing.sh0000644015303500042660000000137512151455365020442 00000000000000#! /bin/sh cd tests . ./compat.sh sort > ${pref}.md5sum < ${pref}.histo $JF histo ${pref}_Q_0 > ${pref}_Q.histo $JF histo ${pref}_LU_0 > ${pref}_LU.histo check ${pref}.md5sum cat ${pref}.timing jellyfish-1.1.11/config.h.in0000644015303500042660000000440312200542304012532 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if you use half floats for qmer counting */ #undef HALF_FLOATS /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_EXECINFO_H /* Define if type __int128 is supported */ #undef HAVE_INT128 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define if siginfo_t.si_int exists */ #undef HAVE_SI_INT /* Define if you have SSE */ #undef HAVE_SSE /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCALL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Version number of package */ #undef VERSION jellyfish-1.1.11/configure.ac0000644015303500042660000000406212200533330012775 00000000000000AC_INIT([jellyfish], [1.1.11], [gmarcais@umd.edu]) AC_CANONICAL_HOST AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([subdir-objects foreign parallel-tests color-tests]) AM_SILENT_RULES([yes]) AC_CONFIG_SRCDIR([jellyfish]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_PROG_LIBTOOL # Change default compilation flags #AC_SUBST([ALL_CXXFLAGS], [-std=c++0x]) #CXXFLAGS="-std=c++0x $CXXFLAGS" AC_LANG(C++) AC_PROG_CXX dnl define([concat], $1$2$3)dnl dnl define([PC_FILE], concat([jellyfish-],AC_PACKAGE_VERSION,[.pc])) define([PC_FILE], jellyfish-1.1.pc) AC_CONFIG_FILES([ Makefile tests/compat.sh ] PC_FILE ) AC_ARG_VAR([MD5], [Path to md5 hashing program]) AS_IF([test "x$MD5" = "x"], AC_CHECK_PROG([MD5], [md5sum], [md5sum]), []) AS_IF([test "x$MD5" = "x"], AC_CHECK_PROG([MD5], [md5], [md5 -r]), []) AS_IF([test "x$MD5" = "x"], AC_MSG_ERROR([Could not find md5 hashing program in your path]), []) AC_ARG_WITH([sse], [AS_HELP_STRING([--with-sse], [enable SSE])], [], [with_sse=no]) AS_IF([test "x$with_sse" != xno], [AC_DEFINE([HAVE_SSE], [1], [Define if you have SSE])], []) AC_ARG_WITH([half], [AS_HELP_STRING([--with-half], [enable half float (16 bits)])], [], [with_half=no]) AS_IF([test "x$with_half" = "xyes"], [AC_DEFINE([HALF_FLOATS], [1], [Define if you use half floats for qmer counting])], []) AC_CHECK_TYPE([__int128], [AC_DEFINE([HAVE_INT128], [1], [Define if type __int128 is supported])]) # Check the version of strerror_r AC_FUNC_STRERROR_R AC_CHECK_HEADERS([execinfo.h sys/syscall.h]) AC_CHECK_MEMBER([siginfo_t.si_int], [AC_DEFINE([HAVE_SI_INT], [1], [Define if siginfo_t.si_int exists])], [], [[#include ]]) # --enable-all-static # Do not use libtool if building all static AC_ARG_ENABLE([all-static], [AC_HELP_STRING([--enable-all-static], [create statically linked executable])]) STATIC_FLAGS= AS_IF([test x$enable_all_static = xyes], [AC_SUBST([STATIC_FLAGS], [-all-static])]) AC_OUTPUT jellyfish-1.1.11/unit_tests/0000755015303500042660000000000012200542320012765 500000000000000jellyfish-1.1.11/unit_tests/unit_tests.sh0000644015303500042660000000006412151455365015463 00000000000000#! /bin/sh cd tests . ./compat.sh ${DIR}/test_all jellyfish-1.1.11/unit_tests/test_square_binary_matrix.cc0000644015303500042660000000767112151455365020537 00000000000000#include #include #include #include class RandomEnvironment : public ::testing::Environment { public: virtual void SetUp() { std::ifstream dev_rand("/dev/urandom"); unsigned int seed; dev_rand.read((char *)&seed, sizeof(seed)); std::cout << "Seed: " << seed << std::endl; dev_rand.close(); srandom(seed); } }; //::testing::Environment* const foo_env = ::testing::AddGlobalTestEnvironment(new RandomEnvironment); uint64_t random_vector(int length) { uint64_t _mask = (((uint64_t)1) << length) - 1; uint64_t res = 0; int lrm = floorLog2((unsigned long)RAND_MAX); int i; for(i = 0; i < length; i += lrm) res ^= (uint64_t)random() << i; return res & _mask; } #define VECLEN 44 TEST(SquareBinaryMatrix, Initialization) { SquareBinaryMatrix small_id_m(8); small_id_m.init_identity(); ASSERT_STREQ("8x8\n10000000\n01000000\n00100000\n00010000\n00001000\n00000100\n00000010\n00000001\n", small_id_m.str().c_str()); SquareBinaryMatrix id_m(VECLEN); SquareBinaryMatrix rand_m(VECLEN); id_m.init_identity(); ASSERT_TRUE(id_m.is_identity()); ASSERT_EQ(VECLEN, id_m.get_size()); rand_m.init_random(); ASSERT_EQ(VECLEN, rand_m.get_size()); SquareBinaryMatrix rand2_m(5); rand2_m = rand_m; ASSERT_TRUE(rand_m == rand2_m); ASSERT_FALSE(rand_m != rand2_m); SquareBinaryMatrix rand3_m = rand_m; ASSERT_TRUE(rand_m == rand3_m); ASSERT_FALSE(rand_m != rand3_m); uint64_t v = random_vector(VECLEN); ASSERT_EQ(v, id_m.times(v)); ASSERT_TRUE(rand_m == rand_m.transpose().transpose()); ASSERT_TRUE(id_m == id_m.transpose()); SquareBinaryMatrix sym_m = rand_m.transpose() * rand_m; ASSERT_TRUE(sym_m == sym_m.transpose()); ASSERT_FALSE(rand_m[0] == v); // Could fail with probability 2**-64!! rand_m[0] = v; ASSERT_TRUE(rand_m[0] == v); ASSERT_TRUE(rand_m == (id_m * rand_m)); int i, regular = 0, singular = 0; for(i = 0; i < 10; i++) { SquareBinaryMatrix tmp_m(32); tmp_m.init_random(); try { SquareBinaryMatrix inv_m = tmp_m.inverse(); SquareBinaryMatrix sbi_m = inv_m * tmp_m; regular++; ASSERT_TRUE(sbi_m.is_identity()) << "Not identity\n" << sbi_m.str() << std::endl; } catch(SquareBinaryMatrix::SingularMatrix e) { singular++; } } ASSERT_EQ(10, regular + singular); for(i = 0; i < 100; i++) { v = random_vector(VECLEN); ASSERT_EQ(rand_m.times_loop(v), rand_m.times_unrolled(v)); #ifdef SSE ASSERT_EQ(rand_m.times_loop(v), rand_m.times_sse(v)); #endif } // speed tests uint64_t v1 = random_vector(VECLEN); uint64_t v2 = random_vector(VECLEN); uint64_t v3 = random_vector(VECLEN); uint64_t v4 = random_vector(VECLEN); uint64_t v5 = random_vector(VECLEN); uint64_t v6 = random_vector(VECLEN); uint64_t v7 = random_vector(VECLEN); uint64_t v8 = random_vector(VECLEN); uint64_t res_unrolled = 0, res_sse = 0; Time time1; const int nb_loops = 2560000; for(i = 0; i < nb_loops; i++) { res_unrolled ^= rand_m.times_unrolled(v1); res_unrolled ^= rand_m.times_unrolled(v2); res_unrolled ^= rand_m.times_unrolled(v3); res_unrolled ^= rand_m.times_unrolled(v4); res_unrolled ^= rand_m.times_unrolled(v5); res_unrolled ^= rand_m.times_unrolled(v6); res_unrolled ^= rand_m.times_unrolled(v7); res_unrolled ^= rand_m.times_unrolled(v8); } Time time2; for(i = 0; i < nb_loops; i++) { res_sse ^= rand_m.times_sse(v1); res_sse ^= rand_m.times_sse(v2); res_sse ^= rand_m.times_sse(v3); res_sse ^= rand_m.times_sse(v4); res_sse ^= rand_m.times_sse(v5); res_sse ^= rand_m.times_sse(v6); res_sse ^= rand_m.times_sse(v7); res_sse ^= rand_m.times_sse(v8); } Time time3; ASSERT_LT(time3 - time2, time2 - time1); // std::cout << "unrolled timing " << (time2 - time1).str() << // " sse timing " << (time3 - time2).str() << std::endl; ASSERT_EQ(res_unrolled, res_sse); } jellyfish-1.1.11/unit_tests/gtest/0000755015303500042660000000000012200542320014113 500000000000000jellyfish-1.1.11/unit_tests/gtest/include/0000755015303500042660000000000012200542320015536 500000000000000jellyfish-1.1.11/unit_tests/gtest/include/gtest/0000755015303500042660000000000012200542320016664 500000000000000jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/0000755015303500042660000000000012200542320020500 500000000000000jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-port.h0000644015303500042660000017166512151455365022742 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: wan@google.com (Zhanyong Wan) // // Low-level types and utilities for porting Google Test to various // platforms. They are subject to change without notice. DO NOT USE // THEM IN USER CODE. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning disable 2304 #endif // The user can define the following macros in the build script to // control Google Test's behavior. If the user doesn't define a macro // in this list, Google Test will define it. // // GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) // is/isn't available. // GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions // are enabled. // GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::string, which is different to std::string). // GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string // is/isn't available (some systems define // ::wstring, which is different to std::wstring). // GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular // expressions are/aren't available. // GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that // is/isn't available. // GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't // enabled. // GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that // std::wstring does/doesn't work (Google Test can // be used where std::wstring is unavailable). // GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple // is/isn't available. // GTEST_HAS_SEH - Define it to 1/0 to indicate whether the // compiler supports Microsoft's "Structured // Exception Handling". // GTEST_HAS_STREAM_REDIRECTION // - Define it to 1/0 to indicate whether the // platform supports I/O stream redirection using // dup() and dup2(). // GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google // Test's own tr1 tuple implementation should be // used. Unused when the user sets // GTEST_HAS_TR1_TUPLE to 0. // GTEST_LINKED_AS_SHARED_LIBRARY // - Define to 1 when compiling tests that use // Google Test as a shared library (known as // DLL on Windows). // GTEST_CREATE_SHARED_LIBRARY // - Define to 1 when compiling Google Test itself // as a shared library. // This header defines the following utilities: // // Macros indicating the current platform (defined to 1 if compiled on // the given platform; otherwise undefined): // GTEST_OS_AIX - IBM AIX // GTEST_OS_CYGWIN - Cygwin // GTEST_OS_HPUX - HP-UX // GTEST_OS_LINUX - Linux // GTEST_OS_LINUX_ANDROID - Google Android // GTEST_OS_MAC - Mac OS X // GTEST_OS_NACL - Google Native Client (NaCl) // GTEST_OS_SOLARIS - Sun Solaris // GTEST_OS_SYMBIAN - Symbian // GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) // GTEST_OS_WINDOWS_DESKTOP - Windows Desktop // GTEST_OS_WINDOWS_MINGW - MinGW // GTEST_OS_WINDOWS_MOBILE - Windows Mobile // GTEST_OS_ZOS - z/OS // // Among the platforms, Cygwin, Linux, Max OS X, and Windows have the // most stable support. Since core members of the Google Test project // don't have access to other platforms, support for them may be less // stable. If you notice any problems on your platform, please notify // googletestframework@googlegroups.com (patches for fixing them are // even more welcome!). // // Note that it is possible that none of the GTEST_OS_* macros are defined. // // Macros indicating available Google Test features (defined to 1 if // the corresponding feature is supported; otherwise undefined): // GTEST_HAS_COMBINE - the Combine() function (for value-parameterized // tests) // GTEST_HAS_DEATH_TEST - death tests // GTEST_HAS_PARAM_TEST - value-parameterized tests // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with // GTEST_HAS_POSIX_RE (see above) which users can // define themselves. // GTEST_USES_SIMPLE_RE - our own simple regex is used; // the above two are mutually exclusive. // GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). // // Macros for basic C++ coding: // GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. // GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a // variable don't have to be used. // GTEST_DISALLOW_ASSIGN_ - disables operator=. // GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. // GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. // // Synchronization: // Mutex, MutexLock, ThreadLocal, GetThreadCount() // - synchronization primitives. // GTEST_IS_THREADSAFE - defined to 1 to indicate that the above // synchronization primitives have real implementations // and Google Test is thread-safe; or 0 otherwise. // // Template meta programming: // is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. // IteratorTraits - partial implementation of std::iterator_traits, which // is not available in libCstd when compiled with Sun C++. // // Smart pointers: // scoped_ptr - as in TR2. // // Regular expressions: // RE - a simple regular expression class using the POSIX // Extended Regular Expression syntax on UNIX-like // platforms, or a reduced regular exception syntax on // other platforms, including Windows. // // Logging: // GTEST_LOG_() - logs messages at the specified severity level. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. // // Stdout and stderr capturing: // CaptureStdout() - starts capturing stdout. // GetCapturedStdout() - stops capturing stdout and returns the captured // string. // CaptureStderr() - starts capturing stderr. // GetCapturedStderr() - stops capturing stderr and returns the captured // string. // // Integer types: // TypeWithSize - maps an integer to a int type. // Int32, UInt32, Int64, UInt64, TimeInMillis // - integers of known sizes. // BiggestInt - the biggest signed integer type. // // Command-line utilities: // GTEST_FLAG() - references a flag. // GTEST_DECLARE_*() - declares a flag. // GTEST_DEFINE_*() - defines a flag. // GetArgvs() - returns the command line as a vector of strings. // // Environment variable utilities: // GetEnv() - gets the value of an environment variable. // BoolFromGTestEnv() - parses a bool environment variable. // Int32FromGTestEnv() - parses an Int32 environment variable. // StringFromGTestEnv() - parses a string environment variable. #include // for isspace, etc #include // for ptrdiff_t #include #include #include #ifndef _WIN32_WCE # include # include #endif // !_WIN32_WCE #include // NOLINT #include // NOLINT #include // NOLINT #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" #define GTEST_FLAG_PREFIX_ "gtest_" #define GTEST_FLAG_PREFIX_DASH_ "gtest-" #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" #define GTEST_NAME_ "Google Test" #define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" // Determines the version of gcc that is used to compile this. #ifdef __GNUC__ // 40302 means version 4.3.2. # define GTEST_GCC_VER_ \ (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) #endif // __GNUC__ // Determines the platform on which Google Test is compiled. #ifdef __CYGWIN__ # define GTEST_OS_CYGWIN 1 #elif defined __SYMBIAN32__ # define GTEST_OS_SYMBIAN 1 #elif defined _WIN32 # define GTEST_OS_WINDOWS 1 # ifdef _WIN32_WCE # define GTEST_OS_WINDOWS_MOBILE 1 # elif defined(__MINGW__) || defined(__MINGW32__) # define GTEST_OS_WINDOWS_MINGW 1 # else # define GTEST_OS_WINDOWS_DESKTOP 1 # endif // _WIN32_WCE #elif defined __APPLE__ # define GTEST_OS_MAC 1 #elif defined __linux__ # define GTEST_OS_LINUX 1 # ifdef ANDROID # define GTEST_OS_LINUX_ANDROID 1 # endif // ANDROID #elif defined __MVS__ # define GTEST_OS_ZOS 1 #elif defined(__sun) && defined(__SVR4) # define GTEST_OS_SOLARIS 1 #elif defined(_AIX) # define GTEST_OS_AIX 1 #elif defined(__hpux) # define GTEST_OS_HPUX 1 #elif defined __native_client__ # define GTEST_OS_NACL 1 #endif // __CYGWIN__ // Brings in definitions for functions used in the testing::internal::posix // namespace (read, write, close, chdir, isatty, stat). We do not currently // use them on Windows Mobile. #if !GTEST_OS_WINDOWS // This assumes that non-Windows OSes provide unistd.h. For OSes where this // is not the case, we need to include headers that provide the functions // mentioned above. # include # if !GTEST_OS_NACL // TODO(vladl@google.com): Remove this condition when Native Client SDK adds // strings.h (tracked in // http://code.google.com/p/nativeclient/issues/detail?id=1175). # include // Native Client doesn't provide strings.h. # endif #elif !GTEST_OS_WINDOWS_MOBILE # include # include #endif // Defines this to true iff Google Test can use POSIX regular expressions. #ifndef GTEST_HAS_POSIX_RE # define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) #endif #if GTEST_HAS_POSIX_RE // On some platforms, needs someone to define size_t, and // won't compile otherwise. We can #include it here as we already // included , which is guaranteed to define size_t through // . # include // NOLINT # define GTEST_USES_POSIX_RE 1 #elif GTEST_OS_WINDOWS // is not available on Windows. Use our own simple regex // implementation instead. # define GTEST_USES_SIMPLE_RE 1 #else // may not be available on this platform. Use our own // simple regex implementation instead. # define GTEST_USES_SIMPLE_RE 1 #endif // GTEST_HAS_POSIX_RE #ifndef GTEST_HAS_EXCEPTIONS // The user didn't tell us whether exceptions are enabled, so we need // to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS // macro to enable exceptions, so we'll do the same. // Assumes that exceptions are enabled by default. # ifndef _HAS_EXCEPTIONS # define _HAS_EXCEPTIONS 1 # endif // _HAS_EXCEPTIONS # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS # elif defined(__GNUC__) && __EXCEPTIONS // gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__SUNPRO_CC) // Sun Pro CC supports exceptions. However, there is no compile-time way of // detecting whether they are enabled or not. Therefore, we assume that // they are enabled unless the user tells us otherwise. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__IBMCPP__) && __EXCEPTIONS // xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__HP_aCC) // Exception handling is in effect by default in HP aCC compiler. It has to // be turned of by +noeh compiler option if desired. # define GTEST_HAS_EXCEPTIONS 1 # else // For other compilers, we assume exceptions are disabled to be // conservative. # define GTEST_HAS_EXCEPTIONS 0 # endif // defined(_MSC_VER) || defined(__BORLANDC__) #endif // GTEST_HAS_EXCEPTIONS #if !defined(GTEST_HAS_STD_STRING) // Even though we don't use this macro any longer, we keep it in case // some clients still depend on it. # define GTEST_HAS_STD_STRING 1 #elif !GTEST_HAS_STD_STRING // The user told us that ::std::string isn't available. # error "Google Test cannot be used where ::std::string isn't available." #endif // !defined(GTEST_HAS_STD_STRING) #ifndef GTEST_HAS_GLOBAL_STRING // The user didn't tell us whether ::string is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_STRING 0 #endif // GTEST_HAS_GLOBAL_STRING #ifndef GTEST_HAS_STD_WSTRING // The user didn't tell us whether ::std::wstring is available, so we need // to figure it out. // TODO(wan@google.com): uses autoconf to detect whether ::std::wstring // is available. // Cygwin 1.7 and below doesn't support ::std::wstring. // Solaris' libc++ doesn't support it either. Android has // no support for it at least as recent as Froyo (2.2). # define GTEST_HAS_STD_WSTRING \ (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) #endif // GTEST_HAS_STD_WSTRING #ifndef GTEST_HAS_GLOBAL_WSTRING // The user didn't tell us whether ::wstring is available, so we need // to figure it out. # define GTEST_HAS_GLOBAL_WSTRING \ (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) #endif // GTEST_HAS_GLOBAL_WSTRING // Determines whether RTTI is available. #ifndef GTEST_HAS_RTTI // The user didn't tell us whether RTTI is enabled, so we need to // figure it out. # ifdef _MSC_VER # ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif // Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) # ifdef __GXX_RTTI # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif // __GXX_RTTI // Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if // both the typeid and dynamic_cast features are present. # elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) # ifdef __RTTI_ALL__ # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif # else // For all other compilers, we assume RTTI is enabled. # define GTEST_HAS_RTTI 1 # endif // _MSC_VER #endif // GTEST_HAS_RTTI // It's this header's responsibility to #include when RTTI // is enabled. #if GTEST_HAS_RTTI # include #endif // Determines whether Google Test can use the pthreads library. #ifndef GTEST_HAS_PTHREAD // The user didn't tell us explicitly, so we assume pthreads support is // available on Linux and Mac. // // To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 // to your compiler flags. # define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD // gtest-port.h guarantees to #include when GTEST_HAS_PTHREAD is // true. # include // NOLINT // For timespec and nanosleep, used below. # include // NOLINT #endif // Determines whether Google Test can use tr1/tuple. You can define // this macro to 0 to prevent Google Test from using tuple (any // feature depending on tuple with be disabled in this mode). #ifndef GTEST_HAS_TR1_TUPLE // The user didn't tell us not to do it, so we assume it's OK. # define GTEST_HAS_TR1_TUPLE 1 #endif // GTEST_HAS_TR1_TUPLE // Determines whether Google Test's own tr1 tuple implementation // should be used. #ifndef GTEST_USE_OWN_TR1_TUPLE // The user didn't tell us, so we need to figure it out. // We use our own TR1 tuple if we aren't sure the user has an // implementation of it already. At this time, GCC 4.0.0+ and MSVC // 2010 are the only mainstream compilers that come with a TR1 tuple // implementation. NVIDIA's CUDA NVCC compiler pretends to be GCC by // defining __GNUC__ and friends, but cannot compile GCC's tuple // implementation. MSVC 2008 (9.0) provides TR1 tuple in a 323 MB // Feature Pack download, which we cannot assume the user has. # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \ || _MSC_VER >= 1600 # define GTEST_USE_OWN_TR1_TUPLE 0 # else # define GTEST_USE_OWN_TR1_TUPLE 1 # endif #endif // GTEST_USE_OWN_TR1_TUPLE // To avoid conditional compilation everywhere, we make it // gtest-port.h's responsibility to #include the header implementing // tr1/tuple. #if GTEST_HAS_TR1_TUPLE # if GTEST_USE_OWN_TR1_TUPLE # include "gtest/internal/gtest-tuple.h" # elif GTEST_OS_SYMBIAN // On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to // use STLport's tuple implementation, which unfortunately doesn't // work as the copy of STLport distributed with Symbian is incomplete. // By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to // use its own tuple implementation. # ifdef BOOST_HAS_TR1_TUPLE # undef BOOST_HAS_TR1_TUPLE # endif // BOOST_HAS_TR1_TUPLE // This prevents , which defines // BOOST_HAS_TR1_TUPLE, from being #included by Boost's . # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED # include # elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) // GCC 4.0+ implements tr1/tuple in the header. This does // not conform to the TR1 spec, which requires the header to be . # if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 // Until version 4.3.2, gcc has a bug that causes , // which is #included by , to not compile when RTTI is // disabled. _TR1_FUNCTIONAL is the header guard for // . Hence the following #define is a hack to prevent // from being included. # define _TR1_FUNCTIONAL 1 # include # undef _TR1_FUNCTIONAL // Allows the user to #include // if he chooses to. # else # include // NOLINT # endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 # else // If the compiler is not GCC 4.0+, we assume the user is using a // spec-conforming TR1 implementation. # include // NOLINT # endif // GTEST_USE_OWN_TR1_TUPLE #endif // GTEST_HAS_TR1_TUPLE // Determines whether clone(2) is supported. // Usually it will only be available on Linux, excluding // Linux on the Itanium architecture. // Also see http://linux.die.net/man/2/clone. #ifndef GTEST_HAS_CLONE // The user didn't tell us, so we need to figure it out. # if GTEST_OS_LINUX && !defined(__ia64__) # define GTEST_HAS_CLONE 1 # else # define GTEST_HAS_CLONE 0 # endif // GTEST_OS_LINUX && !defined(__ia64__) #endif // GTEST_HAS_CLONE // Determines whether to support stream redirection. This is used to test // output correctness and to implement death tests. #ifndef GTEST_HAS_STREAM_REDIRECTION // By default, we assume that stream redirection is supported on all // platforms except known mobile ones. # if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN # define GTEST_HAS_STREAM_REDIRECTION 0 # else # define GTEST_HAS_STREAM_REDIRECTION 1 # endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN #endif // GTEST_HAS_STREAM_REDIRECTION // Determines whether to support death tests. // Google Test does not support death tests for VC 7.1 and earlier as // abort() in a VC 7.1 application compiled as GUI in debug config // pops up a dialog window that cannot be suppressed programmatically. #if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX) # define GTEST_HAS_DEATH_TEST 1 # include // NOLINT #endif // We don't support MSVC 7.1 with exceptions disabled now. Therefore // all the compilers we care about are adequate for supporting // value-parameterized tests. #define GTEST_HAS_PARAM_TEST 1 // Determines whether to support type-driven tests. // Typed tests need and variadic macros, which GCC, VC++ 8.0, // Sun Pro CC, IBM Visual Age, and HP aCC support. #if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ defined(__IBMCPP__) || defined(__HP_aCC) # define GTEST_HAS_TYPED_TEST 1 # define GTEST_HAS_TYPED_TEST_P 1 #endif // Determines whether to support Combine(). This only makes sense when // value-parameterized tests are enabled. The implementation doesn't // work on Sun Studio since it doesn't understand templated conversion // operators. #if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC) # define GTEST_HAS_COMBINE 1 #endif // Determines whether the system compiler uses UTF-16 for encoding wide strings. #define GTEST_WIDE_STRING_USES_UTF16_ \ (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) // Determines whether test results can be streamed to a socket. #if GTEST_OS_LINUX # define GTEST_CAN_STREAM_RESULTS_ 1 #endif // Defines some utility macros. // The GNU compiler emits a warning if nested "if" statements are followed by // an "else" statement and braces are not used to explicitly disambiguate the // "else" binding. This leads to problems with code like: // // if (gate) // ASSERT_*(condition) << "Some message"; // // The "switch (0) case 0:" idiom is used to suppress this. #ifdef __INTEL_COMPILER # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ #else # define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT #endif // Use this annotation at the end of a struct/class definition to // prevent the compiler from optimizing away instances that are never // used. This is useful when all interesting logic happens inside the // c'tor and / or d'tor. Example: // // struct Foo { // Foo() { ... } // } GTEST_ATTRIBUTE_UNUSED_; // // Also use it after a variable or parameter declaration to tell the // compiler the variable/parameter does not have to be used. #if defined(__GNUC__) && !defined(COMPILER_ICC) # define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) #else # define GTEST_ATTRIBUTE_UNUSED_ #endif // A macro to disallow operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_ASSIGN_(type)\ void operator=(type const &) // A macro to disallow copy constructor and operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ type(type const &);\ GTEST_DISALLOW_ASSIGN_(type) // Tell the compiler to warn about unused return values for functions declared // with this macro. The macro should be used on function declarations // following the argument list: // // Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; #if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) #else # define GTEST_MUST_USE_RESULT_ #endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC // Determine whether the compiler supports Microsoft's Structured Exception // Handling. This is supported by several Windows compilers but generally // does not exist on any other system. #ifndef GTEST_HAS_SEH // The user didn't tell us, so we need to figure it out. # if defined(_MSC_VER) || defined(__BORLANDC__) // These two compilers are known to support SEH. # define GTEST_HAS_SEH 1 # else // Assume no SEH. # define GTEST_HAS_SEH 0 # endif #endif // GTEST_HAS_SEH #ifdef _MSC_VER # if GTEST_LINKED_AS_SHARED_LIBRARY # define GTEST_API_ __declspec(dllimport) # elif GTEST_CREATE_SHARED_LIBRARY # define GTEST_API_ __declspec(dllexport) # endif #endif // _MSC_VER #ifndef GTEST_API_ # define GTEST_API_ #endif #ifdef __GNUC__ // Ask the compiler to never inline a given function. # define GTEST_NO_INLINE_ __attribute__((noinline)) #else # define GTEST_NO_INLINE_ #endif namespace testing { class Message; namespace internal { class String; // The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time // expression is true. For example, you could use it to verify the // size of a static array: // // GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, // content_type_names_incorrect_size); // // or to make sure a struct is smaller than a certain size: // // GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); // // The second argument to the macro is the name of the variable. If // the expression is false, most compilers will issue a warning/error // containing the name of the variable. template struct CompileAssert { }; #define GTEST_COMPILE_ASSERT_(expr, msg) \ typedef ::testing::internal::CompileAssert<(bool(expr))> \ msg[bool(expr) ? 1 : -1] // Implementation details of GTEST_COMPILE_ASSERT_: // // - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 // elements (and thus is invalid) when the expression is false. // // - The simpler definition // // #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] // // does not work, as gcc supports variable-length arrays whose sizes // are determined at run-time (this is gcc's extension and not part // of the C++ standard). As a result, gcc fails to reject the // following code with the simple definition: // // int foo; // GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is // // not a compile-time constant. // // - By using the type CompileAssert<(bool(expr))>, we ensures that // expr is a compile-time constant. (Template arguments must be // determined at compile-time.) // // - The outter parentheses in CompileAssert<(bool(expr))> are necessary // to work around a bug in gcc 3.4.4 and 4.0.1. If we had written // // CompileAssert // // instead, these compilers will refuse to compile // // GTEST_COMPILE_ASSERT_(5 > 0, some_message); // // (They seem to think the ">" in "5 > 0" marks the end of the // template argument list.) // // - The array size is (bool(expr) ? 1 : -1), instead of simply // // ((expr) ? 1 : -1). // // This is to avoid running into a bug in MS VC 7.1, which // causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. // StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. // // This template is declared, but intentionally undefined. template struct StaticAssertTypeEqHelper; template struct StaticAssertTypeEqHelper {}; #if GTEST_HAS_GLOBAL_STRING typedef ::string string; #else typedef ::std::string string; #endif // GTEST_HAS_GLOBAL_STRING #if GTEST_HAS_GLOBAL_WSTRING typedef ::wstring wstring; #elif GTEST_HAS_STD_WSTRING typedef ::std::wstring wstring; #endif // GTEST_HAS_GLOBAL_WSTRING // A helper for suppressing warnings on constant condition. It just // returns 'condition'. GTEST_API_ bool IsTrue(bool condition); // Defines scoped_ptr. // This implementation of scoped_ptr is PARTIAL - it only contains // enough stuff to satisfy Google Test's need. template class scoped_ptr { public: typedef T element_type; explicit scoped_ptr(T* p = NULL) : ptr_(p) {} ~scoped_ptr() { reset(); } T& operator*() const { return *ptr_; } T* operator->() const { return ptr_; } T* get() const { return ptr_; } T* release() { T* const ptr = ptr_; ptr_ = NULL; return ptr; } void reset(T* p = NULL) { if (p != ptr_) { if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. delete ptr_; } ptr_ = p; } } private: T* ptr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); }; // Defines RE. // A simple C++ wrapper for . It uses the POSIX Extended // Regular Expression syntax. class GTEST_API_ RE { public: // A copy constructor is required by the Standard to initialize object // references from r-values. RE(const RE& other) { Init(other.pattern()); } // Constructs an RE from a string. RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT #if GTEST_HAS_GLOBAL_STRING RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT #endif // GTEST_HAS_GLOBAL_STRING RE(const char* regex) { Init(regex); } // NOLINT ~RE(); // Returns the string representation of the regex. const char* pattern() const { return pattern_; } // FullMatch(str, re) returns true iff regular expression re matches // the entire str. // PartialMatch(str, re) returns true iff regular expression re // matches a substring of str (including str itself). // // TODO(wan@google.com): make FullMatch() and PartialMatch() work // when str contains NUL characters. static bool FullMatch(const ::std::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::std::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #if GTEST_HAS_GLOBAL_STRING static bool FullMatch(const ::string& str, const RE& re) { return FullMatch(str.c_str(), re); } static bool PartialMatch(const ::string& str, const RE& re) { return PartialMatch(str.c_str(), re); } #endif // GTEST_HAS_GLOBAL_STRING static bool FullMatch(const char* str, const RE& re); static bool PartialMatch(const char* str, const RE& re); private: void Init(const char* regex); // We use a const char* instead of a string, as Google Test may be used // where string is not available. We also do not use Google Test's own // String type here, in order to simplify dependencies between the // files. const char* pattern_; bool is_valid_; #if GTEST_USES_POSIX_RE regex_t full_regex_; // For FullMatch(). regex_t partial_regex_; // For PartialMatch(). #else // GTEST_USES_SIMPLE_RE const char* full_pattern_; // For FullMatch(); #endif GTEST_DISALLOW_ASSIGN_(RE); }; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line); // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, int line); // Defines logging utilities: // GTEST_LOG_(severity) - logs messages at the specified severity level. The // message itself is streamed into the macro. // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. enum GTestLogSeverity { GTEST_INFO, GTEST_WARNING, GTEST_ERROR, GTEST_FATAL }; // Formats log entry severity, provides a stream object for streaming the // log message, and terminates the message with a newline when going out of // scope. class GTEST_API_ GTestLog { public: GTestLog(GTestLogSeverity severity, const char* file, int line); // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. ~GTestLog(); ::std::ostream& GetStream() { return ::std::cerr; } private: const GTestLogSeverity severity_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); }; #define GTEST_LOG_(severity) \ ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ __FILE__, __LINE__).GetStream() inline void LogToStderr() {} inline void FlushInfoLog() { fflush(NULL); } // INTERNAL IMPLEMENTATION - DO NOT USE. // // GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition // is not satisfied. // Synopsys: // GTEST_CHECK_(boolean_condition); // or // GTEST_CHECK_(boolean_condition) << "Additional message"; // // This checks the condition and if the condition is not satisfied // it prints message about the condition violation, including the // condition itself, plus additional message streamed into it, if any, // and then it aborts the program. It aborts the program irrespective of // whether it is built in the debug mode or not. #define GTEST_CHECK_(condition) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::IsTrue(condition)) \ ; \ else \ GTEST_LOG_(FATAL) << "Condition " #condition " failed. " // An all-mode assert to verify that the given POSIX-style function // call returns 0 (indicating success). Known limitation: this // doesn't expand to a balanced 'if' statement, so enclose the macro // in {} if you need to use it as the only statement in an 'if' // branch. #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ if (const int gtest_error = (posix_call)) \ GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ << gtest_error // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Use ImplicitCast_ as a safe version of static_cast for upcasting in // the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a // const Foo*). When you use ImplicitCast_, the compiler checks that // the cast is safe. Such explicit ImplicitCast_s are necessary in // surprisingly many situations where C++ demands an exact type match // instead of an argument type convertable to a target type. // // The syntax for using ImplicitCast_ is the same as for static_cast: // // ImplicitCast_(expr) // // ImplicitCast_ would have been part of the C++ standard library, // but the proposal was submitted too late. It will probably make // its way into the language in the future. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., implicit_cast). The internal // namespace alone is not enough because the function can be found by ADL. template inline To ImplicitCast_(To x) { return x; } // When you upcast (that is, cast a pointer from type Foo to type // SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts // always succeed. When you downcast (that is, cast a pointer from // type Foo to type SubclassOfFoo), static_cast<> isn't safe, because // how do you know the pointer is really of type SubclassOfFoo? It // could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, // when you downcast, you should use this macro. In debug mode, we // use dynamic_cast<> to double-check the downcast is legal (we die // if it's not). In normal mode, we do the efficient static_cast<> // instead. Thus, it's important to test in debug mode to make sure // the cast is legal! // This is the only place in the code we should use dynamic_cast<>. // In particular, you SHOULDN'T be using dynamic_cast<> in order to // do RTTI (eg code like this: // if (dynamic_cast(foo)) HandleASubclass1Object(foo); // if (dynamic_cast(foo)) HandleASubclass2Object(foo); // You should design the code some other way not to need this. // // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., down_cast). The internal // namespace alone is not enough because the function can be found by ADL. template // use like this: DownCast_(foo); inline To DownCast_(From* f) { // so we only accept pointers // Ensures that To is a sub-type of From *. This test is here only // for compile-time type checking, and has no overhead in an // optimized build at run-time, as it will be optimized away // completely. if (false) { const To to = NULL; ::testing::internal::ImplicitCast_(to); } #if GTEST_HAS_RTTI // RTTI: debug mode only! GTEST_CHECK_(f == NULL || dynamic_cast(f) != NULL); #endif return static_cast(f); } // Downcasts the pointer of type Base to Derived. // Derived must be a subclass of Base. The parameter MUST // point to a class of type Derived, not any subclass of it. // When RTTI is available, the function performs a runtime // check to enforce this. template Derived* CheckedDowncastToActualType(Base* base) { #if GTEST_HAS_RTTI GTEST_CHECK_(typeid(*base) == typeid(Derived)); return dynamic_cast(base); // NOLINT #else return static_cast(base); // Poor man's downcast. #endif } #if GTEST_HAS_STREAM_REDIRECTION // Defines the stderr capturer: // CaptureStdout - starts capturing stdout. // GetCapturedStdout - stops capturing stdout and returns the captured string. // CaptureStderr - starts capturing stderr. // GetCapturedStderr - stops capturing stderr and returns the captured string. // GTEST_API_ void CaptureStdout(); GTEST_API_ String GetCapturedStdout(); GTEST_API_ void CaptureStderr(); GTEST_API_ String GetCapturedStderr(); #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST // A copy of all command line arguments. Set by InitGoogleTest(). extern ::std::vector g_argvs; // GTEST_HAS_DEATH_TEST implies we have ::std::string. const ::std::vector& GetArgvs(); #endif // GTEST_HAS_DEATH_TEST // Defines synchronization primitives. #if GTEST_HAS_PTHREAD // Sleeps for (roughly) n milli-seconds. This function is only for // testing Google Test's own constructs. Don't use it in user tests, // either directly or indirectly. inline void SleepMilliseconds(int n) { const timespec time = { 0, // 0 seconds. n * 1000L * 1000L, // And n ms. }; nanosleep(&time, NULL); } // Allows a controller thread to pause execution of newly created // threads until notified. Instances of this class must be created // and destroyed in the controller thread. // // This class is only for testing Google Test's own constructs. Do not // use it in user tests, either directly or indirectly. class Notification { public: Notification() : notified_(false) {} // Notifies all threads created with this notification to start. Must // be called from the controller thread. void Notify() { notified_ = true; } // Blocks until the controller thread notifies. Must be called from a test // thread. void WaitForNotification() { while(!notified_) { SleepMilliseconds(10); } } private: volatile bool notified_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); }; // As a C-function, ThreadFuncWithCLinkage cannot be templated itself. // Consequently, it cannot select a correct instantiation of ThreadWithParam // in order to call its Run(). Introducing ThreadWithParamBase as a // non-templated base class for ThreadWithParam allows us to bypass this // problem. class ThreadWithParamBase { public: virtual ~ThreadWithParamBase() {} virtual void Run() = 0; }; // pthread_create() accepts a pointer to a function type with the C linkage. // According to the Standard (7.5/1), function types with different linkages // are different even if they are otherwise identical. Some compilers (for // example, SunStudio) treat them as different types. Since class methods // cannot be defined with C-linkage we need to define a free C-function to // pass into pthread_create(). extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { static_cast(thread)->Run(); return NULL; } // Helper class for testing Google Test's multi-threading constructs. // To use it, write: // // void ThreadFunc(int param) { /* Do things with param */ } // Notification thread_can_start; // ... // // The thread_can_start parameter is optional; you can supply NULL. // ThreadWithParam thread(&ThreadFunc, 5, &thread_can_start); // thread_can_start.Notify(); // // These classes are only for testing Google Test's own constructs. Do // not use them in user tests, either directly or indirectly. template class ThreadWithParam : public ThreadWithParamBase { public: typedef void (*UserThreadFunc)(T); ThreadWithParam( UserThreadFunc func, T param, Notification* thread_can_start) : func_(func), param_(param), thread_can_start_(thread_can_start), finished_(false) { ThreadWithParamBase* const base = this; // The thread can be created only after all fields except thread_ // have been initialized. GTEST_CHECK_POSIX_SUCCESS_( pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); } ~ThreadWithParam() { Join(); } void Join() { if (!finished_) { GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); finished_ = true; } } virtual void Run() { if (thread_can_start_ != NULL) thread_can_start_->WaitForNotification(); func_(param_); } private: const UserThreadFunc func_; // User-supplied thread function. const T param_; // User-supplied parameter to the thread function. // When non-NULL, used to block execution until the controller thread // notifies. Notification* const thread_can_start_; bool finished_; // true iff we know that the thread function has finished. pthread_t thread_; // The native thread object. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); }; // MutexBase and Mutex implement mutex on pthreads-based platforms. They // are used in conjunction with class MutexLock: // // Mutex mutex; // ... // MutexLock lock(&mutex); // Acquires the mutex and releases it at the end // // of the current scope. // // MutexBase implements behavior for both statically and dynamically // allocated mutexes. Do not use MutexBase directly. Instead, write // the following to define a static mutex: // // GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex); // // You can forward declare a static mutex like this: // // GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex); // // To create a dynamic mutex, just define an object of type Mutex. class MutexBase { public: // Acquires this mutex. void Lock() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_)); owner_ = pthread_self(); } // Releases this mutex. void Unlock() { // We don't protect writing to owner_ here, as it's the caller's // responsibility to ensure that the current thread holds the // mutex when this is called. owner_ = 0; GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_)); } // Does nothing if the current thread holds the mutex. Otherwise, crashes // with high probability. void AssertHeld() const { GTEST_CHECK_(owner_ == pthread_self()) << "The current thread is not holding the mutex @" << this; } // A static mutex may be used before main() is entered. It may even // be used before the dynamic initialization stage. Therefore we // must be able to initialize a static mutex object at link time. // This means MutexBase has to be a POD and its member variables // have to be public. public: pthread_mutex_t mutex_; // The underlying pthread mutex. pthread_t owner_; // The thread holding the mutex; 0 means no one holds it. }; // Forward-declares a static mutex. # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::MutexBase mutex // Defines and statically (i.e. at link time) initializes a static mutex. # define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 } // The Mutex class can only be used for mutexes created at runtime. It // shares its API with MutexBase otherwise. class Mutex : public MutexBase { public: Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); owner_ = 0; } ~Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); }; // We cannot name this class MutexLock as the ctor declaration would // conflict with a macro named MutexLock, which is defined on some // platforms. Hence the typedef trick below. class GTestMutexLock { public: explicit GTestMutexLock(MutexBase* mutex) : mutex_(mutex) { mutex_->Lock(); } ~GTestMutexLock() { mutex_->Unlock(); } private: MutexBase* const mutex_; GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); }; typedef GTestMutexLock MutexLock; // Helpers for ThreadLocal. // pthread_key_create() requires DeleteThreadLocalValue() to have // C-linkage. Therefore it cannot be templatized to access // ThreadLocal. Hence the need for class // ThreadLocalValueHolderBase. class ThreadLocalValueHolderBase { public: virtual ~ThreadLocalValueHolderBase() {} }; // Called by pthread to delete thread-local data stored by // pthread_setspecific(). extern "C" inline void DeleteThreadLocalValue(void* value_holder) { delete static_cast(value_holder); } // Implements thread-local storage on pthreads-based systems. // // // Thread 1 // ThreadLocal tl(100); // 100 is the default value for each thread. // // // Thread 2 // tl.set(150); // Changes the value for thread 2 only. // EXPECT_EQ(150, tl.get()); // // // Thread 1 // EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value. // tl.set(200); // EXPECT_EQ(200, tl.get()); // // The template type argument T must have a public copy constructor. // In addition, the default ThreadLocal constructor requires T to have // a public default constructor. // // An object managed for a thread by a ThreadLocal instance is deleted // when the thread exits. Or, if the ThreadLocal instance dies in // that thread, when the ThreadLocal dies. It's the user's // responsibility to ensure that all other threads using a ThreadLocal // have exited when it dies, or the per-thread objects for those // threads will not be deleted. // // Google Test only uses global ThreadLocal objects. That means they // will die after main() has returned. Therefore, no per-thread // object managed by Google Test will be leaked as long as all threads // using Google Test have exited when main() returns. template class ThreadLocal { public: ThreadLocal() : key_(CreateKey()), default_() {} explicit ThreadLocal(const T& value) : key_(CreateKey()), default_(value) {} ~ThreadLocal() { // Destroys the managed object for the current thread, if any. DeleteThreadLocalValue(pthread_getspecific(key_)); // Releases resources associated with the key. This will *not* // delete managed objects for other threads. GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_)); } T* pointer() { return GetOrCreateValue(); } const T* pointer() const { return GetOrCreateValue(); } const T& get() const { return *pointer(); } void set(const T& value) { *pointer() = value; } private: // Holds a value of type T. class ValueHolder : public ThreadLocalValueHolderBase { public: explicit ValueHolder(const T& value) : value_(value) {} T* pointer() { return &value_; } private: T value_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); }; static pthread_key_t CreateKey() { pthread_key_t key; // When a thread exits, DeleteThreadLocalValue() will be called on // the object managed for that thread. GTEST_CHECK_POSIX_SUCCESS_( pthread_key_create(&key, &DeleteThreadLocalValue)); return key; } T* GetOrCreateValue() const { ThreadLocalValueHolderBase* const holder = static_cast(pthread_getspecific(key_)); if (holder != NULL) { return CheckedDowncastToActualType(holder)->pointer(); } ValueHolder* const new_holder = new ValueHolder(default_); ThreadLocalValueHolderBase* const holder_base = new_holder; GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base)); return new_holder->pointer(); } // A key pthreads uses for looking up per-thread values. const pthread_key_t key_; const T default_; // The default value for each thread. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); }; # define GTEST_IS_THREADSAFE 1 #else // GTEST_HAS_PTHREAD // A dummy implementation of synchronization primitives (mutex, lock, // and thread-local variable). Necessary for compiling Google Test where // mutex is not supported - using Google Test in multiple threads is not // supported on such platforms. class Mutex { public: Mutex() {} void AssertHeld() const {} }; # define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::Mutex mutex # define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex class GTestMutexLock { public: explicit GTestMutexLock(Mutex*) {} // NOLINT }; typedef GTestMutexLock MutexLock; template class ThreadLocal { public: ThreadLocal() : value_() {} explicit ThreadLocal(const T& value) : value_(value) {} T* pointer() { return &value_; } const T* pointer() const { return &value_; } const T& get() const { return value_; } void set(const T& value) { value_ = value; } private: T value_; }; // The above synchronization primitives have dummy implementations. // Therefore Google Test is not thread-safe. # define GTEST_IS_THREADSAFE 0 #endif // GTEST_HAS_PTHREAD // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. GTEST_API_ size_t GetThreadCount(); // Passing non-POD classes through ellipsis (...) crashes the ARM // compiler and generates a warning in Sun Studio. The Nokia Symbian // and the IBM XL C/C++ compiler try to instantiate a copy constructor // for objects passed through ellipsis (...), failing for uncopyable // objects. We define this to ensure that only POD is passed through // ellipsis on these systems. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_ELLIPSIS_NEEDS_POD_ 1 #else # define GTEST_CAN_COMPARE_NULL 1 #endif // The Nokia Symbian and IBM XL C/C++ compilers cannot decide between // const T& and const T* in a function template. These compilers // _can_ decide between class template specializations for T and T*, // so a tr1::type_traits-like is_pointer works. #if defined(__SYMBIAN32__) || defined(__IBMCPP__) # define GTEST_NEEDS_IS_POINTER_ 1 #endif template struct bool_constant { typedef bool_constant type; static const bool value = bool_value; }; template const bool bool_constant::value; typedef bool_constant false_type; typedef bool_constant true_type; template struct is_pointer : public false_type {}; template struct is_pointer : public true_type {}; template struct IteratorTraits { typedef typename Iterator::value_type value_type; }; template struct IteratorTraits { typedef T value_type; }; template struct IteratorTraits { typedef T value_type; }; #if GTEST_OS_WINDOWS # define GTEST_PATH_SEP_ "\\" # define GTEST_HAS_ALT_PATH_SEP_ 1 // The biggest signed integer type the compiler supports. typedef __int64 BiggestInt; #else # define GTEST_PATH_SEP_ "/" # define GTEST_HAS_ALT_PATH_SEP_ 0 typedef long long BiggestInt; // NOLINT #endif // GTEST_OS_WINDOWS // Utilities for char. // isspace(int ch) and friends accept an unsigned char or EOF. char // may be signed, depending on the compiler (or compiler flags). // Therefore we need to cast a char to unsigned char before calling // isspace(), etc. inline bool IsAlpha(char ch) { return isalpha(static_cast(ch)) != 0; } inline bool IsAlNum(char ch) { return isalnum(static_cast(ch)) != 0; } inline bool IsDigit(char ch) { return isdigit(static_cast(ch)) != 0; } inline bool IsLower(char ch) { return islower(static_cast(ch)) != 0; } inline bool IsSpace(char ch) { return isspace(static_cast(ch)) != 0; } inline bool IsUpper(char ch) { return isupper(static_cast(ch)) != 0; } inline bool IsXDigit(char ch) { return isxdigit(static_cast(ch)) != 0; } inline char ToLower(char ch) { return static_cast(tolower(static_cast(ch))); } inline char ToUpper(char ch) { return static_cast(toupper(static_cast(ch))); } // The testing::internal::posix namespace holds wrappers for common // POSIX functions. These wrappers hide the differences between // Windows/MSVC and POSIX systems. Since some compilers define these // standard functions as macros, the wrapper cannot have the same name // as the wrapped function. namespace posix { // Functions with a different name on Windows. #if GTEST_OS_WINDOWS typedef struct _stat StatStruct; # ifdef __BORLANDC__ inline int IsATTY(int fd) { return isatty(fd); } inline int StrCaseCmp(const char* s1, const char* s2) { return stricmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } # else // !__BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int IsATTY(int /* fd */) { return 0; } # else inline int IsATTY(int fd) { return _isatty(fd); } # endif // GTEST_OS_WINDOWS_MOBILE inline int StrCaseCmp(const char* s1, const char* s2) { return _stricmp(s1, s2); } inline char* StrDup(const char* src) { return _strdup(src); } # endif // __BORLANDC__ # if GTEST_OS_WINDOWS_MOBILE inline int FileNo(FILE* file) { return reinterpret_cast(_fileno(file)); } // Stat(), RmDir(), and IsDir() are not needed on Windows CE at this // time and thus not defined there. # else inline int FileNo(FILE* file) { return _fileno(file); } inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } inline int RmDir(const char* dir) { return _rmdir(dir); } inline bool IsDir(const StatStruct& st) { return (_S_IFDIR & st.st_mode) != 0; } # endif // GTEST_OS_WINDOWS_MOBILE #else typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } inline int IsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } inline int StrCaseCmp(const char* s1, const char* s2) { return strcasecmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } inline int RmDir(const char* dir) { return rmdir(dir); } inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #endif // GTEST_OS_WINDOWS // Functions deprecated by MSVC 8.0. #ifdef _MSC_VER // Temporarily disable warning 4996 (deprecated function). # pragma warning(push) # pragma warning(disable:4996) #endif inline const char* StrNCpy(char* dest, const char* src, size_t n) { return strncpy(dest, src, n); } // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and // StrError() aren't needed on Windows CE at this time and thus not // defined there. #if !GTEST_OS_WINDOWS_MOBILE inline int ChDir(const char* dir) { return chdir(dir); } #endif inline FILE* FOpen(const char* path, const char* mode) { return fopen(path, mode); } #if !GTEST_OS_WINDOWS_MOBILE inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { return freopen(path, mode, stream); } inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } #endif inline int FClose(FILE* fp) { return fclose(fp); } #if !GTEST_OS_WINDOWS_MOBILE inline int Read(int fd, void* buf, unsigned int count) { return static_cast(read(fd, buf, count)); } inline int Write(int fd, const void* buf, unsigned int count) { return static_cast(write(fd, buf, count)); } inline int Close(int fd) { return close(fd); } inline const char* StrError(int errnum) { return strerror(errnum); } #endif inline const char* GetEnv(const char* name) { #if GTEST_OS_WINDOWS_MOBILE // We are on Windows CE, which has no environment variables. return NULL; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) // Environment variables which we programmatically clear will be set to the // empty string rather than unset (NULL). Handle that case. const char* const env = getenv(name); return (env != NULL && env[0] != '\0') ? env : NULL; #else return getenv(name); #endif } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif #if GTEST_OS_WINDOWS_MOBILE // Windows CE has no C library. The abort() function is used in // several places in Google Test. This implementation provides a reasonable // imitation of standard behaviour. void Abort(); #else inline void Abort() { abort(); } #endif // GTEST_OS_WINDOWS_MOBILE } // namespace posix // The maximum number a BiggestInt can represent. This definition // works no matter BiggestInt is represented in one's complement or // two's complement. // // We cannot rely on numeric_limits in STL, as __int64 and long long // are not part of standard C++ and numeric_limits doesn't need to be // defined for them. const BiggestInt kMaxBiggestInt = ~(static_cast(1) << (8*sizeof(BiggestInt) - 1)); // This template class serves as a compile-time function from size to // type. It maps a size in bytes to a primitive type with that // size. e.g. // // TypeWithSize<4>::UInt // // is typedef-ed to be unsigned int (unsigned integer made up of 4 // bytes). // // Such functionality should belong to STL, but I cannot find it // there. // // Google Test uses this class in the implementation of floating-point // comparison. // // For now it only handles UInt (unsigned int) as that's all Google Test // needs. Other types can be easily added in the future if need // arises. template class TypeWithSize { public: // This prevents the user from using TypeWithSize with incorrect // values of N. typedef void UInt; }; // The specialization for size 4. template <> class TypeWithSize<4> { public: // unsigned int has size 4 in both gcc and MSVC. // // As base/basictypes.h doesn't compile on Windows, we cannot use // uint32, uint64, and etc here. typedef int Int; typedef unsigned int UInt; }; // The specialization for size 8. template <> class TypeWithSize<8> { public: #if GTEST_OS_WINDOWS typedef __int64 Int; typedef unsigned __int64 UInt; #else typedef long long Int; // NOLINT typedef unsigned long long UInt; // NOLINT #endif // GTEST_OS_WINDOWS }; // Integer types of known sizes. typedef TypeWithSize<4>::Int Int32; typedef TypeWithSize<4>::UInt UInt32; typedef TypeWithSize<8>::Int Int64; typedef TypeWithSize<8>::UInt UInt64; typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. // Utilities for command line flags and environment variables. // Macro for referencing flags. #define GTEST_FLAG(name) FLAGS_gtest_##name // Macros for declaring flags. #define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) #define GTEST_DECLARE_int32_(name) \ GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) #define GTEST_DECLARE_string_(name) \ GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name) // Macros for defining flags. #define GTEST_DEFINE_bool_(name, default_val, doc) \ GTEST_API_ bool GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_int32_(name, default_val, doc) \ GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) #define GTEST_DEFINE_string_(name, default_val, doc) \ GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val) // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. // TODO(chandlerc): Find a better way to refactor flag and environment parsing // out of both gtest-port.cc and gtest.cc to avoid exporting this utility // function. bool ParseInt32(const Message& src_text, const char* str, Int32* value); // Parses a bool/Int32/string from the environment variable // corresponding to the given Google Test flag. bool BoolFromGTestEnv(const char* flag, bool default_val); GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); const char* StringFromGTestEnv(const char* flag, const char* default_val); } // namespace internal } // namespace testing #ifdef __ICC #pragma warning enable 2304 #endif #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-tuple.h0000644015303500042660000006673312151455365023106 00000000000000// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! // Copyright 2009 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // Implements a subset of TR1 tuple needed by Google Test and Google Mock. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ #include // For ::std::pair. // The compiler used in Symbian has a bug that prevents us from declaring the // tuple template as a friend (it complains that tuple is redefined). This // hack bypasses the bug by declaring the members that should otherwise be // private as public. // Sun Studio versions < 12 also have the above bug. #if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) # define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: #else # define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ template friend class tuple; \ private: #endif // GTEST_n_TUPLE_(T) is the type of an n-tuple. #define GTEST_0_TUPLE_(T) tuple<> #define GTEST_1_TUPLE_(T) tuple #define GTEST_2_TUPLE_(T) tuple #define GTEST_3_TUPLE_(T) tuple #define GTEST_4_TUPLE_(T) tuple #define GTEST_5_TUPLE_(T) tuple #define GTEST_6_TUPLE_(T) tuple #define GTEST_7_TUPLE_(T) tuple #define GTEST_8_TUPLE_(T) tuple #define GTEST_9_TUPLE_(T) tuple #define GTEST_10_TUPLE_(T) tuple // GTEST_n_TYPENAMES_(T) declares a list of n typenames. #define GTEST_0_TYPENAMES_(T) #define GTEST_1_TYPENAMES_(T) typename T##0 #define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 #define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 #define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3 #define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4 #define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5 #define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6 #define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 #define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8 #define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ typename T##3, typename T##4, typename T##5, typename T##6, \ typename T##7, typename T##8, typename T##9 // In theory, defining stuff in the ::std namespace is undefined // behavior. We can do this as we are playing the role of a standard // library vendor. namespace std { namespace tr1 { template class tuple; // Anything in namespace gtest_internal is Google Test's INTERNAL // IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. namespace gtest_internal { // ByRef::type is T if T is a reference; otherwise it's const T&. template struct ByRef { typedef const T& type; }; // NOLINT template struct ByRef { typedef T& type; }; // NOLINT // A handy wrapper for ByRef. #define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef::type // AddRef::type is T if T is a reference; otherwise it's T&. This // is the same as tr1::add_reference::type. template struct AddRef { typedef T& type; }; // NOLINT template struct AddRef { typedef T& type; }; // NOLINT // A handy wrapper for AddRef. #define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef::type // A helper for implementing get(). template class Get; // A helper for implementing tuple_element. kIndexValid is true // iff k < the number of fields in tuple type T. template struct TupleElement; template struct TupleElement { typedef T0 type; }; template struct TupleElement { typedef T1 type; }; template struct TupleElement { typedef T2 type; }; template struct TupleElement { typedef T3 type; }; template struct TupleElement { typedef T4 type; }; template struct TupleElement { typedef T5 type; }; template struct TupleElement { typedef T6 type; }; template struct TupleElement { typedef T7 type; }; template struct TupleElement { typedef T8 type; }; template struct TupleElement { typedef T9 type; }; } // namespace gtest_internal template <> class tuple<> { public: tuple() {} tuple(const tuple& /* t */) {} tuple& operator=(const tuple& /* t */) { return *this; } }; template class GTEST_1_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_() {} explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} tuple(const tuple& t) : f0_(t.f0_) {} template tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_1_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { f0_ = t.f0_; return *this; } T0 f0_; }; template class GTEST_2_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), f1_(f1) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} template tuple(const ::std::pair& p) : f0_(p.first), f1_(p.second) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_2_TUPLE_(U)& t) { return CopyFrom(t); } template tuple& operator=(const ::std::pair& p) { f0_ = p.first; f1_ = p.second; return *this; } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; return *this; } T0 f0_; T1 f1_; }; template class GTEST_3_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} template tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_3_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; return *this; } T0 f0_; T1 f1_; T2 f2_; }; template class GTEST_4_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), f3_(f3) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} template tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_4_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; }; template class GTEST_5_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} template tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_5_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; }; template class GTEST_6_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} template tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_6_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; }; template class GTEST_7_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} template tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_7_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; }; template class GTEST_8_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} template tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_8_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; }; template class GTEST_9_TUPLE_(T) { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} template tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_9_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; }; template class tuple { public: template friend class gtest_internal::Get; tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), f9_() {} explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} template tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} tuple& operator=(const tuple& t) { return CopyFrom(t); } template tuple& operator=(const GTEST_10_TUPLE_(U)& t) { return CopyFrom(t); } GTEST_DECLARE_TUPLE_AS_FRIEND_ template tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { f0_ = t.f0_; f1_ = t.f1_; f2_ = t.f2_; f3_ = t.f3_; f4_ = t.f4_; f5_ = t.f5_; f6_ = t.f6_; f7_ = t.f7_; f8_ = t.f8_; f9_ = t.f9_; return *this; } T0 f0_; T1 f1_; T2 f2_; T3 f3_; T4 f4_; T5 f5_; T6 f6_; T7 f7_; T8 f8_; T9 f9_; }; // 6.1.3.2 Tuple creation functions. // Known limitations: we don't support passing an // std::tr1::reference_wrapper to make_tuple(). And we don't // implement tie(). inline tuple<> make_tuple() { return tuple<>(); } template inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { return GTEST_1_TUPLE_(T)(f0); } template inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { return GTEST_2_TUPLE_(T)(f0, f1); } template inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { return GTEST_3_TUPLE_(T)(f0, f1, f2); } template inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3) { return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); } template inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4) { return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); } template inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5) { return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); } template inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6) { return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); } template inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); } template inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8) { return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); } template inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, const T8& f8, const T9& f9) { return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); } // 6.1.3.3 Tuple helper classes. template struct tuple_size; template struct tuple_size { static const int value = 0; }; template struct tuple_size { static const int value = 1; }; template struct tuple_size { static const int value = 2; }; template struct tuple_size { static const int value = 3; }; template struct tuple_size { static const int value = 4; }; template struct tuple_size { static const int value = 5; }; template struct tuple_size { static const int value = 6; }; template struct tuple_size { static const int value = 7; }; template struct tuple_size { static const int value = 8; }; template struct tuple_size { static const int value = 9; }; template struct tuple_size { static const int value = 10; }; template struct tuple_element { typedef typename gtest_internal::TupleElement< k < (tuple_size::value), k, Tuple>::type type; }; #define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element::type // 6.1.3.4 Element access. namespace gtest_internal { template <> class Get<0> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) Field(Tuple& t) { return t.f0_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) ConstField(const Tuple& t) { return t.f0_; } }; template <> class Get<1> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) Field(Tuple& t) { return t.f1_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) ConstField(const Tuple& t) { return t.f1_; } }; template <> class Get<2> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) Field(Tuple& t) { return t.f2_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) ConstField(const Tuple& t) { return t.f2_; } }; template <> class Get<3> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) Field(Tuple& t) { return t.f3_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) ConstField(const Tuple& t) { return t.f3_; } }; template <> class Get<4> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) Field(Tuple& t) { return t.f4_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) ConstField(const Tuple& t) { return t.f4_; } }; template <> class Get<5> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) Field(Tuple& t) { return t.f5_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) ConstField(const Tuple& t) { return t.f5_; } }; template <> class Get<6> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) Field(Tuple& t) { return t.f6_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) ConstField(const Tuple& t) { return t.f6_; } }; template <> class Get<7> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) Field(Tuple& t) { return t.f7_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) ConstField(const Tuple& t) { return t.f7_; } }; template <> class Get<8> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) Field(Tuple& t) { return t.f8_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) ConstField(const Tuple& t) { return t.f8_; } }; template <> class Get<9> { public: template static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) Field(Tuple& t) { return t.f9_; } // NOLINT template static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) ConstField(const Tuple& t) { return t.f9_; } }; } // namespace gtest_internal template GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::Field(t); } template GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) get(const GTEST_10_TUPLE_(T)& t) { return gtest_internal::Get::ConstField(t); } // 6.1.3.5 Relational operators // We only implement == and !=, as we don't have a need for the rest yet. namespace gtest_internal { // SameSizeTuplePrefixComparator::Eq(t1, t2) returns true if the // first k fields of t1 equals the first k fields of t2. // SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if // k1 != k2. template struct SameSizeTuplePrefixComparator; template <> struct SameSizeTuplePrefixComparator<0, 0> { template static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { return true; } }; template struct SameSizeTuplePrefixComparator { template static bool Eq(const Tuple1& t1, const Tuple2& t2) { return SameSizeTuplePrefixComparator::Eq(t1, t2) && ::std::tr1::get(t1) == ::std::tr1::get(t2); } }; } // namespace gtest_internal template inline bool operator==(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return gtest_internal::SameSizeTuplePrefixComparator< tuple_size::value, tuple_size::value>::Eq(t, u); } template inline bool operator!=(const GTEST_10_TUPLE_(T)& t, const GTEST_10_TUPLE_(U)& u) { return !(t == u); } // 6.1.4 Pairs. // Unimplemented. } // namespace tr1 } // namespace std #undef GTEST_0_TUPLE_ #undef GTEST_1_TUPLE_ #undef GTEST_2_TUPLE_ #undef GTEST_3_TUPLE_ #undef GTEST_4_TUPLE_ #undef GTEST_5_TUPLE_ #undef GTEST_6_TUPLE_ #undef GTEST_7_TUPLE_ #undef GTEST_8_TUPLE_ #undef GTEST_9_TUPLE_ #undef GTEST_10_TUPLE_ #undef GTEST_0_TYPENAMES_ #undef GTEST_1_TYPENAMES_ #undef GTEST_2_TYPENAMES_ #undef GTEST_3_TYPENAMES_ #undef GTEST_4_TYPENAMES_ #undef GTEST_5_TYPENAMES_ #undef GTEST_6_TYPENAMES_ #undef GTEST_7_TYPENAMES_ #undef GTEST_8_TYPENAMES_ #undef GTEST_9_TYPENAMES_ #undef GTEST_10_TYPENAMES_ #undef GTEST_DECLARE_TUPLE_AS_FRIEND_ #undef GTEST_BY_REF_ #undef GTEST_ADD_REF_ #undef GTEST_TUPLE_ELEMENT_ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-filepath.h0000644015303500042660000002274112151455365023540 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: keith.ray@gmail.com (Keith Ray) // // Google Test filepath utilities // // This header file declares classes and functions used internally by // Google Test. They are subject to change without notice. // // This file is #included in . // Do not include this header file separately! #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #include "gtest/internal/gtest-string.h" namespace testing { namespace internal { // FilePath - a class for file and directory pathname manipulation which // handles platform-specific conventions (like the pathname separator). // Used for helper functions for naming files in a directory for xml output. // Except for Set methods, all methods are const or static, which provides an // "immutable value object" -- useful for peace of mind. // A FilePath with a value ending in a path separator ("like/this/") represents // a directory, otherwise it is assumed to represent a file. In either case, // it may or may not represent an actual file or directory in the file system. // Names are NOT checked for syntax correctness -- no checking for illegal // characters, malformed paths, etc. class GTEST_API_ FilePath { public: FilePath() : pathname_("") { } FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } explicit FilePath(const char* pathname) : pathname_(pathname) { Normalize(); } explicit FilePath(const String& pathname) : pathname_(pathname) { Normalize(); } FilePath& operator=(const FilePath& rhs) { Set(rhs); return *this; } void Set(const FilePath& rhs) { pathname_ = rhs.pathname_; } String ToString() const { return pathname_; } const char* c_str() const { return pathname_.c_str(); } // Returns the current working directory, or "" if unsuccessful. static FilePath GetCurrentDir(); // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. static FilePath MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension); // Given directory = "dir", relative_path = "test.xml", // returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. static FilePath ConcatPaths(const FilePath& directory, const FilePath& relative_path); // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. static FilePath GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension); // Returns true iff the path is NULL or "". bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; } // If input name has a trailing separator character, removes it and returns // the name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath RemoveTrailingPathSeparator() const; // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveDirectoryName() const; // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath RemoveFileName() const; // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath RemoveExtension(const char* extension) const; // Creates directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create // directories for any reason. Will also return false if the FilePath does // not represent a directory (that is, it doesn't end with a path separator). bool CreateDirectoriesRecursively() const; // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool CreateFolder() const; // Returns true if FilePath describes something in the file-system, // either a file, directory, or whatever, and that something exists. bool FileOrDirectoryExists() const; // Returns true if pathname describes a directory in the file-system // that exists. bool DirectoryExists() const; // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool IsDirectory() const; // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool IsRootDirectory() const; // Returns true if pathname describes an absolute path. bool IsAbsolutePath() const; private: // Replaces multiple consecutive separators with a single separator. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // // A pathname with multiple consecutive separators may occur either through // user error or as a result of some scripts or APIs that generate a pathname // with a trailing separator. On other platforms the same API or script // may NOT generate a pathname with a trailing "/". Then elsewhere that // pathname may have another "/" and pathname components added to it, // without checking for the separator already being there. // The script language and operating system may allow paths like "foo//bar" // but some of the functions in FilePath will not handle that correctly. In // particular, RemoveTrailingPathSeparator() only removes one separator, and // it is called in CreateDirectoriesRecursively() assuming that it will change // a pathname from directory syntax (trailing separator) to filename syntax. // // On Windows this method also replaces the alternate path separator '/' with // the primary path separator '\\', so that for example "bar\\/\\foo" becomes // "bar\\foo". void Normalize(); // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FindLastPathSeparator() const; String pathname_; }; // class FilePath } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-type-util.h0000644015303500042660000055247412151455365023713 00000000000000// This file was GENERATED by command: // pump.py gtest-type-util.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most 50 types in a list, and at most 50 // type-parameterized tests in one type-parameterized test case. // Please contact googletestframework@googlegroups.com if you need // more. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-string.h" // #ifdef __GNUC__ is too general here. It is possible to use gcc without using // libstdc++ (which is where cxxabi.h comes from). # ifdef __GLIBCXX__ # include # elif defined(__HP_aCC) # include # endif // __GLIBCXX__ namespace testing { namespace internal { // GetTypeName() returns a human-readable name of type T. // NB: This function is also used in Google Mock, so don't move it inside of // the typed-test-only section below. template String GetTypeName() { # if GTEST_HAS_RTTI const char* const name = typeid(T).name(); # if defined(__GLIBCXX__) || defined(__HP_aCC) int status = 0; // gcc's implementation of typeid(T).name() mangles the type name, // so we have to demangle it. # ifdef __GLIBCXX__ using abi::__cxa_demangle; # endif // __GLIBCXX__ char* const readable_name = __cxa_demangle(name, 0, 0, &status); const String name_str(status == 0 ? readable_name : name); free(readable_name); return name_str; # else return name; # endif // __GLIBCXX__ || __HP_aCC # else return ""; # endif // GTEST_HAS_RTTI } #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // AssertyTypeEq::type is defined iff T1 and T2 are the same // type. This can be used as a compile-time assertion to ensure that // two types are equal. template struct AssertTypeEq; template struct AssertTypeEq { typedef bool type; }; // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types, Type, and etc), which C++ doesn't // support directly. struct None {}; // The following family of struct and struct templates are used to // represent type lists. In particular, TypesN // represents a type list with N types (T1, T2, ..., and TN) in it. // Except for Types0, every struct in the family has two member types: // Head for the first type in the list, and Tail for the rest of the // list. // The empty type list. struct Types0 {}; // Type lists of length 1, 2, 3, and so on. template struct Types1 { typedef T1 Head; typedef Types0 Tail; }; template struct Types2 { typedef T1 Head; typedef Types1 Tail; }; template struct Types3 { typedef T1 Head; typedef Types2 Tail; }; template struct Types4 { typedef T1 Head; typedef Types3 Tail; }; template struct Types5 { typedef T1 Head; typedef Types4 Tail; }; template struct Types6 { typedef T1 Head; typedef Types5 Tail; }; template struct Types7 { typedef T1 Head; typedef Types6 Tail; }; template struct Types8 { typedef T1 Head; typedef Types7 Tail; }; template struct Types9 { typedef T1 Head; typedef Types8 Tail; }; template struct Types10 { typedef T1 Head; typedef Types9 Tail; }; template struct Types11 { typedef T1 Head; typedef Types10 Tail; }; template struct Types12 { typedef T1 Head; typedef Types11 Tail; }; template struct Types13 { typedef T1 Head; typedef Types12 Tail; }; template struct Types14 { typedef T1 Head; typedef Types13 Tail; }; template struct Types15 { typedef T1 Head; typedef Types14 Tail; }; template struct Types16 { typedef T1 Head; typedef Types15 Tail; }; template struct Types17 { typedef T1 Head; typedef Types16 Tail; }; template struct Types18 { typedef T1 Head; typedef Types17 Tail; }; template struct Types19 { typedef T1 Head; typedef Types18 Tail; }; template struct Types20 { typedef T1 Head; typedef Types19 Tail; }; template struct Types21 { typedef T1 Head; typedef Types20 Tail; }; template struct Types22 { typedef T1 Head; typedef Types21 Tail; }; template struct Types23 { typedef T1 Head; typedef Types22 Tail; }; template struct Types24 { typedef T1 Head; typedef Types23 Tail; }; template struct Types25 { typedef T1 Head; typedef Types24 Tail; }; template struct Types26 { typedef T1 Head; typedef Types25 Tail; }; template struct Types27 { typedef T1 Head; typedef Types26 Tail; }; template struct Types28 { typedef T1 Head; typedef Types27 Tail; }; template struct Types29 { typedef T1 Head; typedef Types28 Tail; }; template struct Types30 { typedef T1 Head; typedef Types29 Tail; }; template struct Types31 { typedef T1 Head; typedef Types30 Tail; }; template struct Types32 { typedef T1 Head; typedef Types31 Tail; }; template struct Types33 { typedef T1 Head; typedef Types32 Tail; }; template struct Types34 { typedef T1 Head; typedef Types33 Tail; }; template struct Types35 { typedef T1 Head; typedef Types34 Tail; }; template struct Types36 { typedef T1 Head; typedef Types35 Tail; }; template struct Types37 { typedef T1 Head; typedef Types36 Tail; }; template struct Types38 { typedef T1 Head; typedef Types37 Tail; }; template struct Types39 { typedef T1 Head; typedef Types38 Tail; }; template struct Types40 { typedef T1 Head; typedef Types39 Tail; }; template struct Types41 { typedef T1 Head; typedef Types40 Tail; }; template struct Types42 { typedef T1 Head; typedef Types41 Tail; }; template struct Types43 { typedef T1 Head; typedef Types42 Tail; }; template struct Types44 { typedef T1 Head; typedef Types43 Tail; }; template struct Types45 { typedef T1 Head; typedef Types44 Tail; }; template struct Types46 { typedef T1 Head; typedef Types45 Tail; }; template struct Types47 { typedef T1 Head; typedef Types46 Tail; }; template struct Types48 { typedef T1 Head; typedef Types47 Tail; }; template struct Types49 { typedef T1 Head; typedef Types48 Tail; }; template struct Types50 { typedef T1 Head; typedef Types49 Tail; }; } // namespace internal // We don't want to require the users to write TypesN<...> directly, // as that would require them to count the length. Types<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Types // will appear as Types in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Types, and Google Test will translate // that to TypesN internally to make error messages // readable. The translation is done by the 'type' member of the // Types template. template struct Types { typedef internal::Types50 type; }; template <> struct Types { typedef internal::Types0 type; }; template struct Types { typedef internal::Types1 type; }; template struct Types { typedef internal::Types2 type; }; template struct Types { typedef internal::Types3 type; }; template struct Types { typedef internal::Types4 type; }; template struct Types { typedef internal::Types5 type; }; template struct Types { typedef internal::Types6 type; }; template struct Types { typedef internal::Types7 type; }; template struct Types { typedef internal::Types8 type; }; template struct Types { typedef internal::Types9 type; }; template struct Types { typedef internal::Types10 type; }; template struct Types { typedef internal::Types11 type; }; template struct Types { typedef internal::Types12 type; }; template struct Types { typedef internal::Types13 type; }; template struct Types { typedef internal::Types14 type; }; template struct Types { typedef internal::Types15 type; }; template struct Types { typedef internal::Types16 type; }; template struct Types { typedef internal::Types17 type; }; template struct Types { typedef internal::Types18 type; }; template struct Types { typedef internal::Types19 type; }; template struct Types { typedef internal::Types20 type; }; template struct Types { typedef internal::Types21 type; }; template struct Types { typedef internal::Types22 type; }; template struct Types { typedef internal::Types23 type; }; template struct Types { typedef internal::Types24 type; }; template struct Types { typedef internal::Types25 type; }; template struct Types { typedef internal::Types26 type; }; template struct Types { typedef internal::Types27 type; }; template struct Types { typedef internal::Types28 type; }; template struct Types { typedef internal::Types29 type; }; template struct Types { typedef internal::Types30 type; }; template struct Types { typedef internal::Types31 type; }; template struct Types { typedef internal::Types32 type; }; template struct Types { typedef internal::Types33 type; }; template struct Types { typedef internal::Types34 type; }; template struct Types { typedef internal::Types35 type; }; template struct Types { typedef internal::Types36 type; }; template struct Types { typedef internal::Types37 type; }; template struct Types { typedef internal::Types38 type; }; template struct Types { typedef internal::Types39 type; }; template struct Types { typedef internal::Types40 type; }; template struct Types { typedef internal::Types41 type; }; template struct Types { typedef internal::Types42 type; }; template struct Types { typedef internal::Types43 type; }; template struct Types { typedef internal::Types44 type; }; template struct Types { typedef internal::Types45 type; }; template struct Types { typedef internal::Types46 type; }; template struct Types { typedef internal::Types47 type; }; template struct Types { typedef internal::Types48 type; }; template struct Types { typedef internal::Types49 type; }; namespace internal { # define GTEST_TEMPLATE_ template class // The template "selector" struct TemplateSel is used to // represent Tmpl, which must be a class template with one type // parameter, as a type. TemplateSel::Bind::type is defined // as the type Tmpl. This allows us to actually instantiate the // template "selected" by TemplateSel. // // This trick is necessary for simulating typedef for class templates, // which C++ doesn't support directly. template struct TemplateSel { template struct Bind { typedef Tmpl type; }; }; # define GTEST_BIND_(TmplSel, T) \ TmplSel::template Bind::type // A unique struct template used as the default value for the // arguments of class template Templates. This allows us to simulate // variadic templates (e.g. Templates, Templates, // and etc), which C++ doesn't support directly. template struct NoneT {}; // The following family of struct and struct templates are used to // represent template lists. In particular, TemplatesN represents a list of N templates (T1, T2, ..., and TN). Except // for Templates0, every struct in the family has two member types: // Head for the selector of the first template in the list, and Tail // for the rest of the list. // The empty template list. struct Templates0 {}; // Template lists of length 1, 2, 3, and so on. template struct Templates1 { typedef TemplateSel Head; typedef Templates0 Tail; }; template struct Templates2 { typedef TemplateSel Head; typedef Templates1 Tail; }; template struct Templates3 { typedef TemplateSel Head; typedef Templates2 Tail; }; template struct Templates4 { typedef TemplateSel Head; typedef Templates3 Tail; }; template struct Templates5 { typedef TemplateSel Head; typedef Templates4 Tail; }; template struct Templates6 { typedef TemplateSel Head; typedef Templates5 Tail; }; template struct Templates7 { typedef TemplateSel Head; typedef Templates6 Tail; }; template struct Templates8 { typedef TemplateSel Head; typedef Templates7 Tail; }; template struct Templates9 { typedef TemplateSel Head; typedef Templates8 Tail; }; template struct Templates10 { typedef TemplateSel Head; typedef Templates9 Tail; }; template struct Templates11 { typedef TemplateSel Head; typedef Templates10 Tail; }; template struct Templates12 { typedef TemplateSel Head; typedef Templates11 Tail; }; template struct Templates13 { typedef TemplateSel Head; typedef Templates12 Tail; }; template struct Templates14 { typedef TemplateSel Head; typedef Templates13 Tail; }; template struct Templates15 { typedef TemplateSel Head; typedef Templates14 Tail; }; template struct Templates16 { typedef TemplateSel Head; typedef Templates15 Tail; }; template struct Templates17 { typedef TemplateSel Head; typedef Templates16 Tail; }; template struct Templates18 { typedef TemplateSel Head; typedef Templates17 Tail; }; template struct Templates19 { typedef TemplateSel Head; typedef Templates18 Tail; }; template struct Templates20 { typedef TemplateSel Head; typedef Templates19 Tail; }; template struct Templates21 { typedef TemplateSel Head; typedef Templates20 Tail; }; template struct Templates22 { typedef TemplateSel Head; typedef Templates21 Tail; }; template struct Templates23 { typedef TemplateSel Head; typedef Templates22 Tail; }; template struct Templates24 { typedef TemplateSel Head; typedef Templates23 Tail; }; template struct Templates25 { typedef TemplateSel Head; typedef Templates24 Tail; }; template struct Templates26 { typedef TemplateSel Head; typedef Templates25 Tail; }; template struct Templates27 { typedef TemplateSel Head; typedef Templates26 Tail; }; template struct Templates28 { typedef TemplateSel Head; typedef Templates27 Tail; }; template struct Templates29 { typedef TemplateSel Head; typedef Templates28 Tail; }; template struct Templates30 { typedef TemplateSel Head; typedef Templates29 Tail; }; template struct Templates31 { typedef TemplateSel Head; typedef Templates30 Tail; }; template struct Templates32 { typedef TemplateSel Head; typedef Templates31 Tail; }; template struct Templates33 { typedef TemplateSel Head; typedef Templates32 Tail; }; template struct Templates34 { typedef TemplateSel Head; typedef Templates33 Tail; }; template struct Templates35 { typedef TemplateSel Head; typedef Templates34 Tail; }; template struct Templates36 { typedef TemplateSel Head; typedef Templates35 Tail; }; template struct Templates37 { typedef TemplateSel Head; typedef Templates36 Tail; }; template struct Templates38 { typedef TemplateSel Head; typedef Templates37 Tail; }; template struct Templates39 { typedef TemplateSel Head; typedef Templates38 Tail; }; template struct Templates40 { typedef TemplateSel Head; typedef Templates39 Tail; }; template struct Templates41 { typedef TemplateSel Head; typedef Templates40 Tail; }; template struct Templates42 { typedef TemplateSel Head; typedef Templates41 Tail; }; template struct Templates43 { typedef TemplateSel Head; typedef Templates42 Tail; }; template struct Templates44 { typedef TemplateSel Head; typedef Templates43 Tail; }; template struct Templates45 { typedef TemplateSel Head; typedef Templates44 Tail; }; template struct Templates46 { typedef TemplateSel Head; typedef Templates45 Tail; }; template struct Templates47 { typedef TemplateSel Head; typedef Templates46 Tail; }; template struct Templates48 { typedef TemplateSel Head; typedef Templates47 Tail; }; template struct Templates49 { typedef TemplateSel Head; typedef Templates48 Tail; }; template struct Templates50 { typedef TemplateSel Head; typedef Templates49 Tail; }; // We don't want to require the users to write TemplatesN<...> directly, // as that would require them to count the length. Templates<...> is much // easier to write, but generates horrible messages when there is a // compiler error, as gcc insists on printing out each template // argument, even if it has the default value (this means Templates // will appear as Templates in the compiler // errors). // // Our solution is to combine the best part of the two approaches: a // user would write Templates, and Google Test will translate // that to TemplatesN internally to make error messages // readable. The translation is done by the 'type' member of the // Templates template. template struct Templates { typedef Templates50 type; }; template <> struct Templates { typedef Templates0 type; }; template struct Templates { typedef Templates1 type; }; template struct Templates { typedef Templates2 type; }; template struct Templates { typedef Templates3 type; }; template struct Templates { typedef Templates4 type; }; template struct Templates { typedef Templates5 type; }; template struct Templates { typedef Templates6 type; }; template struct Templates { typedef Templates7 type; }; template struct Templates { typedef Templates8 type; }; template struct Templates { typedef Templates9 type; }; template struct Templates { typedef Templates10 type; }; template struct Templates { typedef Templates11 type; }; template struct Templates { typedef Templates12 type; }; template struct Templates { typedef Templates13 type; }; template struct Templates { typedef Templates14 type; }; template struct Templates { typedef Templates15 type; }; template struct Templates { typedef Templates16 type; }; template struct Templates { typedef Templates17 type; }; template struct Templates { typedef Templates18 type; }; template struct Templates { typedef Templates19 type; }; template struct Templates { typedef Templates20 type; }; template struct Templates { typedef Templates21 type; }; template struct Templates { typedef Templates22 type; }; template struct Templates { typedef Templates23 type; }; template struct Templates { typedef Templates24 type; }; template struct Templates { typedef Templates25 type; }; template struct Templates { typedef Templates26 type; }; template struct Templates { typedef Templates27 type; }; template struct Templates { typedef Templates28 type; }; template struct Templates { typedef Templates29 type; }; template struct Templates { typedef Templates30 type; }; template struct Templates { typedef Templates31 type; }; template struct Templates { typedef Templates32 type; }; template struct Templates { typedef Templates33 type; }; template struct Templates { typedef Templates34 type; }; template struct Templates { typedef Templates35 type; }; template struct Templates { typedef Templates36 type; }; template struct Templates { typedef Templates37 type; }; template struct Templates { typedef Templates38 type; }; template struct Templates { typedef Templates39 type; }; template struct Templates { typedef Templates40 type; }; template struct Templates { typedef Templates41 type; }; template struct Templates { typedef Templates42 type; }; template struct Templates { typedef Templates43 type; }; template struct Templates { typedef Templates44 type; }; template struct Templates { typedef Templates45 type; }; template struct Templates { typedef Templates46 type; }; template struct Templates { typedef Templates47 type; }; template struct Templates { typedef Templates48 type; }; template struct Templates { typedef Templates49 type; }; // The TypeList template makes it possible to use either a single type // or a Types<...> list in TYPED_TEST_CASE() and // INSTANTIATE_TYPED_TEST_CASE_P(). template struct TypeList { typedef Types1 type; }; template struct TypeList > { typedef typename Types::type type; }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-linked_ptr.h0000644015303500042660000001757712151455365024112 00000000000000// Copyright 2003 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: Dan Egnor (egnor@google.com) // // A "smart" pointer type with reference tracking. Every pointer to a // particular object is kept on a circular linked list. When the last pointer // to an object is destroyed or reassigned, the object is deleted. // // Used properly, this deletes the object when the last reference goes away. // There are several caveats: // - Like all reference counting schemes, cycles lead to leaks. // - Each smart pointer is actually two pointers (8 bytes instead of 4). // - Every time a pointer is assigned, the entire list of pointers to that // object is traversed. This class is therefore NOT SUITABLE when there // will often be more than two or three pointers to a particular object. // - References are only tracked as long as linked_ptr<> objects are copied. // If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS // will happen (double deletion). // // A good use of this class is storing object references in STL containers. // You can safely put linked_ptr<> in a vector<>. // Other uses may not be as good. // // Note: If you use an incomplete type with linked_ptr<>, the class // *containing* linked_ptr<> must have a constructor and destructor (even // if they do nothing!). // // Bill Gibbons suggested we use something like this. // // Thread Safety: // Unlike other linked_ptr implementations, in this implementation // a linked_ptr object is thread-safe in the sense that: // - it's safe to copy linked_ptr objects concurrently, // - it's safe to copy *from* a linked_ptr and read its underlying // raw pointer (e.g. via get()) concurrently, and // - it's safe to write to two linked_ptrs that point to the same // shared object concurrently. // TODO(wan@google.com): rename this to safe_linked_ptr to avoid // confusion with normal linked_ptr. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ #include #include #include "gtest/internal/gtest-port.h" namespace testing { namespace internal { // Protects copying of all linked_ptr objects. GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); // This is used internally by all instances of linked_ptr<>. It needs to be // a non-template class because different types of linked_ptr<> can refer to // the same object (linked_ptr(obj) vs linked_ptr(obj)). // So, it needs to be possible for different types of linked_ptr to participate // in the same circular linked list, so we need a single class type here. // // DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr. class linked_ptr_internal { public: // Create a new circle that includes only this instance. void join_new() { next_ = this; } // Many linked_ptr operations may change p.link_ for some linked_ptr // variable p in the same circle as this object. Therefore we need // to prevent two such operations from occurring concurrently. // // Note that different types of linked_ptr objects can coexist in a // circle (e.g. linked_ptr, linked_ptr, and // linked_ptr). Therefore we must use a single mutex to // protect all linked_ptr objects. This can create serious // contention in production code, but is acceptable in a testing // framework. // Join an existing circle. // L < g_linked_ptr_mutex void join(linked_ptr_internal const* ptr) { MutexLock lock(&g_linked_ptr_mutex); linked_ptr_internal const* p = ptr; while (p->next_ != ptr) p = p->next_; p->next_ = this; next_ = ptr; } // Leave whatever circle we're part of. Returns true if we were the // last member of the circle. Once this is done, you can join() another. // L < g_linked_ptr_mutex bool depart() { MutexLock lock(&g_linked_ptr_mutex); if (next_ == this) return true; linked_ptr_internal const* p = next_; while (p->next_ != this) p = p->next_; p->next_ = next_; return false; } private: mutable linked_ptr_internal const* next_; }; template class linked_ptr { public: typedef T element_type; // Take over ownership of a raw pointer. This should happen as soon as // possible after the object is created. explicit linked_ptr(T* ptr = NULL) { capture(ptr); } ~linked_ptr() { depart(); } // Copy an existing linked_ptr<>, adding ourselves to the list of references. template linked_ptr(linked_ptr const& ptr) { copy(&ptr); } linked_ptr(linked_ptr const& ptr) { // NOLINT assert(&ptr != this); copy(&ptr); } // Assignment releases the old value and acquires the new. template linked_ptr& operator=(linked_ptr const& ptr) { depart(); copy(&ptr); return *this; } linked_ptr& operator=(linked_ptr const& ptr) { if (&ptr != this) { depart(); copy(&ptr); } return *this; } // Smart pointer members. void reset(T* ptr = NULL) { depart(); capture(ptr); } T* get() const { return value_; } T* operator->() const { return value_; } T& operator*() const { return *value_; } bool operator==(T* p) const { return value_ == p; } bool operator!=(T* p) const { return value_ != p; } template bool operator==(linked_ptr const& ptr) const { return value_ == ptr.get(); } template bool operator!=(linked_ptr const& ptr) const { return value_ != ptr.get(); } private: template friend class linked_ptr; T* value_; linked_ptr_internal link_; void depart() { if (link_.depart()) delete value_; } void capture(T* ptr) { value_ = ptr; link_.join_new(); } template void copy(linked_ptr const* ptr) { value_ = ptr->get(); if (value_) link_.join(&ptr->link_); else link_.join_new(); } }; template inline bool operator==(T* ptr, const linked_ptr& x) { return ptr == x.get(); } template inline bool operator!=(T* ptr, const linked_ptr& x) { return ptr != x.get(); } // A function to convert T* into linked_ptr // Doing e.g. make_linked_ptr(new FooBarBaz(arg)) is a shorter notation // for linked_ptr >(new FooBarBaz(arg)) template linked_ptr make_linked_ptr(T* ptr) { return linked_ptr(ptr); } } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-string.h0000644015303500042660000003273212151455365023253 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares the String class and functions used internally by // Google Test. They are subject to change without notice. They should not used // by code external to Google Test. // // This header file is #included by . // It should not be #included by other files. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning disable 2304 #endif #ifdef __BORLANDC__ // string.h is not guaranteed to provide strcpy on C++ Builder. # include #endif #include #include "gtest/internal/gtest-port.h" #include namespace testing { namespace internal { // String - a UTF-8 string class. // // For historic reasons, we don't use std::string. // // TODO(wan@google.com): replace this class with std::string or // implement it in terms of the latter. // // Note that String can represent both NULL and the empty string, // while std::string cannot represent NULL. // // NULL and the empty string are considered different. NULL is less // than anything (including the empty string) except itself. // // This class only provides minimum functionality necessary for // implementing Google Test. We do not intend to implement a full-fledged // string class here. // // Since the purpose of this class is to provide a substitute for // std::string on platforms where it cannot be used, we define a copy // constructor and assignment operators such that we don't need // conditional compilation in a lot of places. // // In order to make the representation efficient, the d'tor of String // is not virtual. Therefore DO NOT INHERIT FROM String. class GTEST_API_ String { public: // Static utility methods // Returns the input enclosed in double quotes if it's not NULL; // otherwise returns "(null)". For example, "\"Hello\"" is returned // for input "Hello". // // This is useful for printing a C string in the syntax of a literal. // // Known issue: escape sequences are not handled yet. static String ShowCStringQuoted(const char* c_str); // Clones a 0-terminated C string, allocating memory using new. The // caller is responsible for deleting the return value using // delete[]. Returns the cloned string, or NULL if the input is // NULL. // // This is different from strdup() in string.h, which allocates // memory using malloc(). static const char* CloneCString(const char* c_str); #if GTEST_OS_WINDOWS_MOBILE // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be // able to pass strings to Win32 APIs on CE we need to convert them // to 'Unicode', UTF-16. // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. // // The wide string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static LPCWSTR AnsiToUtf16(const char* c_str); // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. // // The returned string is created using the ANSI codepage (CP_ACP) to // match the behaviour of the ANSI versions of Win32 calls and the // C runtime. static const char* Utf16ToAnsi(LPCWSTR utf16_str); #endif // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CStringEquals(const char* lhs, const char* rhs); // Converts a wide C string to a String using the UTF-8 encoding. // NULL will be converted to "(null)". If an error occurred during // the conversion, "(failed to convert from wide string)" is // returned. static String ShowWideCString(const wchar_t* wide_c_str); // Similar to ShowWideCString(), except that this function encloses // the converted string in double quotes. static String ShowWideCStringQuoted(const wchar_t* wide_c_str); // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Compares two C strings, ignoring case. Returns true iff they // have the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL C string, // including the empty string. static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs); // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); // Formats a list of arguments to a String, using the same format // spec string as for printf. // // We do not use the StringPrintf class as it is not universally // available. // // The result is limited to 4096 characters (including the tailing // 0). If 4096 characters are not enough to format the input, // "" is returned. static String Format(const char* format, ...); // C'tors // The default c'tor constructs a NULL string. String() : c_str_(NULL), length_(0) {} // Constructs a String by cloning a 0-terminated C string. String(const char* a_c_str) { // NOLINT if (a_c_str == NULL) { c_str_ = NULL; length_ = 0; } else { ConstructNonNull(a_c_str, strlen(a_c_str)); } } // Constructs a String by copying a given number of chars from a // buffer. E.g. String("hello", 3) creates the string "hel", // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "", // and String(NULL, 1) results in access violation. String(const char* buffer, size_t a_length) { ConstructNonNull(buffer, a_length); } // The copy c'tor creates a new copy of the string. The two // String objects do not share content. String(const String& str) : c_str_(NULL), length_(0) { *this = str; } // D'tor. String is intended to be a final class, so the d'tor // doesn't need to be virtual. ~String() { delete[] c_str_; } // Allows a String to be implicitly converted to an ::std::string or // ::string, and vice versa. Converting a String containing a NULL // pointer to ::std::string or ::string is undefined behavior. // Converting a ::std::string or ::string containing an embedded NUL // character to a String will result in the prefix up to the first // NUL character. String(const ::std::string& str) { ConstructNonNull(str.c_str(), str.length()); } operator ::std::string() const { return ::std::string(c_str(), length()); } #if GTEST_HAS_GLOBAL_STRING String(const ::string& str) { ConstructNonNull(str.c_str(), str.length()); } operator ::string() const { return ::string(c_str(), length()); } #endif // GTEST_HAS_GLOBAL_STRING // Returns true iff this is an empty string (i.e. ""). bool empty() const { return (c_str() != NULL) && (length() == 0); } // Compares this with another String. // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 // if this is greater than rhs. int Compare(const String& rhs) const; // Returns true iff this String equals the given C string. A NULL // string and a non-NULL string are considered not equal. bool operator==(const char* a_c_str) const { return Compare(a_c_str) == 0; } // Returns true iff this String is less than the given String. A // NULL string is considered less than "". bool operator<(const String& rhs) const { return Compare(rhs) < 0; } // Returns true iff this String doesn't equal the given C string. A NULL // string and a non-NULL string are considered not equal. bool operator!=(const char* a_c_str) const { return !(*this == a_c_str); } // Returns true iff this String ends with the given suffix. *Any* // String is considered to end with a NULL or empty suffix. bool EndsWith(const char* suffix) const; // Returns true iff this String ends with the given suffix, not considering // case. Any String is considered to end with a NULL or empty suffix. bool EndsWithCaseInsensitive(const char* suffix) const; // Returns the length of the encapsulated string, or 0 if the // string is NULL. size_t length() const { return length_; } // Gets the 0-terminated C string this String object represents. // The String object still owns the string. Therefore the caller // should NOT delete the return value. const char* c_str() const { return c_str_; } // Assigns a C string to this object. Self-assignment works. const String& operator=(const char* a_c_str) { return *this = String(a_c_str); } // Assigns a String object to this object. Self-assignment works. const String& operator=(const String& rhs) { if (this != &rhs) { delete[] c_str_; if (rhs.c_str() == NULL) { c_str_ = NULL; length_ = 0; } else { ConstructNonNull(rhs.c_str(), rhs.length()); } } return *this; } private: // Constructs a non-NULL String from the given content. This // function can only be called when c_str_ has not been allocated. // ConstructNonNull(NULL, 0) results in an empty string (""). // ConstructNonNull(NULL, non_zero) is undefined behavior. void ConstructNonNull(const char* buffer, size_t a_length) { char* const str = new char[a_length + 1]; memcpy(str, buffer, a_length); str[a_length] = '\0'; c_str_ = str; length_ = a_length; } const char* c_str_; size_t length_; }; // class String // Streams a String to an ostream. Each '\0' character in the String // is replaced with "\\0". inline ::std::ostream& operator<<(::std::ostream& os, const String& str) { if (str.c_str() == NULL) { os << "(null)"; } else { const char* const c_str = str.c_str(); for (size_t i = 0; i != str.length(); i++) { if (c_str[i] == '\0') { os << "\\0"; } else { os << c_str[i]; } } } return os; } // Gets the content of the stringstream's buffer as a String. Each '\0' // character in the buffer is replaced with "\\0". GTEST_API_ String StringStreamToString(::std::stringstream* stream); // Converts a streamable value to a String. A NULL pointer is // converted to "(null)". When the input value is a ::string, // ::std::string, ::wstring, or ::std::wstring object, each NUL // character in it is replaced with "\\0". // Declared here but defined in gtest.h, so that it has access // to the definition of the Message class, required by the ARM // compiler. template String StreamableToString(const T& streamable); } // namespace internal } // namespace testing #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning enable 2304 #endif #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-param-util-generated.h0000644015303500042660000051241012151455365025750 00000000000000// This file was GENERATED by command: // pump.py gtest-param-util-generated.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently Google Test supports at most 50 arguments in Values, // and at most 10 arguments in Combine. Please contact // googletestframework@googlegroups.com if you need more. // Please note that the number of arguments to Combine is limited // by the maximum arity of the implementation of tr1::tuple which is // currently set at 10. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-port.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Forward declarations of ValuesIn(), which is implemented in // include/gtest/gtest-param-test.h. template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end); template internal::ParamGenerator ValuesIn(const T (&array)[N]); template internal::ParamGenerator ValuesIn( const Container& container); namespace internal { // Used in the Values() function to provide polymorphic capabilities. template class ValueArray1 { public: explicit ValueArray1(T1 v1) : v1_(v1) {} template operator ParamGenerator() const { return ValuesIn(&v1_, &v1_ + 1); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray1& other); const T1 v1_; }; template class ValueArray2 { public: ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray2& other); const T1 v1_; const T2 v2_; }; template class ValueArray3 { public: ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray3& other); const T1 v1_; const T2 v2_; const T3 v3_; }; template class ValueArray4 { public: ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), v4_(v4) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray4& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; }; template class ValueArray5 { public: ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray5& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; }; template class ValueArray6 { public: ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray6& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; }; template class ValueArray7 { public: ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray7& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; }; template class ValueArray8 { public: ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray8& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; }; template class ValueArray9 { public: ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray9& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; }; template class ValueArray10 { public: ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray10& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; }; template class ValueArray11 { public: ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray11& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; }; template class ValueArray12 { public: ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray12& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; }; template class ValueArray13 { public: ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray13& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; }; template class ValueArray14 { public: ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray14& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; }; template class ValueArray15 { public: ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray15& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; }; template class ValueArray16 { public: ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray16& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; }; template class ValueArray17 { public: ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray17& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; }; template class ValueArray18 { public: ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray18& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; }; template class ValueArray19 { public: ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray19& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; }; template class ValueArray20 { public: ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray20& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; }; template class ValueArray21 { public: ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray21& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; }; template class ValueArray22 { public: ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray22& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; }; template class ValueArray23 { public: ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray23& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; }; template class ValueArray24 { public: ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray24& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; }; template class ValueArray25 { public: ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray25& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; }; template class ValueArray26 { public: ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray26& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; }; template class ValueArray27 { public: ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray27& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; }; template class ValueArray28 { public: ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray28& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; }; template class ValueArray29 { public: ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray29& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; }; template class ValueArray30 { public: ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray30& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; }; template class ValueArray31 { public: ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray31& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; }; template class ValueArray32 { public: ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray32& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; }; template class ValueArray33 { public: ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray33& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; }; template class ValueArray34 { public: ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray34& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; }; template class ValueArray35 { public: ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray35& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; }; template class ValueArray36 { public: ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray36& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; }; template class ValueArray37 { public: ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray37& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; }; template class ValueArray38 { public: ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray38& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; }; template class ValueArray39 { public: ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray39& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; }; template class ValueArray40 { public: ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray40& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; }; template class ValueArray41 { public: ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray41& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; }; template class ValueArray42 { public: ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray42& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; }; template class ValueArray43 { public: ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray43& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; }; template class ValueArray44 { public: ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray44& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; }; template class ValueArray45 { public: ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray45& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; }; template class ValueArray46 { public: ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray46& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; }; template class ValueArray47 { public: ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray47& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; }; template class ValueArray48 { public: ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, v48_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray48& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; }; template class ValueArray49 { public: ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, v48_, v49_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray49& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; }; template class ValueArray50 { public: ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} template operator ParamGenerator() const { const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_, v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_, v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_, v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_, v48_, v49_, v50_}; return ValuesIn(array); } private: // No implementation - assignment is unsupported. void operator=(const ValueArray50& other); const T1 v1_; const T2 v2_; const T3 v3_; const T4 v4_; const T5 v5_; const T6 v6_; const T7 v7_; const T8 v8_; const T9 v9_; const T10 v10_; const T11 v11_; const T12 v12_; const T13 v13_; const T14 v14_; const T15 v15_; const T16 v16_; const T17 v17_; const T18 v18_; const T19 v19_; const T20 v20_; const T21 v21_; const T22 v22_; const T23 v23_; const T24 v24_; const T25 v25_; const T26 v26_; const T27 v27_; const T28 v28_; const T29 v29_; const T30 v30_; const T31 v31_; const T32 v32_; const T33 v33_; const T34 v34_; const T35 v35_; const T36 v36_; const T37 v37_; const T38 v38_; const T39 v39_; const T40 v40_; const T41 v41_; const T42 v42_; const T43 v43_; const T44 v44_; const T45 v45_; const T46 v46_; const T47 v47_; const T48 v48_; const T49 v49_; const T50 v50_; }; # if GTEST_HAS_COMBINE // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Generates values from the Cartesian product of values produced // by the argument generators. // template class CartesianProductGenerator2 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator2(const ParamGenerator& g1, const ParamGenerator& g2) : g1_(g1), g2_(g2) {} virtual ~CartesianProductGenerator2() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current2_; if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; ParamType current_value_; }; // class CartesianProductGenerator2::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator2& other); const ParamGenerator g1_; const ParamGenerator g2_; }; // class CartesianProductGenerator2 template class CartesianProductGenerator3 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator3(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3) : g1_(g1), g2_(g2), g3_(g3) {} virtual ~CartesianProductGenerator3() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current3_; if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; ParamType current_value_; }; // class CartesianProductGenerator3::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator3& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; }; // class CartesianProductGenerator3 template class CartesianProductGenerator4 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator4(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} virtual ~CartesianProductGenerator4() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current4_; if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; ParamType current_value_; }; // class CartesianProductGenerator4::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator4& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; }; // class CartesianProductGenerator4 template class CartesianProductGenerator5 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator5(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} virtual ~CartesianProductGenerator5() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current5_; if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; ParamType current_value_; }; // class CartesianProductGenerator5::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator5& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; }; // class CartesianProductGenerator5 template class CartesianProductGenerator6 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator6(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} virtual ~CartesianProductGenerator6() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current6_; if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; ParamType current_value_; }; // class CartesianProductGenerator6::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator6& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; }; // class CartesianProductGenerator6 template class CartesianProductGenerator7 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator7(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} virtual ~CartesianProductGenerator7() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current7_; if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; ParamType current_value_; }; // class CartesianProductGenerator7::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator7& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; }; // class CartesianProductGenerator7 template class CartesianProductGenerator8 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator8(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} virtual ~CartesianProductGenerator8() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current8_; if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; ParamType current_value_; }; // class CartesianProductGenerator8::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator8& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; }; // class CartesianProductGenerator8 template class CartesianProductGenerator9 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator9(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} virtual ~CartesianProductGenerator9() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current9_; if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; ParamType current_value_; }; // class CartesianProductGenerator9::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator9& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; }; // class CartesianProductGenerator9 template class CartesianProductGenerator10 : public ParamGeneratorInterface< ::std::tr1::tuple > { public: typedef ::std::tr1::tuple ParamType; CartesianProductGenerator10(const ParamGenerator& g1, const ParamGenerator& g2, const ParamGenerator& g3, const ParamGenerator& g4, const ParamGenerator& g5, const ParamGenerator& g6, const ParamGenerator& g7, const ParamGenerator& g8, const ParamGenerator& g9, const ParamGenerator& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} virtual ~CartesianProductGenerator10() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, g8_.end(), g9_, g9_.end(), g10_, g10_.end()); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, const ParamGenerator& g1, const typename ParamGenerator::iterator& current1, const ParamGenerator& g2, const typename ParamGenerator::iterator& current2, const ParamGenerator& g3, const typename ParamGenerator::iterator& current3, const ParamGenerator& g4, const typename ParamGenerator::iterator& current4, const ParamGenerator& g5, const typename ParamGenerator::iterator& current5, const ParamGenerator& g6, const typename ParamGenerator::iterator& current6, const ParamGenerator& g7, const typename ParamGenerator::iterator& current7, const ParamGenerator& g8, const typename ParamGenerator::iterator& current8, const ParamGenerator& g9, const typename ParamGenerator::iterator& current9, const ParamGenerator& g10, const typename ParamGenerator::iterator& current10) : base_(base), begin1_(g1.begin()), end1_(g1.end()), current1_(current1), begin2_(g2.begin()), end2_(g2.end()), current2_(current2), begin3_(g3.begin()), end3_(g3.end()), current3_(current3), begin4_(g4.begin()), end4_(g4.end()), current4_(current4), begin5_(g5.begin()), end5_(g5.end()), current5_(current5), begin6_(g6.begin()), end6_(g6.end()), current6_(current6), begin7_(g7.begin()), end7_(g7.end()), current7_(current7), begin8_(g8.begin()), end8_(g8.end()), current8_(current8), begin9_(g9.begin()), end9_(g9.end()), current9_(current9), begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { ComputeCurrentValue(); } virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } // Advance should not be called on beyond-of-range iterators // so no component iterators must be beyond end of range, either. virtual void Advance() { assert(!AtEnd()); ++current10_; if (current10_ == end10_) { current10_ = begin10_; ++current9_; } if (current9_ == end9_) { current9_ = begin9_; ++current8_; } if (current8_ == end8_) { current8_ = begin8_; ++current7_; } if (current7_ == end7_) { current7_ = begin7_; ++current6_; } if (current6_ == end6_) { current6_ = begin6_; ++current5_; } if (current5_ == end5_) { current5_ = begin5_; ++current4_; } if (current4_ == end4_) { current4_ = begin4_; ++current3_; } if (current3_ == end3_) { current3_ = begin3_; ++current2_; } if (current2_ == end2_) { current2_ = begin2_; ++current1_; } ComputeCurrentValue(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const ParamType* Current() const { return ¤t_value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const Iterator* typed_other = CheckedDowncastToActualType(&other); // We must report iterators equal if they both point beyond their // respective ranges. That can happen in a variety of fashions, // so we have to consult AtEnd(). return (AtEnd() && typed_other->AtEnd()) || ( current1_ == typed_other->current1_ && current2_ == typed_other->current2_ && current3_ == typed_other->current3_ && current4_ == typed_other->current4_ && current5_ == typed_other->current5_ && current6_ == typed_other->current6_ && current7_ == typed_other->current7_ && current8_ == typed_other->current8_ && current9_ == typed_other->current9_ && current10_ == typed_other->current10_); } private: Iterator(const Iterator& other) : base_(other.base_), begin1_(other.begin1_), end1_(other.end1_), current1_(other.current1_), begin2_(other.begin2_), end2_(other.end2_), current2_(other.current2_), begin3_(other.begin3_), end3_(other.end3_), current3_(other.current3_), begin4_(other.begin4_), end4_(other.end4_), current4_(other.current4_), begin5_(other.begin5_), end5_(other.end5_), current5_(other.current5_), begin6_(other.begin6_), end6_(other.end6_), current6_(other.current6_), begin7_(other.begin7_), end7_(other.end7_), current7_(other.current7_), begin8_(other.begin8_), end8_(other.end8_), current8_(other.current8_), begin9_(other.begin9_), end9_(other.end9_), current9_(other.current9_), begin10_(other.begin10_), end10_(other.end10_), current10_(other.current10_) { ComputeCurrentValue(); } void ComputeCurrentValue() { if (!AtEnd()) current_value_ = ParamType(*current1_, *current2_, *current3_, *current4_, *current5_, *current6_, *current7_, *current8_, *current9_, *current10_); } bool AtEnd() const { // We must report iterator past the end of the range when either of the // component iterators has reached the end of its range. return current1_ == end1_ || current2_ == end2_ || current3_ == end3_ || current4_ == end4_ || current5_ == end5_ || current6_ == end6_ || current7_ == end7_ || current8_ == end8_ || current9_ == end9_ || current10_ == end10_; } // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. // current[i]_ is the actual traversing iterator. const typename ParamGenerator::iterator begin1_; const typename ParamGenerator::iterator end1_; typename ParamGenerator::iterator current1_; const typename ParamGenerator::iterator begin2_; const typename ParamGenerator::iterator end2_; typename ParamGenerator::iterator current2_; const typename ParamGenerator::iterator begin3_; const typename ParamGenerator::iterator end3_; typename ParamGenerator::iterator current3_; const typename ParamGenerator::iterator begin4_; const typename ParamGenerator::iterator end4_; typename ParamGenerator::iterator current4_; const typename ParamGenerator::iterator begin5_; const typename ParamGenerator::iterator end5_; typename ParamGenerator::iterator current5_; const typename ParamGenerator::iterator begin6_; const typename ParamGenerator::iterator end6_; typename ParamGenerator::iterator current6_; const typename ParamGenerator::iterator begin7_; const typename ParamGenerator::iterator end7_; typename ParamGenerator::iterator current7_; const typename ParamGenerator::iterator begin8_; const typename ParamGenerator::iterator end8_; typename ParamGenerator::iterator current8_; const typename ParamGenerator::iterator begin9_; const typename ParamGenerator::iterator end9_; typename ParamGenerator::iterator current9_; const typename ParamGenerator::iterator begin10_; const typename ParamGenerator::iterator end10_; typename ParamGenerator::iterator current10_; ParamType current_value_; }; // class CartesianProductGenerator10::Iterator // No implementation - assignment is unsupported. void operator=(const CartesianProductGenerator10& other); const ParamGenerator g1_; const ParamGenerator g2_; const ParamGenerator g3_; const ParamGenerator g4_; const ParamGenerator g5_; const ParamGenerator g6_; const ParamGenerator g7_; const ParamGenerator g8_; const ParamGenerator g9_; const ParamGenerator g10_; }; // class CartesianProductGenerator10 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Helper classes providing Combine() with polymorphic features. They allow // casting CartesianProductGeneratorN to ParamGenerator if T is // convertible to U. // template class CartesianProductHolder2 { public: CartesianProductHolder2(const Generator1& g1, const Generator2& g2) : g1_(g1), g2_(g2) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator2( static_cast >(g1_), static_cast >(g2_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder2& other); const Generator1 g1_; const Generator2 g2_; }; // class CartesianProductHolder2 template class CartesianProductHolder3 { public: CartesianProductHolder3(const Generator1& g1, const Generator2& g2, const Generator3& g3) : g1_(g1), g2_(g2), g3_(g3) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator3( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder3& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; }; // class CartesianProductHolder3 template class CartesianProductHolder4 { public: CartesianProductHolder4(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator4( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder4& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; }; // class CartesianProductHolder4 template class CartesianProductHolder5 { public: CartesianProductHolder5(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator5( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder5& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; }; // class CartesianProductHolder5 template class CartesianProductHolder6 { public: CartesianProductHolder6(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator6( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder6& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; }; // class CartesianProductHolder6 template class CartesianProductHolder7 { public: CartesianProductHolder7(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator7( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder7& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; }; // class CartesianProductHolder7 template class CartesianProductHolder8 { public: CartesianProductHolder8(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator8( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder8& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; }; // class CartesianProductHolder8 template class CartesianProductHolder9 { public: CartesianProductHolder9(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator9( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder9& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; }; // class CartesianProductHolder9 template class CartesianProductHolder10 { public: CartesianProductHolder10(const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), g9_(g9), g10_(g10) {} template operator ParamGenerator< ::std::tr1::tuple >() const { return ParamGenerator< ::std::tr1::tuple >( new CartesianProductGenerator10( static_cast >(g1_), static_cast >(g2_), static_cast >(g3_), static_cast >(g4_), static_cast >(g5_), static_cast >(g6_), static_cast >(g7_), static_cast >(g8_), static_cast >(g9_), static_cast >(g10_))); } private: // No implementation - assignment is unsupported. void operator=(const CartesianProductHolder10& other); const Generator1 g1_; const Generator2 g2_; const Generator3 g3_; const Generator4 g4_; const Generator5 g5_; const Generator6 g6_; const Generator7 g7_; const Generator8 g8_; const Generator9 g9_; const Generator10 g10_; }; // class CartesianProductHolder10 # endif // GTEST_HAS_COMBINE } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-death-test-internal.h0000644015303500042660000003114512151455365025616 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file defines internal utilities needed for implementing // death tests. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #include "gtest/internal/gtest-internal.h" #include namespace testing { namespace internal { GTEST_DECLARE_string_(internal_run_death_test); // Names of the flags (needed for parsing Google Test flags). const char kDeathTestStyleFlag[] = "death_test_style"; const char kDeathTestUseFork[] = "death_test_use_fork"; const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; #if GTEST_HAS_DEATH_TEST // DeathTest is a class that hides much of the complexity of the // GTEST_DEATH_TEST_ macro. It is abstract; its static Create method // returns a concrete class that depends on the prevailing death test // style, as defined by the --gtest_death_test_style and/or // --gtest_internal_run_death_test flags. // In describing the results of death tests, these terms are used with // the corresponding definitions: // // exit status: The integer exit information in the format specified // by wait(2) // exit code: The integer code passed to exit(3), _exit(2), or // returned from main() class GTEST_API_ DeathTest { public: // Create returns false if there was an error determining the // appropriate action to take for the current death test; for example, // if the gtest_death_test_style flag is set to an invalid value. // The LastMessage method will return a more detailed message in that // case. Otherwise, the DeathTest pointer pointed to by the "test" // argument is set. If the death test should be skipped, the pointer // is set to NULL; otherwise, it is set to the address of a new concrete // DeathTest object that controls the execution of the current test. static bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); DeathTest(); virtual ~DeathTest() { } // A helper class that aborts a death test when it's deleted. class ReturnSentinel { public: explicit ReturnSentinel(DeathTest* test) : test_(test) { } ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } private: DeathTest* const test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); } GTEST_ATTRIBUTE_UNUSED_; // An enumeration of possible roles that may be taken when a death // test is encountered. EXECUTE means that the death test logic should // be executed immediately. OVERSEE means that the program should prepare // the appropriate environment for a child process to execute the death // test, then wait for it to complete. enum TestRole { OVERSEE_TEST, EXECUTE_TEST }; // An enumeration of the three reasons that a test might be aborted. enum AbortReason { TEST_ENCOUNTERED_RETURN_STATEMENT, TEST_THREW_EXCEPTION, TEST_DID_NOT_DIE }; // Assumes one of the above roles. virtual TestRole AssumeRole() = 0; // Waits for the death test to finish and returns its status. virtual int Wait() = 0; // Returns true if the death test passed; that is, the test process // exited during the test, its exit status matches a user-supplied // predicate, and its stderr output matches a user-supplied regular // expression. // The user-supplied predicate may be a macro expression rather // than a function pointer or functor, or else Wait and Passed could // be combined. virtual bool Passed(bool exit_status_ok) = 0; // Signals that the death test did not die as expected. virtual void Abort(AbortReason reason) = 0; // Returns a human-readable outcome message regarding the outcome of // the last death test. static const char* LastMessage(); static void set_last_death_test_message(const String& message); private: // A string containing a description of the outcome of the last death test. static String last_death_test_message_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); }; // Factory interface for death tests. May be mocked out for testing. class DeathTestFactory { public: virtual ~DeathTestFactory() { } virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) = 0; }; // A concrete DeathTestFactory implementation for normal use. class DefaultDeathTestFactory : public DeathTestFactory { public: virtual bool Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test); }; // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. GTEST_API_ bool ExitedUnsuccessfully(int exit_status); // Traps C++ exceptions escaping statement and reports them as test // failures. Note that trapping SEH exceptions is not implemented here. # if GTEST_HAS_EXCEPTIONS # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } catch (const ::std::exception& gtest_exception) { \ fprintf(\ stderr, \ "\n%s: Caught std::exception-derived exception escaping the " \ "death test statement. Exception message: %s\n", \ ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ gtest_exception.what()); \ fflush(stderr); \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } catch (...) { \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } # else # define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) # endif // This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, // ASSERT_EXIT*, and EXPECT_EXIT*. # define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ const ::testing::internal::RE& gtest_regex = (regex); \ ::testing::internal::DeathTest* gtest_dt; \ if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ __FILE__, __LINE__, >est_dt)) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ if (gtest_dt != NULL) { \ ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ gtest_dt_ptr(gtest_dt); \ switch (gtest_dt->AssumeRole()) { \ case ::testing::internal::DeathTest::OVERSEE_TEST: \ if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ } \ break; \ case ::testing::internal::DeathTest::EXECUTE_TEST: { \ ::testing::internal::DeathTest::ReturnSentinel \ gtest_sentinel(gtest_dt); \ GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ break; \ } \ default: \ break; \ } \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ fail(::testing::internal::DeathTest::LastMessage()) // The symbol "fail" here expands to something into which a message // can be streamed. // A class representing the parsed contents of the // --gtest_internal_run_death_test flag, as it existed when // RUN_ALL_TESTS was called. class InternalRunDeathTestFlag { public: InternalRunDeathTestFlag(const String& a_file, int a_line, int an_index, int a_write_fd) : file_(a_file), line_(a_line), index_(an_index), write_fd_(a_write_fd) {} ~InternalRunDeathTestFlag() { if (write_fd_ >= 0) posix::Close(write_fd_); } String file() const { return file_; } int line() const { return line_; } int index() const { return index_; } int write_fd() const { return write_fd_; } private: String file_; int line_; int index_; int write_fd_; GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); }; // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); #else // GTEST_HAS_DEATH_TEST // This macro is used for implementing macros such as // EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where // death tests are not supported. Those macros must compile on such systems // iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on // systems that support death tests. This allows one to write such a macro // on a system that does not support death tests and be sure that it will // compile on a death-test supporting system. // // Parameters: // statement - A statement that a macro such as EXPECT_DEATH would test // for program termination. This macro has to make sure this // statement is compiled but not executed, to ensure that // EXPECT_DEATH_IF_SUPPORTED compiles with a certain // parameter iff EXPECT_DEATH compiles with it. // regex - A regex that a macro such as EXPECT_DEATH would use to test // the output of statement. This parameter has to be // compiled but not evaluated by this macro, to ensure that // this macro only accepts expressions that a macro such as // EXPECT_DEATH would accept. // terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED // and a return statement for ASSERT_DEATH_IF_SUPPORTED. // This ensures that ASSERT_DEATH_IF_SUPPORTED will not // compile inside functions where ASSERT_DEATH doesn't // compile. // // The branch that has an always false condition is used to ensure that // statement and regex are compiled (and thus syntactically correct) but // never executed. The unreachable code macro protects the terminator // statement from generating an 'unreachable code' warning in case // statement unconditionally returns or throws. The Message constructor at // the end allows the syntax of streaming additional messages into the // macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. # define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ GTEST_LOG_(WARNING) \ << "Death tests are not supported on this platform.\n" \ << "Statement '" #statement "' cannot be verified."; \ } else if (::testing::internal::AlwaysFalse()) { \ ::testing::internal::RE::PartialMatch(".*", (regex)); \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ terminator; \ } else \ ::testing::Message() #endif // GTEST_HAS_DEATH_TEST } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-param-util.h0000644015303500042660000005725212151455365024024 00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: vladl@google.com (Vlad Losev) // Type and function utilities for implementing parameterized tests. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #include #include #include // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-linked_ptr.h" #include "gtest/internal/gtest-port.h" #include "gtest/gtest-printers.h" #if GTEST_HAS_PARAM_TEST namespace testing { namespace internal { // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Outputs a message explaining invalid registration of different // fixture class for the same test case. This may happen when // TEST_P macro is used to define two tests with the same name // but in different namespaces. GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line); template class ParamGeneratorInterface; template class ParamGenerator; // Interface for iterating over elements provided by an implementation // of ParamGeneratorInterface. template class ParamIteratorInterface { public: virtual ~ParamIteratorInterface() {} // A pointer to the base generator instance. // Used only for the purposes of iterator comparison // to make sure that two iterators belong to the same generator. virtual const ParamGeneratorInterface* BaseGenerator() const = 0; // Advances iterator to point to the next element // provided by the generator. The caller is responsible // for not calling Advance() on an iterator equal to // BaseGenerator()->End(). virtual void Advance() = 0; // Clones the iterator object. Used for implementing copy semantics // of ParamIterator. virtual ParamIteratorInterface* Clone() const = 0; // Dereferences the current iterator and provides (read-only) access // to the pointed value. It is the caller's responsibility not to call // Current() on an iterator equal to BaseGenerator()->End(). // Used for implementing ParamGenerator::operator*(). virtual const T* Current() const = 0; // Determines whether the given iterator and other point to the same // element in the sequence generated by the generator. // Used for implementing ParamGenerator::operator==(). virtual bool Equals(const ParamIteratorInterface& other) const = 0; }; // Class iterating over elements provided by an implementation of // ParamGeneratorInterface. It wraps ParamIteratorInterface // and implements the const forward iterator concept. template class ParamIterator { public: typedef T value_type; typedef const T& reference; typedef ptrdiff_t difference_type; // ParamIterator assumes ownership of the impl_ pointer. ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} ParamIterator& operator=(const ParamIterator& other) { if (this != &other) impl_.reset(other.impl_->Clone()); return *this; } const T& operator*() const { return *impl_->Current(); } const T* operator->() const { return impl_->Current(); } // Prefix version of operator++. ParamIterator& operator++() { impl_->Advance(); return *this; } // Postfix version of operator++. ParamIterator operator++(int /*unused*/) { ParamIteratorInterface* clone = impl_->Clone(); impl_->Advance(); return ParamIterator(clone); } bool operator==(const ParamIterator& other) const { return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_); } bool operator!=(const ParamIterator& other) const { return !(*this == other); } private: friend class ParamGenerator; explicit ParamIterator(ParamIteratorInterface* impl) : impl_(impl) {} scoped_ptr > impl_; }; // ParamGeneratorInterface is the binary interface to access generators // defined in other translation units. template class ParamGeneratorInterface { public: typedef T ParamType; virtual ~ParamGeneratorInterface() {} // Generator interface definition virtual ParamIteratorInterface* Begin() const = 0; virtual ParamIteratorInterface* End() const = 0; }; // Wraps ParamGeneratorInterface and provides general generator syntax // compatible with the STL Container concept. // This class implements copy initialization semantics and the contained // ParamGeneratorInterface instance is shared among all copies // of the original object. This is possible because that instance is immutable. template class ParamGenerator { public: typedef ParamIterator iterator; explicit ParamGenerator(ParamGeneratorInterface* impl) : impl_(impl) {} ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {} ParamGenerator& operator=(const ParamGenerator& other) { impl_ = other.impl_; return *this; } iterator begin() const { return iterator(impl_->Begin()); } iterator end() const { return iterator(impl_->End()); } private: linked_ptr > impl_; }; // Generates values from a range of two comparable values. Can be used to // generate sequences of user-defined types that implement operator+() and // operator<(). // This class is used in the Range() function. template class RangeGenerator : public ParamGeneratorInterface { public: RangeGenerator(T begin, T end, IncrementT step) : begin_(begin), end_(end), step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} virtual ~RangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, begin_, 0, step_); } virtual ParamIteratorInterface* End() const { return new Iterator(this, end_, end_index_, step_); } private: class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, T value, int index, IncrementT step) : base_(base), value_(value), index_(index), step_(step) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { value_ = value_ + step_; index_++; } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } virtual const T* Current() const { return &value_; } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; const int other_index = CheckedDowncastToActualType(&other)->index_; return index_ == other_index; } private: Iterator(const Iterator& other) : ParamIteratorInterface(), base_(other.base_), value_(other.value_), index_(other.index_), step_(other.step_) {} // No implementation - assignment is unsupported. void operator=(const Iterator& other); const ParamGeneratorInterface* const base_; T value_; int index_; const IncrementT step_; }; // class RangeGenerator::Iterator static int CalculateEndIndex(const T& begin, const T& end, const IncrementT& step) { int end_index = 0; for (T i = begin; i < end; i = i + step) end_index++; return end_index; } // No implementation - assignment is unsupported. void operator=(const RangeGenerator& other); const T begin_; const T end_; const IncrementT step_; // The index for the end() iterator. All the elements in the generated // sequence are indexed (0-based) to aid iterator comparison. const int end_index_; }; // class RangeGenerator // Generates values from a pair of STL-style iterators. Used in the // ValuesIn() function. The elements are copied from the source range // since the source can be located on the stack, and the generator // is likely to persist beyond that stack frame. template class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface { public: template ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) : container_(begin, end) {} virtual ~ValuesInIteratorRangeGenerator() {} virtual ParamIteratorInterface* Begin() const { return new Iterator(this, container_.begin()); } virtual ParamIteratorInterface* End() const { return new Iterator(this, container_.end()); } private: typedef typename ::std::vector ContainerType; class Iterator : public ParamIteratorInterface { public: Iterator(const ParamGeneratorInterface* base, typename ContainerType::const_iterator iterator) : base_(base), iterator_(iterator) {} virtual ~Iterator() {} virtual const ParamGeneratorInterface* BaseGenerator() const { return base_; } virtual void Advance() { ++iterator_; value_.reset(); } virtual ParamIteratorInterface* Clone() const { return new Iterator(*this); } // We need to use cached value referenced by iterator_ because *iterator_ // can return a temporary object (and of type other then T), so just // having "return &*iterator_;" doesn't work. // value_ is updated here and not in Advance() because Advance() // can advance iterator_ beyond the end of the range, and we cannot // detect that fact. The client code, on the other hand, is // responsible for not calling Current() on an out-of-range iterator. virtual const T* Current() const { if (value_.get() == NULL) value_.reset(new T(*iterator_)); return value_.get(); } virtual bool Equals(const ParamIteratorInterface& other) const { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) << "The program attempted to compare iterators " << "from different generators." << std::endl; return iterator_ == CheckedDowncastToActualType(&other)->iterator_; } private: Iterator(const Iterator& other) // The explicit constructor call suppresses a false warning // emitted by gcc when supplied with the -Wextra option. : ParamIteratorInterface(), base_(other.base_), iterator_(other.iterator_) {} const ParamGeneratorInterface* const base_; typename ContainerType::const_iterator iterator_; // A cached value of *iterator_. We keep it here to allow access by // pointer in the wrapping iterator's operator->(). // value_ needs to be mutable to be accessed in Current(). // Use of scoped_ptr helps manage cached value's lifetime, // which is bound by the lifespan of the iterator itself. mutable scoped_ptr value_; }; // class ValuesInIteratorRangeGenerator::Iterator // No implementation - assignment is unsupported. void operator=(const ValuesInIteratorRangeGenerator& other); const ContainerType container_; }; // class ValuesInIteratorRangeGenerator // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Stores a parameter value and later creates tests parameterized with that // value. template class ParameterizedTestFactory : public TestFactoryBase { public: typedef typename TestClass::ParamType ParamType; explicit ParameterizedTestFactory(ParamType parameter) : parameter_(parameter) {} virtual Test* CreateTest() { TestClass::SetParam(¶meter_); return new TestClass(); } private: const ParamType parameter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactoryBase is a base class for meta-factories that create // test factories for passing into MakeAndRegisterTestInfo function. template class TestMetaFactoryBase { public: virtual ~TestMetaFactoryBase() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0; }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // TestMetaFactory creates test factories for passing into // MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives // ownership of test factory pointer, same factory object cannot be passed // into that method twice. But ParameterizedTestCaseInfo is going to call // it for each Test/Parameter value combination. Thus it needs meta factory // creator class. template class TestMetaFactory : public TestMetaFactoryBase { public: typedef typename TestCase::ParamType ParamType; TestMetaFactory() {} virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { return new ParameterizedTestFactory(parameter); } private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfoBase is a generic interface // to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase // accumulates test information provided by TEST_P macro invocations // and generators provided by INSTANTIATE_TEST_CASE_P macro invocations // and uses that information to register all resulting test instances // in RegisterTests method. The ParameterizeTestCaseRegistry class holds // a collection of pointers to the ParameterizedTestCaseInfo objects // and calls RegisterTests() on each of them when asked. class ParameterizedTestCaseInfoBase { public: virtual ~ParameterizedTestCaseInfoBase() {} // Base part of test case name for display purposes. virtual const string& GetTestCaseName() const = 0; // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const = 0; // UnitTest class invokes this method to register tests in this // test case right before running them in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. virtual void RegisterTests() = 0; protected: ParameterizedTestCaseInfoBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseInfo accumulates tests obtained from TEST_P // macro invocations for a particular test case and generators // obtained from INSTANTIATE_TEST_CASE_P macro invocations for that // test case. It registers tests with all values generated by all // generators when asked. template class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { public: // ParamType and GeneratorCreationFunc are private types but are required // for declarations of public methods AddTestPattern() and // AddTestCaseInstantiation(). typedef typename TestCase::ParamType ParamType; // A function that returns an instance of appropriate generator type. typedef ParamGenerator(GeneratorCreationFunc)(); explicit ParameterizedTestCaseInfo(const char* name) : test_case_name_(name) {} // Test case base name for display purposes. virtual const string& GetTestCaseName() const { return test_case_name_; } // Test case id to verify identity. virtual TypeId GetTestCaseTypeId() const { return GetTypeId(); } // TEST_P macro uses AddTestPattern() to record information // about a single test in a LocalTestInfo structure. // test_case_name is the base name of the test case (without invocation // prefix). test_base_name is the name of an individual test without // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is // test case base name and DoBar is test base name. void AddTestPattern(const char* test_case_name, const char* test_base_name, TestMetaFactoryBase* meta_factory) { tests_.push_back(linked_ptr(new TestInfo(test_case_name, test_base_name, meta_factory))); } // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information // about a generator. int AddTestCaseInstantiation(const string& instantiation_name, GeneratorCreationFunc* func, const char* /* file */, int /* line */) { instantiations_.push_back(::std::make_pair(instantiation_name, func)); return 0; // Return value used only to run this method in namespace scope. } // UnitTest class invokes this method to register tests in this test case // test cases right before running tests in RUN_ALL_TESTS macro. // This method should not be called more then once on any single // instance of a ParameterizedTestCaseInfoBase derived class. // UnitTest has a guard to prevent from calling this method more then once. virtual void RegisterTests() { for (typename TestInfoContainer::iterator test_it = tests_.begin(); test_it != tests_.end(); ++test_it) { linked_ptr test_info = *test_it; for (typename InstantiationContainer::iterator gen_it = instantiations_.begin(); gen_it != instantiations_.end(); ++gen_it) { const string& instantiation_name = gen_it->first; ParamGenerator generator((*gen_it->second)()); Message test_case_name_stream; if ( !instantiation_name.empty() ) test_case_name_stream << instantiation_name << "/"; test_case_name_stream << test_info->test_case_base_name; int i = 0; for (typename ParamGenerator::iterator param_it = generator.begin(); param_it != generator.end(); ++param_it, ++i) { Message test_name_stream; test_name_stream << test_info->test_base_name << "/" << i; MakeAndRegisterTestInfo( test_case_name_stream.GetString().c_str(), test_name_stream.GetString().c_str(), NULL, // No type parameter. PrintToString(*param_it).c_str(), GetTestCaseTypeId(), TestCase::SetUpTestCase, TestCase::TearDownTestCase, test_info->test_meta_factory->CreateTestFactory(*param_it)); } // for param_it } // for gen_it } // for test_it } // RegisterTests private: // LocalTestInfo structure keeps information about a single test registered // with TEST_P macro. struct TestInfo { TestInfo(const char* a_test_case_base_name, const char* a_test_base_name, TestMetaFactoryBase* a_test_meta_factory) : test_case_base_name(a_test_case_base_name), test_base_name(a_test_base_name), test_meta_factory(a_test_meta_factory) {} const string test_case_base_name; const string test_base_name; const scoped_ptr > test_meta_factory; }; typedef ::std::vector > TestInfoContainer; // Keeps pairs of // received from INSTANTIATE_TEST_CASE_P macros. typedef ::std::vector > InstantiationContainer; const string test_case_name_; TestInfoContainer tests_; InstantiationContainer instantiations_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); }; // class ParameterizedTestCaseInfo // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase // classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P // macros use it to locate their corresponding ParameterizedTestCaseInfo // descriptors. class ParameterizedTestCaseRegistry { public: ParameterizedTestCaseRegistry() {} ~ParameterizedTestCaseRegistry() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { delete *it; } } // Looks up or creates and returns a structure containing information about // tests and instantiations of a particular test case. template ParameterizedTestCaseInfo* GetTestCasePatternHolder( const char* test_case_name, const char* file, int line) { ParameterizedTestCaseInfo* typed_test_info = NULL; for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { if ((*it)->GetTestCaseName() == test_case_name) { if ((*it)->GetTestCaseTypeId() != GetTypeId()) { // Complain about incorrect usage of Google Test facilities // and terminate the program since we cannot guaranty correct // test case setup and tear-down in this case. ReportInvalidTestCaseType(test_case_name, file, line); posix::Abort(); } else { // At this point we are sure that the object we found is of the same // type we are looking for, so we downcast it to that type // without further checks. typed_test_info = CheckedDowncastToActualType< ParameterizedTestCaseInfo >(*it); } break; } } if (typed_test_info == NULL) { typed_test_info = new ParameterizedTestCaseInfo(test_case_name); test_case_infos_.push_back(typed_test_info); } return typed_test_info; } void RegisterTests() { for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); it != test_case_infos_.end(); ++it) { (*it)->RegisterTests(); } } private: typedef ::std::vector TestCaseInfoContainer; TestCaseInfoContainer test_case_infos_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); }; } // namespace internal } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/internal/gtest-internal.h0000644015303500042660000013463412151455365023565 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) // // The Google C++ Testing Framework (Google Test) // // This header file declares functions and macros used internally by // Google Test. They are subject to change without notice. #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #include "gtest/internal/gtest-port.h" #if GTEST_OS_LINUX # include # include # include # include #endif // GTEST_OS_LINUX #include #include #include #include #include #include "gtest/internal/gtest-string.h" #include "gtest/internal/gtest-filepath.h" #include "gtest/internal/gtest-type-util.h" #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning disable 2304 #endif // Due to C++ preprocessor weirdness, we need double indirection to // concatenate two tokens when one of them is __LINE__. Writing // // foo ## __LINE__ // // will result in the token foo__LINE__, instead of foo followed by // the current line number. For more details, see // http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar // Google Test defines the testing::Message class to allow construction of // test messages via the << operator. The idea is that anything // streamable to std::ostream can be streamed to a testing::Message. // This allows a user to use his own types in Google Test assertions by // overloading the << operator. // // util/gtl/stl_logging-inl.h overloads << for STL containers. These // overloads cannot be defined in the std namespace, as that will be // undefined behavior. Therefore, they are defined in the global // namespace instead. // // C++'s symbol lookup rule (i.e. Koenig lookup) says that these // overloads are visible in either the std namespace or the global // namespace, but not other namespaces, including the testing // namespace which Google Test's Message class is in. // // To allow STL containers (and other types that has a << operator // defined in the global namespace) to be used in Google Test assertions, // testing::Message must access the custom << operator from the global // namespace. Hence this helper function. // // Note: Jeffrey Yasskin suggested an alternative fix by "using // ::operator<<;" in the definition of Message's operator<<. That fix // doesn't require a helper function, but unfortunately doesn't // compile with MSVC. template inline void GTestStreamToHelper(std::ostream* os, const T& val) { *os << val; } class ProtocolMessage; namespace proto2 { class Message; } namespace testing { // Forward declarations. class AssertionResult; // Result of an assertion. class Message; // Represents a failure message. class Test; // Represents a test. class TestInfo; // Information about a test. class TestPartResult; // Result of a test part. class UnitTest; // A collection of test cases. template ::std::string PrintToString(const T& value); namespace internal { struct TraceInfo; // Information about a trace point. class ScopedTrace; // Implements scoped trace. class TestInfoImpl; // Opaque implementation of TestInfo class UnitTestImpl; // Opaque implementation of UnitTest // How many times InitGoogleTest() has been called. extern int g_init_gtest_count; // The text used in failure messages to indicate the start of the // stack trace. GTEST_API_ extern const char kStackTraceMarker[]; // A secret type that Google Test users don't know about. It has no // definition on purpose. Therefore it's impossible to create a // Secret object, which is what we want. class Secret; // Two overloaded helpers for checking at compile time whether an // expression is a null pointer literal (i.e. NULL or any 0-valued // compile-time integral constant). Their return values have // different sizes, so we can use sizeof() to test which version is // picked by the compiler. These helpers have no implementations, as // we only need their signatures. // // Given IsNullLiteralHelper(x), the compiler will pick the first // version if x can be implicitly converted to Secret*, and pick the // second version otherwise. Since Secret is a secret and incomplete // type, the only expression a user can write that has type Secret* is // a null pointer literal. Therefore, we know that x is a null // pointer literal if and only if the first version is picked by the // compiler. char IsNullLiteralHelper(Secret* p); char (&IsNullLiteralHelper(...))[2]; // NOLINT // A compile-time bool constant that is true if and only if x is a // null pointer literal (i.e. NULL or any 0-valued compile-time // integral constant). #ifdef GTEST_ELLIPSIS_NEEDS_POD_ // We lose support for NULL detection where the compiler doesn't like // passing non-POD classes through ellipsis (...). # define GTEST_IS_NULL_LITERAL_(x) false #else # define GTEST_IS_NULL_LITERAL_(x) \ (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) #endif // GTEST_ELLIPSIS_NEEDS_POD_ // Appends the user-supplied message to the Google-Test-generated message. GTEST_API_ String AppendUserMessage(const String& gtest_msg, const Message& user_msg); // A helper class for creating scoped traces in user programs. class GTEST_API_ ScopedTrace { public: // The c'tor pushes the given source file location and message onto // a trace stack maintained by Google Test. ScopedTrace(const char* file, int line, const Message& message); // The d'tor pops the info pushed by the c'tor. // // Note that the d'tor is not virtual in order to be efficient. // Don't inherit from ScopedTrace! ~ScopedTrace(); private: GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); } GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its // c'tor and d'tor. Therefore it doesn't // need to be used otherwise. // Converts a streamable value to a String. A NULL pointer is // converted to "(null)". When the input value is a ::string, // ::std::string, ::wstring, or ::std::wstring object, each NUL // character in it is replaced with "\\0". // Declared here but defined in gtest.h, so that it has access // to the definition of the Message class, required by the ARM // compiler. template String StreamableToString(const T& streamable); // The Symbian compiler has a bug that prevents it from selecting the // correct overload of FormatForComparisonFailureMessage (see below) // unless we pass the first argument by reference. If we do that, // however, Visual Age C++ 10.1 generates a compiler error. Therefore // we only apply the work-around for Symbian. #if defined(__SYMBIAN32__) # define GTEST_CREF_WORKAROUND_ const& #else # define GTEST_CREF_WORKAROUND_ #endif // When this operand is a const char* or char*, if the other operand // is a ::std::string or ::string, we print this operand as a C string // rather than a pointer (we do the same for wide strings); otherwise // we print it as a pointer to be safe. // This internal macro is used to avoid duplicated code. #define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\ inline String FormatForComparisonFailureMessage(\ operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \ const operand2_type& /*operand2*/) {\ return operand1_printer(str);\ }\ inline String FormatForComparisonFailureMessage(\ const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \ const operand2_type& /*operand2*/) {\ return operand1_printer(str);\ } GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted) #if GTEST_HAS_STD_WSTRING GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted) #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_STRING GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted) #endif // GTEST_HAS_GLOBAL_STRING #if GTEST_HAS_GLOBAL_WSTRING GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted) #endif // GTEST_HAS_GLOBAL_WSTRING #undef GTEST_FORMAT_IMPL_ // The next four overloads handle the case where the operand being // printed is a char/wchar_t pointer and the other operand is not a // string/wstring object. In such cases, we just print the operand as // a pointer to be safe. #define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType) \ template \ String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \ const T&) { \ return PrintToString(static_cast(p)); \ } GTEST_FORMAT_CHAR_PTR_IMPL_(char) GTEST_FORMAT_CHAR_PTR_IMPL_(const char) GTEST_FORMAT_CHAR_PTR_IMPL_(wchar_t) GTEST_FORMAT_CHAR_PTR_IMPL_(const wchar_t) #undef GTEST_FORMAT_CHAR_PTR_IMPL_ // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. GTEST_API_ AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const String& expected_value, const String& actual_value, bool ignoring_case); // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. GTEST_API_ String GetBoolAssertionFailureMessage( const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value); // This template class represents an IEEE floating-point number // (either single-precision or double-precision, depending on the // template parameters). // // The purpose of this class is to do more sophisticated number // comparison. (Due to round-off error, etc, it's very unlikely that // two floating-points will be equal exactly. Hence a naive // comparison by the == operation often doesn't work.) // // Format of IEEE floating-point: // // The most-significant bit being the leftmost, an IEEE // floating-point looks like // // sign_bit exponent_bits fraction_bits // // Here, sign_bit is a single bit that designates the sign of the // number. // // For float, there are 8 exponent bits and 23 fraction bits. // // For double, there are 11 exponent bits and 52 fraction bits. // // More details can be found at // http://en.wikipedia.org/wiki/IEEE_floating-point_standard. // // Template parameter: // // RawType: the raw floating-point type (either float or double) template class FloatingPoint { public: // Defines the unsigned integer type that has the same size as the // floating point number. typedef typename TypeWithSize::UInt Bits; // Constants. // # of bits in a number. static const size_t kBitCount = 8*sizeof(RawType); // # of fraction bits in a number. static const size_t kFractionBitCount = std::numeric_limits::digits - 1; // # of exponent bits in a number. static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; // The mask for the sign bit. static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1); // The mask for the fraction bits. static const Bits kFractionBitMask = ~static_cast(0) >> (kExponentBitCount + 1); // The mask for the exponent bits. static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); // How many ULP's (Units in the Last Place) we want to tolerate when // comparing two numbers. The larger the value, the more error we // allow. A 0 value means that two numbers must be exactly the same // to be considered equal. // // The maximum error of a single floating-point operation is 0.5 // units in the last place. On Intel CPU's, all floating-point // calculations are done with 80-bit precision, while double has 64 // bits. Therefore, 4 should be enough for ordinary use. // // See the following article for more details on ULP: // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm. static const size_t kMaxUlps = 4; // Constructs a FloatingPoint from a raw floating-point number. // // On an Intel CPU, passing a non-normalized NAN (Not a Number) // around may change its bits, although the new value is guaranteed // to be also a NAN. Therefore, don't expect this constructor to // preserve the bits in x when x is a NAN. explicit FloatingPoint(const RawType& x) { u_.value_ = x; } // Static methods // Reinterprets a bit pattern as a floating-point number. // // This function is needed to test the AlmostEquals() method. static RawType ReinterpretBits(const Bits bits) { FloatingPoint fp(0); fp.u_.bits_ = bits; return fp.u_.value_; } // Returns the floating-point number that represent positive infinity. static RawType Infinity() { return ReinterpretBits(kExponentBitMask); } // Non-static methods // Returns the bits that represents this number. const Bits &bits() const { return u_.bits_; } // Returns the exponent bits of this number. Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } // Returns the fraction bits of this number. Bits fraction_bits() const { return kFractionBitMask & u_.bits_; } // Returns the sign bit of this number. Bits sign_bit() const { return kSignBitMask & u_.bits_; } // Returns true iff this is NAN (not a number). bool is_nan() const { // It's a NAN if the exponent bits are all ones and the fraction // bits are not entirely zeros. return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); } // Returns true iff this number is at most kMaxUlps ULP's away from // rhs. In particular, this function: // // - returns false if either number is (or both are) NAN. // - treats really large numbers as almost equal to infinity. // - thinks +0.0 and -0.0 are 0 DLP's apart. bool AlmostEquals(const FloatingPoint& rhs) const { // The IEEE standard says that any comparison operation involving // a NAN must return false. if (is_nan() || rhs.is_nan()) return false; return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <= kMaxUlps; } private: // The data type used to store the actual floating-point number. union FloatingPointUnion { RawType value_; // The raw floating-point number. Bits bits_; // The bits that represent the number. }; // Converts an integer from the sign-and-magnitude representation to // the biased representation. More precisely, let N be 2 to the // power of (kBitCount - 1), an integer x is represented by the // unsigned number x + N. // // For instance, // // -N + 1 (the most negative number representable using // sign-and-magnitude) is represented by 1; // 0 is represented by N; and // N - 1 (the biggest number representable using // sign-and-magnitude) is represented by 2N - 1. // // Read http://en.wikipedia.org/wiki/Signed_number_representations // for more details on signed number representations. static Bits SignAndMagnitudeToBiased(const Bits &sam) { if (kSignBitMask & sam) { // sam represents a negative number. return ~sam + 1; } else { // sam represents a positive number. return kSignBitMask | sam; } } // Given two numbers in the sign-and-magnitude representation, // returns the distance between them as an unsigned number. static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2) { const Bits biased1 = SignAndMagnitudeToBiased(sam1); const Bits biased2 = SignAndMagnitudeToBiased(sam2); return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); } FloatingPointUnion u_; }; // Typedefs the instances of the FloatingPoint template class that we // care to use. typedef FloatingPoint Float; typedef FloatingPoint Double; // In order to catch the mistake of putting tests that use different // test fixture classes in the same test case, we need to assign // unique IDs to fixture classes and compare them. The TypeId type is // used to hold such IDs. The user should treat TypeId as an opaque // type: the only operation allowed on TypeId values is to compare // them for equality using the == operator. typedef const void* TypeId; template class TypeIdHelper { public: // dummy_ must not have a const type. Otherwise an overly eager // compiler (e.g. MSVC 7.1 & 8.0) may try to merge // TypeIdHelper::dummy_ for different Ts as an "optimization". static bool dummy_; }; template bool TypeIdHelper::dummy_ = false; // GetTypeId() returns the ID of type T. Different values will be // returned for different types. Calling the function twice with the // same type argument is guaranteed to return the same ID. template TypeId GetTypeId() { // The compiler is required to allocate a different // TypeIdHelper::dummy_ variable for each T used to instantiate // the template. Therefore, the address of dummy_ is guaranteed to // be unique. return &(TypeIdHelper::dummy_); } // Returns the type ID of ::testing::Test. Always call this instead // of GetTypeId< ::testing::Test>() to get the type ID of // ::testing::Test, as the latter may give the wrong result due to a // suspected linker bug when compiling Google Test as a Mac OS X // framework. GTEST_API_ TypeId GetTestTypeId(); // Defines the abstract factory interface that creates instances // of a Test object. class TestFactoryBase { public: virtual ~TestFactoryBase() {} // Creates a test instance to run. The instance is both created and destroyed // within TestInfoImpl::Run() virtual Test* CreateTest() = 0; protected: TestFactoryBase() {} private: GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); }; // This class provides implementation of TeastFactoryBase interface. // It is used in TEST and TEST_F macros. template class TestFactoryImpl : public TestFactoryBase { public: virtual Test* CreateTest() { return new TestClass; } }; #if GTEST_OS_WINDOWS // Predicate-formatters for implementing the HRESULT checking macros // {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED} // We pass a long instead of HRESULT to avoid causing an // include dependency for the HRESULT type. GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr, long hr); // NOLINT GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, long hr); // NOLINT #endif // GTEST_OS_WINDOWS // Types of SetUpTestCase() and TearDownTestCase() functions. typedef void (*SetUpTestCaseFunc)(); typedef void (*TearDownTestCaseFunc)(); // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param text representation of the test's value parameter, // or NULL if this is not a type-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. GTEST_API_ TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory); // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // State of the definition of a type-parameterized test case. class GTEST_API_ TypedTestCasePState { public: TypedTestCasePState() : registered_(false) {} // Adds the given test name to defined_test_names_ and return true // if the test case hasn't been registered; otherwise aborts the // program. bool AddTestName(const char* file, int line, const char* case_name, const char* test_name) { if (registered_) { fprintf(stderr, "%s Test %s must be defined before " "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", FormatFileLocation(file, line).c_str(), test_name, case_name); fflush(stderr); posix::Abort(); } defined_test_names_.insert(test_name); return true; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests); private: bool registered_; ::std::set defined_test_names_; }; // Skips to the first non-space char after the first comma in 'str'; // returns NULL if no comma is found in 'str'. inline const char* SkipComma(const char* str) { const char* comma = strchr(str, ','); if (comma == NULL) { return NULL; } while (IsSpace(*(++comma))) {} return comma; } // Returns the prefix of 'str' before the first comma in it; returns // the entire string if it contains no comma. inline String GetPrefixUntilComma(const char* str) { const char* comma = strchr(str, ','); return comma == NULL ? String(str) : String(str, comma - str); } // TypeParameterizedTest::Register() // registers a list of type-parameterized tests with Google Test. The // return value is insignificant - we just need to return something // such that we can call this function in a namespace scope. // // Implementation note: The GTEST_TEMPLATE_ macro declares a template // template parameter. It's defined in gtest-type-util.h. template class TypeParameterizedTest { public: // 'index' is the index of the test in the type list 'Types' // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, // Types). Valid values for 'index' are [0, N - 1] where N is the // length of Types. static bool Register(const char* prefix, const char* case_name, const char* test_names, int index) { typedef typename Types::Head Type; typedef Fixture FixtureClass; typedef typename GTEST_BIND_(TestSel, Type) TestClass; // First, registers the first type-parameterized test in the type // list. MakeAndRegisterTestInfo( String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/", case_name, index).c_str(), GetPrefixUntilComma(test_names).c_str(), GetTypeName().c_str(), NULL, // No value parameter. GetTypeId(), TestClass::SetUpTestCase, TestClass::TearDownTestCase, new TestFactoryImpl); // Next, recurses (at compile time) with the tail of the type list. return TypeParameterizedTest ::Register(prefix, case_name, test_names, index + 1); } }; // The base case for the compile time recursion. template class TypeParameterizedTest { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/, int /*index*/) { return true; } }; // TypeParameterizedTestCase::Register() // registers *all combinations* of 'Tests' and 'Types' with Google // Test. The return value is insignificant - we just need to return // something such that we can call this function in a namespace scope. template class TypeParameterizedTestCase { public: static bool Register(const char* prefix, const char* case_name, const char* test_names) { typedef typename Tests::Head Head; // First, register the first test in 'Test' for each type in 'Types'. TypeParameterizedTest::Register( prefix, case_name, test_names, 0); // Next, recurses (at compile time) with the tail of the test list. return TypeParameterizedTestCase ::Register(prefix, case_name, SkipComma(test_names)); } }; // The base case for the compile time recursion. template class TypeParameterizedTestCase { public: static bool Register(const char* /*prefix*/, const char* /*case_name*/, const char* /*test_names*/) { return true; } }; #endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P // Returns the current OS stack trace as a String. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, int skip_count); // Helpers for suppressing warnings on unreachable code or constant // condition. // Always returns true. GTEST_API_ bool AlwaysTrue(); // Always returns false. inline bool AlwaysFalse() { return !AlwaysTrue(); } // Helper for suppressing false warning from Clang on a const char* // variable declared in a conditional expression always being NULL in // the else branch. struct GTEST_API_ ConstCharPtr { ConstCharPtr(const char* str) : value(str) {} operator bool() const { return true; } const char* value; }; // A simple Linear Congruential Generator for generating random // numbers with a uniform distribution. Unlike rand() and srand(), it // doesn't use global state (and therefore can't interfere with user // code). Unlike rand_r(), it's portable. An LCG isn't very random, // but it's good enough for our purposes. class GTEST_API_ Random { public: static const UInt32 kMaxRange = 1u << 31; explicit Random(UInt32 seed) : state_(seed) {} void Reseed(UInt32 seed) { state_ = seed; } // Generates a random number from [0, range). Crashes if 'range' is // 0 or greater than kMaxRange. UInt32 Generate(UInt32 range); private: UInt32 state_; GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); }; // Defining a variable of type CompileAssertTypesEqual will cause a // compiler error iff T1 and T2 are different types. template struct CompileAssertTypesEqual; template struct CompileAssertTypesEqual { }; // Removes the reference from a type if it is a reference type, // otherwise leaves it unchanged. This is the same as // tr1::remove_reference, which is not widely available yet. template struct RemoveReference { typedef T type; }; // NOLINT template struct RemoveReference { typedef T type; }; // NOLINT // A handy wrapper around RemoveReference that works when the argument // T depends on template parameters. #define GTEST_REMOVE_REFERENCE_(T) \ typename ::testing::internal::RemoveReference::type // Removes const from a type if it is a const type, otherwise leaves // it unchanged. This is the same as tr1::remove_const, which is not // widely available yet. template struct RemoveConst { typedef T type; }; // NOLINT template struct RemoveConst { typedef T type; }; // NOLINT // MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above // definition to fail to remove the const in 'const int[3]' and 'const // char[3][4]'. The following specialization works around the bug. // However, it causes trouble with GCC and thus needs to be // conditionally compiled. #if defined(_MSC_VER) || defined(__SUNPRO_CC) || defined(__IBMCPP__) template struct RemoveConst { typedef typename RemoveConst::type type[N]; }; #endif // A handy wrapper around RemoveConst that works when the argument // T depends on template parameters. #define GTEST_REMOVE_CONST_(T) \ typename ::testing::internal::RemoveConst::type // Turns const U&, U&, const U, and U all into U. #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) // Adds reference to a type if it is not a reference type, // otherwise leaves it unchanged. This is the same as // tr1::add_reference, which is not widely available yet. template struct AddReference { typedef T& type; }; // NOLINT template struct AddReference { typedef T& type; }; // NOLINT // A handy wrapper around AddReference that works when the argument T // depends on template parameters. #define GTEST_ADD_REFERENCE_(T) \ typename ::testing::internal::AddReference::type // Adds a reference to const on top of T as necessary. For example, // it transforms // // char ==> const char& // const char ==> const char& // char& ==> const char& // const char& ==> const char& // // The argument T must depend on some template parameters. #define GTEST_REFERENCE_TO_CONST_(T) \ GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T)) // ImplicitlyConvertible::value is a compile-time bool // constant that's true iff type From can be implicitly converted to // type To. template class ImplicitlyConvertible { private: // We need the following helper functions only for their types. // They have no implementations. // MakeFrom() is an expression whose type is From. We cannot simply // use From(), as the type From may not have a public default // constructor. static From MakeFrom(); // These two functions are overloaded. Given an expression // Helper(x), the compiler will pick the first version if x can be // implicitly converted to type To; otherwise it will pick the // second version. // // The first version returns a value of size 1, and the second // version returns a value of size 2. Therefore, by checking the // size of Helper(x), which can be done at compile time, we can tell // which version of Helper() is used, and hence whether x can be // implicitly converted to type To. static char Helper(To); static char (&Helper(...))[2]; // NOLINT // We have to put the 'public' section after the 'private' section, // or MSVC refuses to compile the code. public: // MSVC warns about implicitly converting from double to int for // possible loss of data, so we need to temporarily disable the // warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4244) // Temporarily disables warning 4244. static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; # pragma warning(pop) // Restores the warning state. #elif defined(__BORLANDC__) // C++Builder cannot use member overload resolution during template // instantiation. The simplest workaround is to use its C++0x type traits // functions (C++Builder 2009 and above only). static const bool value = __is_convertible(From, To); #else static const bool value = sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; #endif // _MSV_VER }; template const bool ImplicitlyConvertible::value; // IsAProtocolMessage::value is a compile-time bool constant that's // true iff T is type ProtocolMessage, proto2::Message, or a subclass // of those. template struct IsAProtocolMessage : public bool_constant< ImplicitlyConvertible::value || ImplicitlyConvertible::value> { }; // When the compiler sees expression IsContainerTest(0), if C is an // STL-style container class, the first overload of IsContainerTest // will be viable (since both C::iterator* and C::const_iterator* are // valid types and NULL can be implicitly converted to them). It will // be picked over the second overload as 'int' is a perfect match for // the type of argument 0. If C::iterator or C::const_iterator is not // a valid type, the first overload is not viable, and the second // overload will be picked. Therefore, we can determine whether C is // a container class by checking the type of IsContainerTest(0). // The value of the expression is insignificant. // // Note that we look for both C::iterator and C::const_iterator. The // reason is that C++ injects the name of a class as a member of the // class itself (e.g. you can refer to class iterator as either // 'iterator' or 'iterator::iterator'). If we look for C::iterator // only, for example, we would mistakenly think that a class named // iterator is an STL container. // // Also note that the simpler approach of overloading // IsContainerTest(typename C::const_iterator*) and // IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. typedef int IsContainer; template IsContainer IsContainerTest(int /* dummy */, typename C::iterator* /* it */ = NULL, typename C::const_iterator* /* const_it */ = NULL) { return 0; } typedef char IsNotContainer; template IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } // EnableIf::type is void when 'Cond' is true, and // undefined when 'Cond' is false. To use SFINAE to make a function // overload only apply when a particular expression is true, add // "typename EnableIf::type* = 0" as the last parameter. template struct EnableIf; template<> struct EnableIf { typedef void type; }; // NOLINT // Utilities for native arrays. // ArrayEq() compares two k-dimensional native arrays using the // elements' operator==, where k can be any integer >= 0. When k is // 0, ArrayEq() degenerates into comparing a single pair of values. template bool ArrayEq(const T* lhs, size_t size, const U* rhs); // This generic version is used when k is 0. template inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } // This overload is used when k >= 1. template inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { return internal::ArrayEq(lhs, N, rhs); } // This helper reduces code bloat. If we instead put its logic inside // the previous ArrayEq() function, arrays with different sizes would // lead to different copies of the template code. template bool ArrayEq(const T* lhs, size_t size, const U* rhs) { for (size_t i = 0; i != size; i++) { if (!internal::ArrayEq(lhs[i], rhs[i])) return false; } return true; } // Finds the first element in the iterator range [begin, end) that // equals elem. Element may be a native array type itself. template Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { for (Iter it = begin; it != end; ++it) { if (internal::ArrayEq(*it, elem)) return it; } return end; } // CopyArray() copies a k-dimensional native array using the elements' // operator=, where k can be any integer >= 0. When k is 0, // CopyArray() degenerates into copying a single value. template void CopyArray(const T* from, size_t size, U* to); // This generic version is used when k is 0. template inline void CopyArray(const T& from, U* to) { *to = from; } // This overload is used when k >= 1. template inline void CopyArray(const T(&from)[N], U(*to)[N]) { internal::CopyArray(from, N, *to); } // This helper reduces code bloat. If we instead put its logic inside // the previous CopyArray() function, arrays with different sizes // would lead to different copies of the template code. template void CopyArray(const T* from, size_t size, U* to) { for (size_t i = 0; i != size; i++) { internal::CopyArray(from[i], to + i); } } // The relation between an NativeArray object (see below) and the // native array it represents. enum RelationToSource { kReference, // The NativeArray references the native array. kCopy // The NativeArray makes a copy of the native array and // owns the copy. }; // Adapts a native array to a read-only STL-style container. Instead // of the complete STL container concept, this adaptor only implements // members useful for Google Mock's container matchers. New members // should be added as needed. To simplify the implementation, we only // support Element being a raw type (i.e. having no top-level const or // reference modifier). It's the client's responsibility to satisfy // this requirement. Element can be an array type itself (hence // multi-dimensional arrays are supported). template class NativeArray { public: // STL-style container typedefs. typedef Element value_type; typedef Element* iterator; typedef const Element* const_iterator; // Constructs from a native array. NativeArray(const Element* array, size_t count, RelationToSource relation) { Init(array, count, relation); } // Copy constructor. NativeArray(const NativeArray& rhs) { Init(rhs.array_, rhs.size_, rhs.relation_to_source_); } ~NativeArray() { // Ensures that the user doesn't instantiate NativeArray with a // const or reference type. static_cast(StaticAssertTypeEqHelper()); if (relation_to_source_ == kCopy) delete[] array_; } // STL-style container methods. size_t size() const { return size_; } const_iterator begin() const { return array_; } const_iterator end() const { return array_ + size_; } bool operator==(const NativeArray& rhs) const { return size() == rhs.size() && ArrayEq(begin(), size(), rhs.begin()); } private: // Initializes this object; makes a copy of the input array if // 'relation' is kCopy. void Init(const Element* array, size_t a_size, RelationToSource relation) { if (relation == kReference) { array_ = array; } else { Element* const copy = new Element[a_size]; CopyArray(array, a_size, copy); array_ = copy; } size_ = a_size; relation_to_source_ = relation; } const Element* array_; size_t size_; RelationToSource relation_to_source_; GTEST_DISALLOW_ASSIGN_(NativeArray); }; } // namespace internal } // namespace testing #define GTEST_MESSAGE_AT_(file, line, message, result_type) \ ::testing::internal::AssertHelper(result_type, file, line, message) \ = ::testing::Message() #define GTEST_MESSAGE_(message, result_type) \ GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) #define GTEST_FATAL_FAILURE_(message) \ return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) #define GTEST_NONFATAL_FAILURE_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure) #define GTEST_SUCCESS_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) // Suppresses MSVC warnings 4072 (unreachable code) for the code following // statement if it returns or throws (or doesn't return or throw in some // situations). #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ if (::testing::internal::AlwaysTrue()) { statement; } #define GTEST_TEST_THROW_(statement, expected_exception, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::ConstCharPtr gtest_msg = "") { \ bool gtest_caught_expected = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (expected_exception const&) { \ gtest_caught_expected = true; \ } \ catch (...) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws a different type."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ if (!gtest_caught_expected) { \ gtest_msg.value = \ "Expected: " #statement " throws an exception of type " \ #expected_exception ".\n Actual: it throws nothing."; \ goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ fail(gtest_msg.value) #define GTEST_TEST_NO_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ fail("Expected: " #statement " doesn't throw an exception.\n" \ " Actual: it throws.") #define GTEST_TEST_ANY_THROW_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ bool gtest_caught_any = false; \ try { \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ } \ catch (...) { \ gtest_caught_any = true; \ } \ if (!gtest_caught_any) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ fail("Expected: " #statement " throws an exception.\n" \ " Actual: it doesn't.") // Implements Boolean test assertions such as EXPECT_TRUE. expression can be // either a boolean expression or an AssertionResult. text is a textual // represenation of expression as it was passed into the EXPECT_TRUE. #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar_ = \ ::testing::AssertionResult(expression)) \ ; \ else \ fail(::testing::internal::GetBoolAssertionFailureMessage(\ gtest_ar_, text, #actual, #expected).c_str()) #define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (::testing::internal::AlwaysTrue()) { \ ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ } \ } else \ GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ fail("Expected: " #statement " doesn't generate new fatal " \ "failures in the current thread.\n" \ " Actual: it does.") // Expands to the name of the class that implements the given test. #define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ test_case_name##_##test_name##_Test // Helper macro for defining tests. #define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ public:\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ private:\ virtual void TestBody();\ static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ };\ \ ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ ::test_info_ =\ ::testing::internal::MakeAndRegisterTestInfo(\ #test_case_name, #test_name, NULL, NULL, \ (parent_id), \ parent_class::SetUpTestCase, \ parent_class::TearDownTestCase, \ new ::testing::internal::TestFactoryImpl<\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning enable 2304 #endif #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-typed-test.h0000644015303500042660000002400212151455365022222 00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ // This header implements typed tests and type-parameterized tests. // Typed (aka type-driven) tests repeat the same test for types in a // list. You must know which types you want to test with when writing // typed tests. Here's how you do it: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { public: ... typedef std::list List; static T shared_; T value_; }; // Next, associate a list of types with the test case, which will be // repeated for each type in the list. The typedef is necessary for // the macro to parse correctly. typedef testing::Types MyTypes; TYPED_TEST_CASE(FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // TYPED_TEST_CASE(FooTest, int); // Then, use TYPED_TEST() instead of TEST_F() to define as many typed // tests for this test case as you want. TYPED_TEST(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. // Since we are inside a derived class template, C++ requires use to // visit the members of FooTest via 'this'. TypeParam n = this->value_; // To visit static members of the fixture, add the TestFixture:: // prefix. n += TestFixture::shared_; // To refer to typedefs in the fixture, add the "typename // TestFixture::" prefix. typename TestFixture::List values; values.push_back(n); ... } TYPED_TEST(FooTest, HasPropertyA) { ... } #endif // 0 // Type-parameterized tests are abstract test patterns parameterized // by a type. Compared with typed tests, type-parameterized tests // allow you to define the test pattern without knowing what the type // parameters are. The defined pattern can be instantiated with // different types any number of times, in any number of translation // units. // // If you are designing an interface or concept, you can define a // suite of type-parameterized tests to verify properties that any // valid implementation of the interface/concept should have. Then, // each implementation can easily instantiate the test suite to verify // that it conforms to the requirements, without having to write // similar tests repeatedly. Here's an example: #if 0 // First, define a fixture class template. It should be parameterized // by a type. Remember to derive it from testing::Test. template class FooTest : public testing::Test { ... }; // Next, declare that you will define a type-parameterized test case // (the _P suffix is for "parameterized" or "pattern", whichever you // prefer): TYPED_TEST_CASE_P(FooTest); // Then, use TYPED_TEST_P() to define as many type-parameterized tests // for this type-parameterized test case as you want. TYPED_TEST_P(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. TypeParam n = 0; ... } TYPED_TEST_P(FooTest, HasPropertyA) { ... } // Now the tricky part: you need to register all test patterns before // you can instantiate them. The first argument of the macro is the // test case name; the rest are the names of the tests in this test // case. REGISTER_TYPED_TEST_CASE_P(FooTest, DoesBlah, HasPropertyA); // Finally, you are free to instantiate the pattern with the types you // want. If you put the above code in a header file, you can #include // it in multiple C++ source files and instantiate it multiple times. // // To distinguish different instances of the pattern, the first // argument to the INSTANTIATE_* macro is a prefix that will be added // to the actual test case name. Remember to pick unique prefixes for // different instances. typedef testing::Types MyTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: // INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); #endif // 0 #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-type-util.h" // Implements typed tests. #if GTEST_HAS_TYPED_TEST // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the typedef for the type parameters of the // given test case. # define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define TYPED_TEST_CASE(CaseName, Types) \ typedef ::testing::internal::TypeList< Types >::type \ GTEST_TYPE_PARAMS_(CaseName) # define TYPED_TEST(CaseName, TestName) \ template \ class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTest< \ CaseName, \ ::testing::internal::TemplateSel< \ GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ GTEST_TYPE_PARAMS_(CaseName)>::Register(\ "", #CaseName, #TestName, 0); \ template \ void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::TestBody() #endif // GTEST_HAS_TYPED_TEST // Implements type-parameterized tests. #if GTEST_HAS_TYPED_TEST_P // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the namespace name that the type-parameterized tests for // the given type-parameterized test case are defined in. The exact // name of the namespace is subject to change without notice. # define GTEST_CASE_NAMESPACE_(TestCaseName) \ gtest_case_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the variable used to remember the names of // the defined tests in the given test case. # define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ gtest_typed_test_case_p_state_##TestCaseName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. // // Expands to the name of the variable used to remember the names of // the registered tests in the given test case. # define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ gtest_registered_test_names_##TestCaseName##_ // The variables defined in the type-parameterized test macros are // static as typically these macros are used in a .h file that can be // #included in multiple translation units linked together. # define TYPED_TEST_CASE_P(CaseName) \ static ::testing::internal::TypedTestCasePState \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) # define TYPED_TEST_P(CaseName, TestName) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ template \ class TestName : public CaseName { \ private: \ typedef CaseName TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ virtual void TestBody(); \ }; \ static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ __FILE__, __LINE__, #CaseName, #TestName); \ } \ template \ void GTEST_CASE_NAMESPACE_(CaseName)::TestName::TestBody() # define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ namespace GTEST_CASE_NAMESPACE_(CaseName) { \ typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ } \ static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \ GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\ __FILE__, __LINE__, #__VA_ARGS__) // The 'Types' template argument below must have spaces around it // since some compilers may choke on '>>' when passing a template // instance (e.g. Types) # define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ ::testing::internal::TypeParameterizedTestCase::type>::Register(\ #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) #endif // GTEST_HAS_TYPED_TEST_P #endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest_pred_impl.h0000644015303500042660000003544412151455365022171 00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file is AUTOMATICALLY GENERATED on 09/24/2010 by command // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ // Makes sure this header is not included before gtest.h. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ # error Do not include gtest_pred_impl.h directly. Include gtest.h instead. #endif // GTEST_INCLUDE_GTEST_GTEST_H_ // This header implements a family of generic predicate assertion // macros: // // ASSERT_PRED_FORMAT1(pred_format, v1) // ASSERT_PRED_FORMAT2(pred_format, v1, v2) // ... // // where pred_format is a function or functor that takes n (in the // case of ASSERT_PRED_FORMATn) values and their source expression // text, and returns a testing::AssertionResult. See the definition // of ASSERT_EQ in gtest.h for an example. // // If you don't care about formatting, you can use the more // restrictive version: // // ASSERT_PRED1(pred, v1) // ASSERT_PRED2(pred, v1, v2) // ... // // where pred is an n-ary function or functor that returns bool, // and the values v1, v2, ..., must support the << operator for // streaming to std::ostream. // // We also define the EXPECT_* variations. // // For now we only support predicates whose arity is at most 5. // Please email googletestframework@googlegroups.com if you need // support for higher arities. // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. #define GTEST_ASSERT_(expression, on_failure) \ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar = (expression)) \ ; \ else \ on_failure(gtest_ar.failure_message()) // Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. template AssertionResult AssertPred1Helper(const char* pred_text, const char* e1, Pred pred, const T1& v1) { if (pred(v1)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. // Don't use this in your code. #define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ GTEST_ASSERT_(pred_format(#v1, v1),\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. #define GTEST_PRED1_(pred, v1, on_failure)\ GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ #v1, \ pred, \ v1), on_failure) // Unary predicate assertion macros. #define EXPECT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) #define ASSERT_PRED1(pred, v1) \ GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. template AssertionResult AssertPred2Helper(const char* pred_text, const char* e1, const char* e2, Pred pred, const T1& v1, const T2& v2) { if (pred(v1, v2)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. // Don't use this in your code. #define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. #define GTEST_PRED2_(pred, v1, v2, on_failure)\ GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ #v1, \ #v2, \ pred, \ v1, \ v2), on_failure) // Binary predicate assertion macros. #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) #define ASSERT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. template AssertionResult AssertPred3Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, Pred pred, const T1& v1, const T2& v2, const T3& v3) { if (pred(v1, v2, v3)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. // Don't use this in your code. #define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. #define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ #v1, \ #v2, \ #v3, \ pred, \ v1, \ v2, \ v3), on_failure) // Ternary predicate assertion macros. #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \ GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_) #define ASSERT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. template AssertionResult AssertPred4Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4) { if (pred(v1, v2, v3, v4)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. // Don't use this in your code. #define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. #define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ pred, \ v1, \ v2, \ v3, \ v4), on_failure) // 4-ary predicate assertion macros. #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. template AssertionResult AssertPred5Helper(const char* pred_text, const char* e1, const char* e2, const char* e3, const char* e4, const char* e5, Pred pred, const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5) { if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); return AssertionFailure() << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 << ", " << e5 << ") evaluates to false, where" << "\n" << e1 << " evaluates to " << v1 << "\n" << e2 << " evaluates to " << v2 << "\n" << e3 << " evaluates to " << v3 << "\n" << e4 << " evaluates to " << v4 << "\n" << e5 << " evaluates to " << v5; } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. // Don't use this in your code. #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ #v1, \ #v2, \ #v3, \ #v4, \ #v5, \ pred, \ v1, \ v2, \ v3, \ v4, \ v5), on_failure) // 5-ary predicate assertion macros. #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) #endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-message.h0000644015303500042660000002031312151455365021545 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the Message class. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #include #include "gtest/internal/gtest-string.h" #include "gtest/internal/gtest-internal.h" namespace testing { // The Message class works like an ostream repeater. // // Typical usage: // // 1. You stream a bunch of values to a Message object. // It will remember the text in a stringstream. // 2. Then you stream the Message object to an ostream. // This causes the text in the Message to be streamed // to the ostream. // // For example; // // testing::Message foo; // foo << 1 << " != " << 2; // std::cout << foo; // // will print "1 != 2". // // Message is not intended to be inherited from. In particular, its // destructor is not virtual. // // Note that stringstream behaves differently in gcc and in MSVC. You // can stream a NULL char pointer to it in the former, but not in the // latter (it causes an access violation if you do). The Message // class hides this difference by treating a NULL char pointer as // "(null)". class GTEST_API_ Message { private: // The type of basic IO manipulators (endl, ends, and flush) for // narrow streams. typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); public: // Constructs an empty Message. // We allocate the stringstream separately because otherwise each use of // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's // stack frame leading to huge stack frames in some cases; gcc does not reuse // the stack space. Message() : ss_(new ::std::stringstream) { // By default, we want there to be enough precision when printing // a double to a Message. *ss_ << std::setprecision(std::numeric_limits::digits10 + 2); } // Copy constructor. Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT *ss_ << msg.GetString(); } // Constructs a Message from a C-string. explicit Message(const char* str) : ss_(new ::std::stringstream) { *ss_ << str; } #if GTEST_OS_SYMBIAN // Streams a value (either a pointer or not) to this object. template inline Message& operator <<(const T& value) { StreamHelper(typename internal::is_pointer::type(), value); return *this; } #else // Streams a non-pointer value to this object. template inline Message& operator <<(const T& val) { ::GTestStreamToHelper(ss_.get(), val); return *this; } // Streams a pointer value to this object. // // This function is an overload of the previous one. When you // stream a pointer to a Message, this definition will be used as it // is more specialized. (The C++ Standard, section // [temp.func.order].) If you stream a non-pointer, then the // previous definition will be used. // // The reason for this overload is that streaming a NULL pointer to // ostream is undefined behavior. Depending on the compiler, you // may get "0", "(nil)", "(null)", or an access violation. To // ensure consistent result across compilers, we always treat NULL // as "(null)". template inline Message& operator <<(T* const& pointer) { // NOLINT if (pointer == NULL) { *ss_ << "(null)"; } else { ::GTestStreamToHelper(ss_.get(), pointer); } return *this; } #endif // GTEST_OS_SYMBIAN // Since the basic IO manipulators are overloaded for both narrow // and wide streams, we have to provide this specialized definition // of operator <<, even though its body is the same as the // templatized version above. Without this definition, streaming // endl or other basic IO manipulators to Message will confuse the // compiler. Message& operator <<(BasicNarrowIoManip val) { *ss_ << val; return *this; } // Instead of 1/0, we want to see true/false for bool values. Message& operator <<(bool b) { return *this << (b ? "true" : "false"); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. Message& operator <<(const wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } Message& operator <<(wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::std::wstring& wstr); #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& operator <<(const ::wstring& wstr); #endif // GTEST_HAS_GLOBAL_WSTRING // Gets the text streamed to this object so far as a String. // Each '\0' character in the buffer is replaced with "\\0". // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. internal::String GetString() const { return internal::StringStreamToString(ss_.get()); } private: #if GTEST_OS_SYMBIAN // These are needed as the Nokia Symbian Compiler cannot decide between // const T& and const T* in a function template. The Nokia compiler _can_ // decide between class template specializations for T and T*, so a // tr1::type_traits-like is_pointer works, and we can overload on that. template inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) { if (pointer == NULL) { *ss_ << "(null)"; } else { ::GTestStreamToHelper(ss_.get(), pointer); } } template inline void StreamHelper(internal::false_type /*dummy*/, const T& value) { ::GTestStreamToHelper(ss_.get(), value); } #endif // GTEST_OS_SYMBIAN // We'll hold the text streamed to this object here. const internal::scoped_ptr< ::std::stringstream> ss_; // We declare (but don't implement) this to prevent the compiler // from implementing the assignment operator. void operator=(const Message&); }; // Streams a Message to an ostream. inline std::ostream& operator <<(std::ostream& os, const Message& sb) { return os << sb.GetString(); } } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-death-test.h0000644015303500042660000002554512151455365022177 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for death tests. It is // #included by gtest.h so a user doesn't need to include this // directly. #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #include "gtest/internal/gtest-death-test-internal.h" namespace testing { // This flag controls the style of death tests. Valid values are "threadsafe", // meaning that the death test child process will re-execute the test binary // from the start, running only a single death test, or "fast", // meaning that the child process will execute the test logic immediately // after forking. GTEST_DECLARE_string_(death_test_style); #if GTEST_HAS_DEATH_TEST // The following macros are useful for writing death tests. // Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is // executed: // // 1. It generates a warning if there is more than one active // thread. This is because it's safe to fork() or clone() only // when there is a single thread. // // 2. The parent process clone()s a sub-process and runs the death // test in it; the sub-process exits with code 0 at the end of the // death test, if it hasn't exited already. // // 3. The parent process waits for the sub-process to terminate. // // 4. The parent process checks the exit code and error message of // the sub-process. // // Examples: // // ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number"); // for (int i = 0; i < 5; i++) { // EXPECT_DEATH(server.ProcessRequest(i), // "Invalid request .* in ProcessRequest()") // << "Failed to die on request " << i); // } // // ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting"); // // bool KilledBySIGHUP(int exit_code) { // return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP; // } // // ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); // // On the regular expressions used in death tests: // // On POSIX-compliant systems (*nix), we use the library, // which uses the POSIX extended regex syntax. // // On other platforms (e.g. Windows), we only support a simple regex // syntax implemented as part of Google Test. This limited // implementation should be enough most of the time when writing // death tests; though it lacks many features you can find in PCRE // or POSIX extended regex syntax. For example, we don't support // union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and // repetition count ("x{5,7}"), among others. // // Below is the syntax that we do support. We chose it to be a // subset of both PCRE and POSIX extended regex, so it's easy to // learn wherever you come from. In the following: 'A' denotes a // literal character, period (.), or a single \\ escape sequence; // 'x' and 'y' denote regular expressions; 'm' and 'n' are for // natural numbers. // // c matches any literal character c // \\d matches any decimal digit // \\D matches any character that's not a decimal digit // \\f matches \f // \\n matches \n // \\r matches \r // \\s matches any ASCII whitespace, including \n // \\S matches any character that's not a whitespace // \\t matches \t // \\v matches \v // \\w matches any letter, _, or decimal digit // \\W matches any character that \\w doesn't match // \\c matches any literal character c, which must be a punctuation // . matches any single character except \n // A? matches 0 or 1 occurrences of A // A* matches 0 or many occurrences of A // A+ matches 1 or many occurrences of A // ^ matches the beginning of a string (not that of each line) // $ matches the end of a string (not that of each line) // xy matches x followed by y // // If you accidentally use PCRE or POSIX extended regex features // not implemented by us, you will get a run-time failure. In that // case, please try to rewrite your regular expression within the // above syntax. // // This implementation is *not* meant to be as highly tuned or robust // as a compiled regex library, but should perform well enough for a // death test, which already incurs significant overhead by launching // a child process. // // Known caveats: // // A "threadsafe" style death test obtains the path to the test // program from argv[0] and re-executes it in the sub-process. For // simplicity, the current implementation doesn't search the PATH // when launching the sub-process. This means that the user must // invoke the test program via a path that contains at least one // path separator (e.g. path/to/foo_test and // /absolute/path/to/bar_test are fine, but foo_test is not). This // is rarely a problem as people usually don't put the test binary // directory in PATH. // // TODO(wan@google.com): make thread-safe death tests search the PATH. // Asserts that a given statement causes the program to exit, with an // integer exit status that satisfies predicate, and emitting error output // that matches regex. # define ASSERT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) // Like ASSERT_EXIT, but continues on to successive tests in the // test case, if any: # define EXPECT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) // Asserts that a given statement causes the program to exit, either by // explicitly exiting with a nonzero exit code or being killed by a // signal, and emitting error output that matches regex. # define ASSERT_DEATH(statement, regex) \ ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Like ASSERT_DEATH, but continues on to successive tests in the // test case, if any: # define EXPECT_DEATH(statement, regex) \ EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: // Tests that an exit code describes a normal exit with a given exit code. class GTEST_API_ ExitedWithCode { public: explicit ExitedWithCode(int exit_code); bool operator()(int exit_status) const; private: // No implementation - assignment is unsupported. void operator=(const ExitedWithCode& other); const int exit_code_; }; # if !GTEST_OS_WINDOWS // Tests that an exit code describes an exit due to termination by a // given signal. class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); bool operator()(int exit_status) const; private: const int signum_; }; # endif // !GTEST_OS_WINDOWS // EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. // The death testing framework causes this to have interesting semantics, // since the sideeffects of the call are only visible in opt mode, and not // in debug mode. // // In practice, this can be used to test functions that utilize the // LOG(DFATAL) macro using the following style: // // int DieInDebugOr12(int* sideeffect) { // if (sideeffect) { // *sideeffect = 12; // } // LOG(DFATAL) << "death"; // return 12; // } // // TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { // int sideeffect = 0; // // Only asserts in dbg. // EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); // // #ifdef NDEBUG // // opt-mode has sideeffect visible. // EXPECT_EQ(12, sideeffect); // #else // // dbg-mode no visible sideeffect. // EXPECT_EQ(0, sideeffect); // #endif // } // // This will assert that DieInDebugReturn12InOpt() crashes in debug // mode, usually due to a DCHECK or LOG(DFATAL), but returns the // appropriate fallback value (12 in this case) in opt mode. If you // need to test that a function has appropriate side-effects in opt // mode, include assertions against the side-effects. A general // pattern for this is: // // EXPECT_DEBUG_DEATH({ // // Side-effects here will have an effect after this statement in // // opt mode, but none in debug mode. // EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); // }, "death"); // # ifdef NDEBUG # define EXPECT_DEBUG_DEATH(statement, regex) \ do { statement; } while (::testing::internal::AlwaysFalse()) # define ASSERT_DEBUG_DEATH(statement, regex) \ do { statement; } while (::testing::internal::AlwaysFalse()) # else # define EXPECT_DEBUG_DEATH(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEBUG_DEATH(statement, regex) \ ASSERT_DEATH(statement, regex) # endif // NDEBUG for EXPECT_DEBUG_DEATH #endif // GTEST_HAS_DEATH_TEST // EXPECT_DEATH_IF_SUPPORTED(statement, regex) and // ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if // death tests are supported; otherwise they just issue a warning. This is // useful when you are combining death test assertions with normal test // assertions in one test. #if GTEST_HAS_DEATH_TEST # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ EXPECT_DEATH(statement, regex) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ ASSERT_DEATH(statement, regex) #else # define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, ) # define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return) #endif } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-param-test.h0000644015303500042660000022413112151455365022202 00000000000000// This file was GENERATED by command: // pump.py gtest-param-test.h.pump // DO NOT EDIT BY HAND!!! // Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: vladl@google.com (Vlad Losev) // // Macros and functions for implementing parameterized tests // in Google C++ Testing Framework (Google Test) // // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Value-parameterized tests allow you to test your code with different // parameters without writing multiple copies of the same test. // // Here is how you use value-parameterized tests: #if 0 // To write value-parameterized tests, first you should define a fixture // class. It is usually derived from testing::TestWithParam (see below for // another inheritance scheme that's sometimes useful in more complicated // class hierarchies), where the type of your parameter values. // TestWithParam is itself derived from testing::Test. T can be any // copyable type. If it's a raw pointer, you are responsible for managing the // lifespan of the pointed values. class FooTest : public ::testing::TestWithParam { // You can implement all the usual class fixture members here. }; // Then, use the TEST_P macro to define as many parameterized tests // for this fixture as you want. The _P suffix is for "parameterized" // or "pattern", whichever you prefer to think. TEST_P(FooTest, DoesBlah) { // Inside a test, access the test parameter with the GetParam() method // of the TestWithParam class: EXPECT_TRUE(foo.Blah(GetParam())); ... } TEST_P(FooTest, HasBlahBlah) { ... } // Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test // case with any set of parameters you want. Google Test defines a number // of functions for generating test parameters. They return what we call // (surprise!) parameter generators. Here is a summary of them, which // are all in the testing namespace: // // // Range(begin, end [, step]) - Yields values {begin, begin+step, // begin+step+step, ...}. The values do not // include end. step defaults to 1. // Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. // ValuesIn(container) - Yields values from a C-style array, an STL // ValuesIn(begin,end) container, or an iterator range [begin, end). // Bool() - Yields sequence {false, true}. // Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product // for the math savvy) of the values generated // by the N generators. // // For more details, see comments at the definitions of these functions below // in this file. // // The following statement will instantiate tests from the FooTest test case // each with parameter values "meeny", "miny", and "moe". INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, Values("meeny", "miny", "moe")); // To distinguish different instances of the pattern, (yes, you // can instantiate it more then once) the first argument to the // INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the // actual test case name. Remember to pick unique prefixes for different // instantiations. The tests from the instantiation above will have // these names: // // * InstantiationName/FooTest.DoesBlah/0 for "meeny" // * InstantiationName/FooTest.DoesBlah/1 for "miny" // * InstantiationName/FooTest.DoesBlah/2 for "moe" // * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" // * InstantiationName/FooTest.HasBlahBlah/1 for "miny" // * InstantiationName/FooTest.HasBlahBlah/2 for "moe" // // You can use these names in --gtest_filter. // // This statement will instantiate all tests from FooTest again, each // with parameter values "cat" and "dog": const char* pets[] = {"cat", "dog"}; INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // The tests from the instantiation above will have these names: // // * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" // * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" // * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" // * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" // // Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests // in the given test case, whether their definitions come before or // AFTER the INSTANTIATE_TEST_CASE_P statement. // // Please also note that generator expressions (including parameters to the // generators) are evaluated in InitGoogleTest(), after main() has started. // This allows the user on one hand, to adjust generator parameters in order // to dynamically determine a set of tests to run and on the other hand, // give the user a chance to inspect the generated tests with Google Test // reflection API before RUN_ALL_TESTS() is executed. // // You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc // for more examples. // // In the future, we plan to publish the API for defining new parameter // generators. But for now this interface remains part of the internal // implementation and is subject to change. // // // A parameterized test fixture must be derived from testing::Test and from // testing::WithParamInterface, where T is the type of the parameter // values. Inheriting from TestWithParam satisfies that requirement because // TestWithParam inherits from both Test and WithParamInterface. In more // complicated hierarchies, however, it is occasionally useful to inherit // separately from Test and WithParamInterface. For example: class BaseTest : public ::testing::Test { // You can inherit all the usual members for a non-parameterized test // fixture here. }; class DerivedTest : public BaseTest, public ::testing::WithParamInterface { // The usual test fixture members go here too. }; TEST_F(BaseTest, HasFoo) { // This is an ordinary non-parameterized test. } TEST_P(DerivedTest, DoesBlah) { // GetParam works just the same here as if you inherit from TestWithParam. EXPECT_TRUE(foo.Blah(GetParam())); } #endif // 0 #include "gtest/internal/gtest-port.h" #if !GTEST_OS_SYMBIAN # include #endif // scripts/fuse_gtest.py depends on gtest's own header being #included // *unconditionally*. Therefore these #includes cannot be moved // inside #if GTEST_HAS_PARAM_TEST. #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-param-util.h" #include "gtest/internal/gtest-param-util-generated.h" #if GTEST_HAS_PARAM_TEST namespace testing { // Functions producing parameter generators. // // Google Test uses these generators to produce parameters for value- // parameterized tests. When a parameterized test case is instantiated // with a particular generator, Google Test creates and runs tests // for each element in the sequence produced by the generator. // // In the following sample, tests from test case FooTest are instantiated // each three times with parameter values 3, 5, and 8: // // class FooTest : public TestWithParam { ... }; // // TEST_P(FooTest, TestThis) { // } // TEST_P(FooTest, TestThat) { // } // INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); // // Range() returns generators providing sequences of values in a range. // // Synopsis: // Range(start, end) // - returns a generator producing a sequence of values {start, start+1, // start+2, ..., }. // Range(start, end, step) // - returns a generator producing a sequence of values {start, start+step, // start+step+step, ..., }. // Notes: // * The generated sequences never include end. For example, Range(1, 5) // returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) // returns a generator producing {1, 3, 5, 7}. // * start and end must have the same type. That type may be any integral or // floating-point type or a user defined type satisfying these conditions: // * It must be assignable (have operator=() defined). // * It must have operator+() (operator+(int-compatible type) for // two-operand version). // * It must have operator<() defined. // Elements in the resulting sequences will also have that type. // * Condition start < end must be satisfied in order for resulting sequences // to contain any elements. // template internal::ParamGenerator Range(T start, T end, IncrementT step) { return internal::ParamGenerator( new internal::RangeGenerator(start, end, step)); } template internal::ParamGenerator Range(T start, T end) { return Range(start, end, 1); } // ValuesIn() function allows generation of tests with parameters coming from // a container. // // Synopsis: // ValuesIn(const T (&array)[N]) // - returns a generator producing sequences with elements from // a C-style array. // ValuesIn(const Container& container) // - returns a generator producing sequences with elements from // an STL-style container. // ValuesIn(Iterator begin, Iterator end) // - returns a generator producing sequences with elements from // a range [begin, end) defined by a pair of STL-style iterators. These // iterators can also be plain C pointers. // // Please note that ValuesIn copies the values from the containers // passed in and keeps them to generate tests in RUN_ALL_TESTS(). // // Examples: // // This instantiates tests from test case StringTest // each with C-string values of "foo", "bar", and "baz": // // const char* strings[] = {"foo", "bar", "baz"}; // INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); // // This instantiates tests from test case StlStringTest // each with STL strings with values "a" and "b": // // ::std::vector< ::std::string> GetParameterStrings() { // ::std::vector< ::std::string> v; // v.push_back("a"); // v.push_back("b"); // return v; // } // // INSTANTIATE_TEST_CASE_P(CharSequence, // StlStringTest, // ValuesIn(GetParameterStrings())); // // // This will also instantiate tests from CharTest // each with parameter values 'a' and 'b': // // ::std::list GetParameterChars() { // ::std::list list; // list.push_back('a'); // list.push_back('b'); // return list; // } // ::std::list l = GetParameterChars(); // INSTANTIATE_TEST_CASE_P(CharSequence2, // CharTest, // ValuesIn(l.begin(), l.end())); // template internal::ParamGenerator< typename ::testing::internal::IteratorTraits::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end) { typedef typename ::testing::internal::IteratorTraits ::value_type ParamType; return internal::ParamGenerator( new internal::ValuesInIteratorRangeGenerator(begin, end)); } template internal::ParamGenerator ValuesIn(const T (&array)[N]) { return ValuesIn(array, array + N); } template internal::ParamGenerator ValuesIn( const Container& container) { return ValuesIn(container.begin(), container.end()); } // Values() allows generating tests from explicitly specified list of // parameters. // // Synopsis: // Values(T v1, T v2, ..., T vN) // - returns a generator producing sequences with elements v1, v2, ..., vN. // // For example, this instantiates tests from test case BarTest each // with values "one", "two", and "three": // // INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); // // This instantiates tests from test case BazTest each with values 1, 2, 3.5. // The exact type of values will depend on the type of parameter in BazTest. // // INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); // // Currently, Values() supports from 1 to 50 parameters. // template internal::ValueArray1 Values(T1 v1) { return internal::ValueArray1(v1); } template internal::ValueArray2 Values(T1 v1, T2 v2) { return internal::ValueArray2(v1, v2); } template internal::ValueArray3 Values(T1 v1, T2 v2, T3 v3) { return internal::ValueArray3(v1, v2, v3); } template internal::ValueArray4 Values(T1 v1, T2 v2, T3 v3, T4 v4) { return internal::ValueArray4(v1, v2, v3, v4); } template internal::ValueArray5 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) { return internal::ValueArray5(v1, v2, v3, v4, v5); } template internal::ValueArray6 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) { return internal::ValueArray6(v1, v2, v3, v4, v5, v6); } template internal::ValueArray7 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) { return internal::ValueArray7(v1, v2, v3, v4, v5, v6, v7); } template internal::ValueArray8 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { return internal::ValueArray8(v1, v2, v3, v4, v5, v6, v7, v8); } template internal::ValueArray9 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { return internal::ValueArray9(v1, v2, v3, v4, v5, v6, v7, v8, v9); } template internal::ValueArray10 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { return internal::ValueArray10(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); } template internal::ValueArray11 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11) { return internal::ValueArray11(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); } template internal::ValueArray12 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12) { return internal::ValueArray12(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); } template internal::ValueArray13 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13) { return internal::ValueArray13(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); } template internal::ValueArray14 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { return internal::ValueArray14(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14); } template internal::ValueArray15 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { return internal::ValueArray15(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); } template internal::ValueArray16 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) { return internal::ValueArray16(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16); } template internal::ValueArray17 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17) { return internal::ValueArray17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17); } template internal::ValueArray18 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18) { return internal::ValueArray18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18); } template internal::ValueArray19 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { return internal::ValueArray19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); } template internal::ValueArray20 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { return internal::ValueArray20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); } template internal::ValueArray21 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { return internal::ValueArray21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); } template internal::ValueArray22 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) { return internal::ValueArray22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22); } template internal::ValueArray23 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) { return internal::ValueArray23(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23); } template internal::ValueArray24 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) { return internal::ValueArray24(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24); } template internal::ValueArray25 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { return internal::ValueArray25(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25); } template internal::ValueArray26 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26) { return internal::ValueArray26(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); } template internal::ValueArray27 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27) { return internal::ValueArray27(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); } template internal::ValueArray28 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28) { return internal::ValueArray28(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28); } template internal::ValueArray29 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29) { return internal::ValueArray29(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29); } template internal::ValueArray30 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { return internal::ValueArray30(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30); } template internal::ValueArray31 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { return internal::ValueArray31(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31); } template internal::ValueArray32 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) { return internal::ValueArray32(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32); } template internal::ValueArray33 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33) { return internal::ValueArray33(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); } template internal::ValueArray34 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34) { return internal::ValueArray34(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); } template internal::ValueArray35 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { return internal::ValueArray35(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); } template internal::ValueArray36 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { return internal::ValueArray36(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36); } template internal::ValueArray37 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37) { return internal::ValueArray37(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37); } template internal::ValueArray38 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) { return internal::ValueArray38(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38); } template internal::ValueArray39 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) { return internal::ValueArray39(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39); } template internal::ValueArray40 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { return internal::ValueArray40(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); } template internal::ValueArray41 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { return internal::ValueArray41(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); } template internal::ValueArray42 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42) { return internal::ValueArray42(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42); } template internal::ValueArray43 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43) { return internal::ValueArray43(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43); } template internal::ValueArray44 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44) { return internal::ValueArray44(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44); } template internal::ValueArray45 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { return internal::ValueArray45(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45); } template internal::ValueArray46 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { return internal::ValueArray46(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46); } template internal::ValueArray47 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { return internal::ValueArray47(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); } template internal::ValueArray48 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) { return internal::ValueArray48(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); } template internal::ValueArray49 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49) { return internal::ValueArray49(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); } template internal::ValueArray50 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { return internal::ValueArray50(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50); } // Bool() allows generating tests with parameters in a set of (false, true). // // Synopsis: // Bool() // - returns a generator producing sequences with elements {false, true}. // // It is useful when testing code that depends on Boolean flags. Combinations // of multiple flags can be tested when several Bool()'s are combined using // Combine() function. // // In the following example all tests in the test case FlagDependentTest // will be instantiated twice with parameters false and true. // // class FlagDependentTest : public testing::TestWithParam { // virtual void SetUp() { // external_flag = GetParam(); // } // } // INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); // inline internal::ParamGenerator Bool() { return Values(false, true); } # if GTEST_HAS_COMBINE // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. // // Synopsis: // Combine(gen1, gen2, ..., genN) // - returns a generator producing sequences with elements coming from // the Cartesian product of elements from the sequences generated by // gen1, gen2, ..., genN. The sequence elements will have a type of // tuple where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // // Combine can have up to 10 arguments. This number is currently limited // by the maximum number of elements in the tuple implementation used by Google // Test. // // Example: // // This will instantiate tests in test case AnimalTest each one with // the parameter values tuple("cat", BLACK), tuple("cat", WHITE), // tuple("dog", BLACK), and tuple("dog", WHITE): // // enum Color { BLACK, GRAY, WHITE }; // class AnimalTest // : public testing::TestWithParam > {...}; // // TEST_P(AnimalTest, AnimalLooksNice) {...} // // INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, // Combine(Values("cat", "dog"), // Values(BLACK, WHITE))); // // This will instantiate tests in FlagDependentTest with all variations of two // Boolean flags: // // class FlagDependentTest // : public testing::TestWithParam > { // virtual void SetUp() { // // Assigns external_flag_1 and external_flag_2 values from the tuple. // tie(external_flag_1, external_flag_2) = GetParam(); // } // }; // // TEST_P(FlagDependentTest, TestFeature1) { // // Test your code using external_flag_1 and external_flag_2 here. // } // INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, // Combine(Bool(), Bool())); // template internal::CartesianProductHolder2 Combine( const Generator1& g1, const Generator2& g2) { return internal::CartesianProductHolder2( g1, g2); } template internal::CartesianProductHolder3 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3) { return internal::CartesianProductHolder3( g1, g2, g3); } template internal::CartesianProductHolder4 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4) { return internal::CartesianProductHolder4( g1, g2, g3, g4); } template internal::CartesianProductHolder5 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5) { return internal::CartesianProductHolder5( g1, g2, g3, g4, g5); } template internal::CartesianProductHolder6 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6) { return internal::CartesianProductHolder6( g1, g2, g3, g4, g5, g6); } template internal::CartesianProductHolder7 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7) { return internal::CartesianProductHolder7( g1, g2, g3, g4, g5, g6, g7); } template internal::CartesianProductHolder8 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8) { return internal::CartesianProductHolder8( g1, g2, g3, g4, g5, g6, g7, g8); } template internal::CartesianProductHolder9 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9) { return internal::CartesianProductHolder9( g1, g2, g3, g4, g5, g6, g7, g8, g9); } template internal::CartesianProductHolder10 Combine( const Generator1& g1, const Generator2& g2, const Generator3& g3, const Generator4& g4, const Generator5& g5, const Generator6& g6, const Generator7& g7, const Generator8& g8, const Generator9& g9, const Generator10& g10) { return internal::CartesianProductHolder10( g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); } # endif // GTEST_HAS_COMBINE # define TEST_P(test_case_name, test_name) \ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ : public test_case_name { \ public: \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ virtual void TestBody(); \ private: \ static int AddToRegistry() { \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ #test_case_name, \ #test_name, \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ return 0; \ } \ static int gtest_registering_dummy_; \ GTEST_DISALLOW_COPY_AND_ASSIGN_(\ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ }; \ int GTEST_TEST_CLASS_NAME_(test_case_name, \ test_name)::gtest_registering_dummy_ = \ GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ ::testing::internal::ParamGenerator \ gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ int gtest_##prefix##test_case_name##_dummy_ = \ ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ GetTestCasePatternHolder(\ #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ #prefix, \ >est_##prefix##test_case_name##_EvalGenerator_, \ __FILE__, __LINE__) } // namespace testing #endif // GTEST_HAS_PARAM_TEST #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-spi.h0000644015303500042660000002333712151455365020725 00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // Utilities for testing Google Test itself and code that uses Google Test // (e.g. frameworks built on top of Google Test). #ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #include "gtest/gtest.h" namespace testing { // This helper class can be used to mock out Google Test failure reporting // so that we can test Google Test or code that builds on Google Test. // // An object of this class appends a TestPartResult object to the // TestPartResultArray object given in the constructor whenever a Google Test // failure is reported. It can either intercept only failures that are // generated in the same thread that created this object or it can intercept // all generated failures. The scope of this mock object can be controlled with // the second argument to the two arguments constructor. class GTEST_API_ ScopedFakeTestPartResultReporter : public TestPartResultReporterInterface { public: // The two possible mocking modes of this object. enum InterceptMode { INTERCEPT_ONLY_CURRENT_THREAD, // Intercepts only thread local failures. INTERCEPT_ALL_THREADS // Intercepts all failures. }; // The c'tor sets this object as the test part result reporter used // by Google Test. The 'result' parameter specifies where to report the // results. This reporter will only catch failures generated in the current // thread. DEPRECATED explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result); // Same as above, but you can choose the interception scope of this object. ScopedFakeTestPartResultReporter(InterceptMode intercept_mode, TestPartResultArray* result); // The d'tor restores the previous test part result reporter. virtual ~ScopedFakeTestPartResultReporter(); // Appends the TestPartResult object to the TestPartResultArray // received in the constructor. // // This method is from the TestPartResultReporterInterface // interface. virtual void ReportTestPartResult(const TestPartResult& result); private: void Init(); const InterceptMode intercept_mode_; TestPartResultReporterInterface* old_reporter_; TestPartResultArray* const result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); }; namespace internal { // A helper class for implementing EXPECT_FATAL_FAILURE() and // EXPECT_NONFATAL_FAILURE(). Its destructor verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. class GTEST_API_ SingleFailureChecker { public: // The constructor remembers the arguments. SingleFailureChecker(const TestPartResultArray* results, TestPartResult::Type type, const string& substr); ~SingleFailureChecker(); private: const TestPartResultArray* const results_; const TestPartResult::Type type_; const string substr_; GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); }; } // namespace internal } // namespace testing // A set of macros for testing Google Test assertions or code that's expected // to generate Google Test fatal failures. It verifies that the given // statement will cause exactly one fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_FATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - 'statement' cannot reference local non-static variables or // non-static members of the current object. // - 'statement' cannot return a value. // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. The AcceptsMacroThatExpandsToUnprotectedComma test in // gtest_unittest.cc will fail to compile if we do that. #define EXPECT_FATAL_FAILURE(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do { \ class GTestExpectFatalFailureHelper {\ public:\ static void Execute() { statement; }\ };\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ALL_THREADS, >est_failures);\ GTestExpectFatalFailureHelper::Execute();\ }\ } while (::testing::internal::AlwaysFalse()) // A macro for testing Google Test assertions or code that's expected to // generate Google Test non-fatal failures. It asserts that the given // statement will cause exactly one non-fatal Google Test failure with 'substr' // being part of the failure message. // // There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only // affects and considers failures generated in the current thread and // EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads. // // 'statement' is allowed to reference local variables and members of // the current object. // // The verification of the assertion is done correctly even when the statement // throws an exception or aborts the current function. // // Known restrictions: // - You cannot stream a failure message to this macro. // // Note that even though the implementations of the following two // macros are much alike, we cannot refactor them to use a common // helper macro, due to some peculiarity in how the preprocessor // works. If we do that, the code won't compile when the user gives // EXPECT_NONFATAL_FAILURE() a statement that contains a macro that // expands to code containing an unprotected comma. The // AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc // catches that. // // For the same reason, we have to write // if (::testing::internal::AlwaysTrue()) { statement; } // instead of // GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) // to avoid an MSVC warning on unreachable code. #define EXPECT_NONFATAL_FAILURE(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter:: \ INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ do {\ ::testing::TestPartResultArray gtest_failures;\ ::testing::internal::SingleFailureChecker gtest_checker(\ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ (substr));\ {\ ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\ >est_failures);\ if (::testing::internal::AlwaysTrue()) { statement; }\ }\ } while (::testing::internal::AlwaysFalse()) #endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-test-part.h0000644015303500042660000001450512151455365022052 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: mheule@google.com (Markus Heule) // #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #include #include #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" namespace testing { // A copyable object representing the result of a test part (i.e. an // assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()). // // Don't inherit from TestPartResult as its destructor is not virtual. class GTEST_API_ TestPartResult { public: // The possible outcomes of a test part (i.e. an assertion or an // explicit SUCCEED(), FAIL(), or ADD_FAILURE()). enum Type { kSuccess, // Succeeded. kNonFatalFailure, // Failed but the test can continue. kFatalFailure // Failed and the test should be terminated. }; // C'tor. TestPartResult does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestPartResult object. TestPartResult(Type a_type, const char* a_file_name, int a_line_number, const char* a_message) : type_(a_type), file_name_(a_file_name), line_number_(a_line_number), summary_(ExtractSummary(a_message)), message_(a_message) { } // Gets the outcome of the test part. Type type() const { return type_; } // Gets the name of the source file where the test part took place, or // NULL if it's unknown. const char* file_name() const { return file_name_.c_str(); } // Gets the line in the source file where the test part took place, // or -1 if it's unknown. int line_number() const { return line_number_; } // Gets the summary of the failure message. const char* summary() const { return summary_.c_str(); } // Gets the message associated with the test part. const char* message() const { return message_.c_str(); } // Returns true iff the test part passed. bool passed() const { return type_ == kSuccess; } // Returns true iff the test part failed. bool failed() const { return type_ != kSuccess; } // Returns true iff the test part non-fatally failed. bool nonfatally_failed() const { return type_ == kNonFatalFailure; } // Returns true iff the test part fatally failed. bool fatally_failed() const { return type_ == kFatalFailure; } private: Type type_; // Gets the summary of the failure message by omitting the stack // trace in it. static internal::String ExtractSummary(const char* message); // The name of the source file where the test part took place, or // NULL if the source file is unknown. internal::String file_name_; // The line in the source file where the test part took place, or -1 // if the line number is unknown. int line_number_; internal::String summary_; // The test failure summary. internal::String message_; // The test failure message. }; // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result); // An array of TestPartResult objects. // // Don't inherit from TestPartResultArray as its destructor is not // virtual. class GTEST_API_ TestPartResultArray { public: TestPartResultArray() {} // Appends the given TestPartResult to the array. void Append(const TestPartResult& result); // Returns the TestPartResult at the given index (0-based). const TestPartResult& GetTestPartResult(int index) const; // Returns the number of TestPartResult objects in the array. int size() const; private: std::vector array_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); }; // This interface knows how to report a test part result. class TestPartResultReporterInterface { public: virtual ~TestPartResultReporterInterface() {} virtual void ReportTestPartResult(const TestPartResult& result) = 0; }; namespace internal { // This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a // statement generates new fatal failures. To do so it registers itself as the // current test part result reporter. Besides checking if fatal failures were // reported, it only delegates the reporting to the former result reporter. // The original result reporter is restored in the destructor. // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. class GTEST_API_ HasNewFatalFailureHelper : public TestPartResultReporterInterface { public: HasNewFatalFailureHelper(); virtual ~HasNewFatalFailureHelper(); virtual void ReportTestPartResult(const TestPartResult& result); bool has_new_fatal_failure() const { return has_new_fatal_failure_; } private: bool has_new_fatal_failure_; TestPartResultReporterInterface* original_reporter_; GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); }; } // namespace internal } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest_prod.h0000644015303500042660000000442412151455365021154 00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // Google C++ Testing Framework definitions useful in production code. #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ // When you need to test the private or protected members of a class, // use the FRIEND_TEST macro to declare your tests as friends of the // class. For example: // // class MyClass { // private: // void MyMethod(); // FRIEND_TEST(MyClassTest, MyMethod); // }; // // class MyClassTest : public testing::Test { // // ... // }; // // TEST_F(MyClassTest, MyMethod) { // // Can call MyClass::MyMethod() here. // } #define FRIEND_TEST(test_case_name, test_name)\ friend class test_case_name##_##test_name##_Test #endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest-printers.h0000644015303500042660000007307112151455365022000 00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // A user can teach this function how to print a class type T by // defining either operator<<() or PrintTo() in the namespace that // defines T. More specifically, the FIRST defined function in the // following list will be used (assuming T is defined in namespace // foo): // // 1. foo::PrintTo(const T&, ostream*) // 2. operator<<(ostream&, const T&) defined in either foo or the // global namespace. // // If none of the above is defined, it will print the debug string of // the value if it is a protocol buffer, or print the raw bytes in the // value otherwise. // // To aid debugging: when T is a reference type, the address of the // value is also printed; when T is a (const) char pointer, both the // pointer value and the NUL-terminated string it points to are // printed. // // We also provide some convenient wrappers: // // // Prints a value to a string. For a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // std::string ::testing::PrintToString(const T& value); // // // Prints a value tersely: for a reference type, the referenced // // value (but not the address) is printed; for a (const or not) char // // pointer, the NUL-terminated string (but not the pointer) is // // printed. // void ::testing::internal::UniversalTersePrint(const T& value, ostream*); // // // Prints value using the type inferred by the compiler. The difference // // from UniversalTersePrint() is that this function prints both the // // pointer and the NUL-terminated string for a (const or not) char pointer. // void ::testing::internal::UniversalPrint(const T& value, ostream*); // // // Prints the fields of a tuple tersely to a string vector, one // // element for each field. Tuple support must be enabled in // // gtest-port.h. // std::vector UniversalTersePrintTupleFieldsToStrings( // const Tuple& value); // // Known limitation: // // The print primitives print the elements of an STL-style container // using the compiler-inferred type of *iter where iter is a // const_iterator of the container. When const_iterator is an input // iterator but not a forward iterator, this inferred type may not // match value_type, and the print output may be incorrect. In // practice, this is rarely a problem as for most containers // const_iterator is a forward iterator. We'll fix this if there's an // actual need for it. Note that this fix cannot rely on value_type // being defined as many user-defined container types don't have // value_type. #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #include // NOLINT #include #include #include #include #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-internal.h" namespace testing { // Definitions in the 'internal' and 'internal2' name spaces are // subject to change without notice. DO NOT USE THEM IN USER CODE! namespace internal2 { // Prints the given number of bytes in the given object to the given // ostream. GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ::std::ostream* os); // For selecting which printer to use when a given type has neither << // nor PrintTo(). enum TypeKind { kProtobuf, // a protobuf type kConvertibleToInteger, // a type implicitly convertible to BiggestInt // (e.g. a named or unnamed enum type) kOtherType // anything else }; // TypeWithoutFormatter::PrintValue(value, os) is called // by the universal printer to print a value of type T when neither // operator<< nor PrintTo() is defined for T, where kTypeKind is the // "kind" of T as defined by enum TypeKind. template class TypeWithoutFormatter { public: // This default version is called when kTypeKind is kOtherType. static void PrintValue(const T& value, ::std::ostream* os) { PrintBytesInObjectTo(reinterpret_cast(&value), sizeof(value), os); } }; // We print a protobuf using its ShortDebugString() when the string // doesn't exceed this many characters; otherwise we print it using // DebugString() for better readability. const size_t kProtobufOneLinerMaxLength = 50; template class TypeWithoutFormatter { public: static void PrintValue(const T& value, ::std::ostream* os) { const ::testing::internal::string short_str = value.ShortDebugString(); const ::testing::internal::string pretty_str = short_str.length() <= kProtobufOneLinerMaxLength ? short_str : ("\n" + value.DebugString()); *os << ("<" + pretty_str + ">"); } }; template class TypeWithoutFormatter { public: // Since T has no << operator or PrintTo() but can be implicitly // converted to BiggestInt, we print it as a BiggestInt. // // Most likely T is an enum type (either named or unnamed), in which // case printing it as an integer is the desired behavior. In case // T is not an enum, printing it as an integer is the best we can do // given that it has no user-defined printer. static void PrintValue(const T& value, ::std::ostream* os) { const internal::BiggestInt kBigInt = value; *os << kBigInt; } }; // Prints the given value to the given ostream. If the value is a // protocol message, its debug string is printed; if it's an enum or // of a type implicitly convertible to BiggestInt, it's printed as an // integer; otherwise the bytes in the value are printed. This is // what UniversalPrinter::Print() does when it knows nothing about // type T and T has neither << operator nor PrintTo(). // // A user can override this behavior for a class type Foo by defining // a << operator in the namespace where Foo is defined. // // We put this operator in namespace 'internal2' instead of 'internal' // to simplify the implementation, as much code in 'internal' needs to // use << in STL, which would conflict with our own << were it defined // in 'internal'. // // Note that this operator<< takes a generic std::basic_ostream type instead of the more restricted std::ostream. If // we define it to take an std::ostream instead, we'll get an // "ambiguous overloads" compiler error when trying to print a type // Foo that supports streaming to std::basic_ostream, as the compiler cannot tell whether // operator<<(std::ostream&, const T&) or // operator<<(std::basic_stream, const Foo&) is more // specific. template ::std::basic_ostream& operator<<( ::std::basic_ostream& os, const T& x) { TypeWithoutFormatter::value ? kProtobuf : internal::ImplicitlyConvertible::value ? kConvertibleToInteger : kOtherType)>::PrintValue(x, &os); return os; } } // namespace internal2 } // namespace testing // This namespace MUST NOT BE NESTED IN ::testing, or the name look-up // magic needed for implementing UniversalPrinter won't work. namespace testing_internal { // Used to print a value that is not an STL-style container when the // user doesn't define PrintTo() for it. template void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { // With the following statement, during unqualified name lookup, // testing::internal2::operator<< appears as if it was declared in // the nearest enclosing namespace that contains both // ::testing_internal and ::testing::internal2, i.e. the global // namespace. For more details, refer to the C++ Standard section // 7.3.4-1 [namespace.udir]. This allows us to fall back onto // testing::internal2::operator<< in case T doesn't come with a << // operator. // // We cannot write 'using ::testing::internal2::operator<<;', which // gcc 3.3 fails to compile due to a compiler bug. using namespace ::testing::internal2; // NOLINT // Assuming T is defined in namespace foo, in the next statement, // the compiler will consider all of: // // 1. foo::operator<< (thanks to Koenig look-up), // 2. ::operator<< (as the current namespace is enclosed in ::), // 3. testing::internal2::operator<< (thanks to the using statement above). // // The operator<< whose type matches T best will be picked. // // We deliberately allow #2 to be a candidate, as sometimes it's // impossible to define #1 (e.g. when foo is ::std, defining // anything in it is undefined behavior unless you are a compiler // vendor.). *os << value; } } // namespace testing_internal namespace testing { namespace internal { // UniversalPrinter::Print(value, ostream_ptr) prints the given // value to the given ostream. The caller must ensure that // 'ostream_ptr' is not NULL, or the behavior is undefined. // // We define UniversalPrinter as a class template (as opposed to a // function template), as we need to partially specialize it for // reference types, which cannot be done with function templates. template class UniversalPrinter; template void UniversalPrint(const T& value, ::std::ostream* os); // Used to print an STL-style container when the user doesn't define // a PrintTo() for it. template void DefaultPrintTo(IsContainer /* dummy */, false_type /* is not a pointer */, const C& container, ::std::ostream* os) { const size_t kMaxCount = 32; // The maximum number of elements to print. *os << '{'; size_t count = 0; for (typename C::const_iterator it = container.begin(); it != container.end(); ++it, ++count) { if (count > 0) { *os << ','; if (count == kMaxCount) { // Enough has been printed. *os << " ..."; break; } } *os << ' '; // We cannot call PrintTo(*it, os) here as PrintTo() doesn't // handle *it being a native array. internal::UniversalPrint(*it, os); } if (count > 0) { *os << ' '; } *os << '}'; } // Used to print a pointer that is neither a char pointer nor a member // pointer, when the user doesn't define PrintTo() for it. (A member // variable pointer or member function pointer doesn't really point to // a location in the address space. Their representation is // implementation-defined. Therefore they will be printed as raw // bytes.) template void DefaultPrintTo(IsNotContainer /* dummy */, true_type /* is a pointer */, T* p, ::std::ostream* os) { if (p == NULL) { *os << "NULL"; } else { // C++ doesn't allow casting from a function pointer to any object // pointer. // // IsTrue() silences warnings: "Condition is always true", // "unreachable code". if (IsTrue(ImplicitlyConvertible::value)) { // T is not a function type. We just call << to print p, // relying on ADL to pick up user-defined << for their pointer // types, if any. *os << p; } else { // T is a function type, so '*os << p' doesn't do what we want // (it just prints p as bool). We want to print p as a const // void*. However, we cannot cast it to const void* directly, // even using reinterpret_cast, as earlier versions of gcc // (e.g. 3.4.5) cannot compile the cast when p is a function // pointer. Casting to UInt64 first solves the problem. *os << reinterpret_cast( reinterpret_cast(p)); } } } // Used to print a non-container, non-pointer value when the user // doesn't define PrintTo() for it. template void DefaultPrintTo(IsNotContainer /* dummy */, false_type /* is not a pointer */, const T& value, ::std::ostream* os) { ::testing_internal::DefaultPrintNonContainerTo(value, os); } // Prints the given value using the << operator if it has one; // otherwise prints the bytes in it. This is what // UniversalPrinter::Print() does when PrintTo() is not specialized // or overloaded for type T. // // A user can override this behavior for a class type Foo by defining // an overload of PrintTo() in the namespace where Foo is defined. We // give the user this option as sometimes defining a << operator for // Foo is not desirable (e.g. the coding style may prevent doing it, // or there is already a << operator but it doesn't do what the user // wants). template void PrintTo(const T& value, ::std::ostream* os) { // DefaultPrintTo() is overloaded. The type of its first two // arguments determine which version will be picked. If T is an // STL-style container, the version for container will be called; if // T is a pointer, the pointer version will be called; otherwise the // generic version will be called. // // Note that we check for container types here, prior to we check // for protocol message types in our operator<<. The rationale is: // // For protocol messages, we want to give people a chance to // override Google Mock's format by defining a PrintTo() or // operator<<. For STL containers, other formats can be // incompatible with Google Mock's format for the container // elements; therefore we check for container types here to ensure // that our format is used. // // The second argument of DefaultPrintTo() is needed to bypass a bug // in Symbian's C++ compiler that prevents it from picking the right // overload between: // // PrintTo(const T& x, ...); // PrintTo(T* x, ...); DefaultPrintTo(IsContainerTest(0), is_pointer(), value, os); } // The following list of PrintTo() overloads tells // UniversalPrinter::Print() how to print standard types (built-in // types, strings, plain arrays, and pointers). // Overloads for various char types. GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os); GTEST_API_ void PrintTo(signed char c, ::std::ostream* os); inline void PrintTo(char c, ::std::ostream* os) { // When printing a plain char, we always treat it as unsigned. This // way, the output won't be affected by whether the compiler thinks // char is signed or not. PrintTo(static_cast(c), os); } // Overloads for other simple built-in types. inline void PrintTo(bool x, ::std::ostream* os) { *os << (x ? "true" : "false"); } // Overload for wchar_t type. // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its decimal code (except for L'\0'). // The L'\0' char is printed as "L'\\0'". The decimal code is printed // as signed integer when wchar_t is implemented by the compiler // as a signed type and is printed as an unsigned integer when wchar_t // is implemented as an unsigned type. GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); // Overloads for C strings. GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); inline void PrintTo(char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // signed/unsigned char is often used for representing binary data, so // we print pointers to it as void* to be safe. inline void PrintTo(const signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(signed char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(const unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } inline void PrintTo(unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } // MSVC can be configured to define wchar_t as a typedef of unsigned // short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native // type. When wchar_t is a typedef, defining an overload for const // wchar_t* would cause unsigned short* be printed as a wide string, // possibly causing invalid memory accesses. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Overloads for wide C strings GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os); inline void PrintTo(wchar_t* s, ::std::ostream* os) { PrintTo(ImplicitCast_(s), os); } #endif // Overload for C arrays. Multi-dimensional arrays are printed // properly. // Prints the given number of elements in an array, without printing // the curly braces. template void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { UniversalPrint(a[0], os); for (size_t i = 1; i != count; i++) { *os << ", "; UniversalPrint(a[i], os); } } // Overloads for ::string and ::std::string. #if GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); inline void PrintTo(const ::string& s, ::std::ostream* os) { PrintStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_STRING GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); inline void PrintTo(const ::std::string& s, ::std::ostream* os) { PrintStringTo(s, os); } // Overloads for ::wstring and ::std::wstring. #if GTEST_HAS_GLOBAL_WSTRING GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); inline void PrintTo(const ::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_TR1_TUPLE // Overload for ::std::tr1::tuple. Needed for printing function arguments, // which are packed as tuples. // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os); // Overloaded PrintTo() for tuples of various arities. We support // tuples of up-to 10 fields. The following implementation works // regardless of whether tr1::tuple is implemented using the // non-standard variadic template feature or not. inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo(const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } template void PrintTo( const ::std::tr1::tuple& t, ::std::ostream* os) { PrintTupleTo(t, os); } #endif // GTEST_HAS_TR1_TUPLE // Overload for std::pair. template void PrintTo(const ::std::pair& value, ::std::ostream* os) { *os << '('; // We cannot use UniversalPrint(value.first, os) here, as T1 may be // a reference type. The same for printing value.second. UniversalPrinter::Print(value.first, os); *os << ", "; UniversalPrinter::Print(value.second, os); *os << ')'; } // Implements printing a non-reference type T by letting the compiler // pick the right overload of PrintTo() for T. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER // Note: we deliberately don't call this PrintTo(), as that name // conflicts with ::testing::internal::PrintTo in the body of the // function. static void Print(const T& value, ::std::ostream* os) { // By default, ::testing::internal::PrintTo() is used for printing // the value. // // Thanks to Koenig look-up, if T is a class and has its own // PrintTo() function defined in its namespace, that function will // be visible here. Since it is more specific than the generic ones // in ::testing::internal, it will be picked by the compiler in the // following statement - exactly what we want. PrintTo(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // UniversalPrintArray(begin, len, os) prints an array of 'len' // elements, starting at address 'begin'. template void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { if (len == 0) { *os << "{}"; } else { *os << "{ "; const size_t kThreshold = 18; const size_t kChunkSize = 8; // If the array has more than kThreshold elements, we'll have to // omit some details by printing only the first and the last // kChunkSize elements. // TODO(wan@google.com): let the user control the threshold using a flag. if (len <= kThreshold) { PrintRawArrayTo(begin, len, os); } else { PrintRawArrayTo(begin, kChunkSize, os); *os << ", ..., "; PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os); } *os << " }"; } } // This overload prints a (const) char array compactly. GTEST_API_ void UniversalPrintArray(const char* begin, size_t len, ::std::ostream* os); // Implements printing an array type T[N]. template class UniversalPrinter { public: // Prints the given array, omitting some elements when there are too // many. static void Print(const T (&a)[N], ::std::ostream* os) { UniversalPrintArray(a, N, os); } }; // Implements printing a reference type T&. template class UniversalPrinter { public: // MSVC warns about adding const to a function type, so we want to // disable the warning. #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4180) // Temporarily disables warning 4180. #endif // _MSC_VER static void Print(const T& value, ::std::ostream* os) { // Prints the address of the value. We use reinterpret_cast here // as static_cast doesn't compile when T is a function type. *os << "@" << reinterpret_cast(&value) << " "; // Then prints the value itself. UniversalPrint(value, os); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif // _MSC_VER }; // Prints a value tersely: for a reference type, the referenced value // (but not the address) is printed; for a (const) char pointer, the // NUL-terminated string (but not the pointer) is printed. template void UniversalTersePrint(const T& value, ::std::ostream* os) { UniversalPrint(value, os); } inline void UniversalTersePrint(const char* str, ::std::ostream* os) { if (str == NULL) { *os << "NULL"; } else { UniversalPrint(string(str), os); } } inline void UniversalTersePrint(char* str, ::std::ostream* os) { UniversalTersePrint(static_cast(str), os); } // Prints a value using the type inferred by the compiler. The // difference between this and UniversalTersePrint() is that for a // (const) char pointer, this prints both the pointer and the // NUL-terminated string. template void UniversalPrint(const T& value, ::std::ostream* os) { UniversalPrinter::Print(value, os); } #if GTEST_HAS_TR1_TUPLE typedef ::std::vector Strings; // This helper template allows PrintTo() for tuples and // UniversalTersePrintTupleFieldsToStrings() to be defined by // induction on the number of tuple fields. The idea is that // TuplePrefixPrinter::PrintPrefixTo(t, os) prints the first N // fields in tuple t, and can be defined in terms of // TuplePrefixPrinter. // The inductive case. template struct TuplePrefixPrinter { // Prints the first N fields of a tuple. template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { TuplePrefixPrinter::PrintPrefixTo(t, os); *os << ", "; UniversalPrinter::type> ::Print(::std::tr1::get(t), os); } // Tersely prints the first N fields of a tuple to a string vector, // one element for each field. template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { TuplePrefixPrinter::TersePrintPrefixToStrings(t, strings); ::std::stringstream ss; UniversalTersePrint(::std::tr1::get(t), &ss); strings->push_back(ss.str()); } }; // Base cases. template <> struct TuplePrefixPrinter<0> { template static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} template static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} }; // We have to specialize the entire TuplePrefixPrinter<> class // template here, even though the definition of // TersePrintPrefixToStrings() is the same as the generic version, as // Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't // support specializing a method template of a class template. template <> struct TuplePrefixPrinter<1> { template static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { UniversalPrinter::type>:: Print(::std::tr1::get<0>(t), os); } template static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { ::std::stringstream ss; UniversalTersePrint(::std::tr1::get<0>(t), &ss); strings->push_back(ss.str()); } }; // Helper function for printing a tuple. T must be instantiated with // a tuple type. template void PrintTupleTo(const T& t, ::std::ostream* os) { *os << "("; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: PrintPrefixTo(t, os); *os << ")"; } // Prints the fields of a tuple tersely to a string vector, one // element for each field. See the comment before // UniversalTersePrint() for how we define "tersely". template Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { Strings result; TuplePrefixPrinter< ::std::tr1::tuple_size::value>:: TersePrintPrefixToStrings(value, &result); return result; } #endif // GTEST_HAS_TR1_TUPLE } // namespace internal template ::std::string PrintToString(const T& value) { ::std::stringstream ss; internal::UniversalTersePrint(value, &ss); return ss.str(); } } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ jellyfish-1.1.11/unit_tests/gtest/include/gtest/gtest.h0000644015303500042660000024102212151455365020125 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) // // This header file defines the public API for Google Test. It should be // included by any test program that uses Google Test. // // IMPORTANT NOTE: Due to limitation of the C++ language, we have to // leave some internal implementation details in this header file. // They are clearly marked by comments like this: // // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // // Such code is NOT meant to be used by a user directly, and is subject // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! // // Acknowledgment: Google Test borrowed the idea of automatic test // registration from Barthelemy Dagenais' (barthelemy@prologique.com) // easyUnit framework. #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_H_ #include #include #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" #include "gtest/gtest-death-test.h" #include "gtest/gtest-message.h" #include "gtest/gtest-param-test.h" #include "gtest/gtest-printers.h" #include "gtest/gtest_prod.h" #include "gtest/gtest-test-part.h" #include "gtest/gtest-typed-test.h" // Depending on the platform, different string classes are available. // On Linux, in addition to ::std::string, Google also makes use of // class ::string, which has the same interface as ::std::string, but // has a different implementation. // // The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that // ::string is available AND is a distinct type to ::std::string, or // define it to 0 to indicate otherwise. // // If the user's ::std::string and ::string are the same class due to // aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. // // If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined // heuristically. namespace testing { // Declares the flags. // This flag temporary enables the disabled tests. GTEST_DECLARE_bool_(also_run_disabled_tests); // This flag brings the debugger on an assertion failure. GTEST_DECLARE_bool_(break_on_failure); // This flag controls whether Google Test catches all test-thrown exceptions // and logs them as failures. GTEST_DECLARE_bool_(catch_exceptions); // This flag enables using colors in terminal output. Available values are // "yes" to enable colors, "no" (disable colors), or "auto" (the default) // to let Google Test decide. GTEST_DECLARE_string_(color); // This flag sets up the filter to select by name using a glob pattern // the tests to run. If the filter is not given all tests are executed. GTEST_DECLARE_string_(filter); // This flag causes the Google Test to list tests. None of the tests listed // are actually run if the flag is provided. GTEST_DECLARE_bool_(list_tests); // This flag controls whether Google Test emits a detailed XML report to a file // in addition to its normal textual output. GTEST_DECLARE_string_(output); // This flags control whether Google Test prints the elapsed time for each // test. GTEST_DECLARE_bool_(print_time); // This flag specifies the random number seed. GTEST_DECLARE_int32_(random_seed); // This flag sets how many times the tests are repeated. The default value // is 1. If the value is -1 the tests are repeating forever. GTEST_DECLARE_int32_(repeat); // This flag controls whether Google Test includes Google Test internal // stack frames in failure stack traces. GTEST_DECLARE_bool_(show_internal_stack_frames); // When this flag is specified, tests' order is randomized on every iteration. GTEST_DECLARE_bool_(shuffle); // This flag specifies the maximum number of stack frames to be // printed in a failure message. GTEST_DECLARE_int32_(stack_trace_depth); // When this flag is specified, a failed assertion will throw an // exception if exceptions are enabled, or exit the program with a // non-zero code otherwise. GTEST_DECLARE_bool_(throw_on_failure); // When this flag is set with a "host:port" string, on supported // platforms test results are streamed to the specified port on // the specified host machine. GTEST_DECLARE_string_(stream_result_to); // The upper limit for valid stack trace depths. const int kMaxStackTraceDepth = 100; namespace internal { class AssertHelper; class DefaultGlobalTestPartResultReporter; class ExecDeathTest; class NoExecDeathTest; class FinalSuccessChecker; class GTestFlagSaver; class TestResultAccessor; class TestEventListenersAccessor; class TestEventRepeater; class WindowsDeathTest; class UnitTestImpl* GetUnitTestImpl(); void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const String& message); // Converts a streamable value to a String. A NULL pointer is // converted to "(null)". When the input value is a ::string, // ::std::string, ::wstring, or ::std::wstring object, each NUL // character in it is replaced with "\\0". // Declared in gtest-internal.h but defined here, so that it has access // to the definition of the Message class, required by the ARM // compiler. template String StreamableToString(const T& streamable) { return (Message() << streamable).GetString(); } } // namespace internal // The friend relationship of some of these classes is cyclic. // If we don't forward declare them the compiler might confuse the classes // in friendship clauses with same named classes on the scope. class Test; class TestCase; class TestInfo; class UnitTest; // A class for indicating whether an assertion was successful. When // the assertion wasn't successful, the AssertionResult object // remembers a non-empty message that describes how it failed. // // To create an instance of this class, use one of the factory functions // (AssertionSuccess() and AssertionFailure()). // // This class is useful for two purposes: // 1. Defining predicate functions to be used with Boolean test assertions // EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts // 2. Defining predicate-format functions to be // used with predicate assertions (ASSERT_PRED_FORMAT*, etc). // // For example, if you define IsEven predicate: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) // will print the message // // Value of: IsEven(Fib(5)) // Actual: false (5 is odd) // Expected: true // // instead of a more opaque // // Value of: IsEven(Fib(5)) // Actual: false // Expected: true // // in case IsEven is a simple Boolean predicate. // // If you expect your predicate to be reused and want to support informative // messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up // about half as often as positive ones in our tests), supply messages for // both success and failure cases: // // testing::AssertionResult IsEven(int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess() << n << " is even"; // else // return testing::AssertionFailure() << n << " is odd"; // } // // Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print // // Value of: IsEven(Fib(6)) // Actual: true (8 is even) // Expected: false // // NB: Predicates that support negative Boolean assertions have reduced // performance in positive ones so be careful not to use them in tests // that have lots (tens of thousands) of positive Boolean assertions. // // To use this class with EXPECT_PRED_FORMAT assertions such as: // // // Verifies that Foo() returns an even number. // EXPECT_PRED_FORMAT1(IsEven, Foo()); // // you need to define: // // testing::AssertionResult IsEven(const char* expr, int n) { // if ((n % 2) == 0) // return testing::AssertionSuccess(); // else // return testing::AssertionFailure() // << "Expected: " << expr << " is even\n Actual: it's " << n; // } // // If Foo() returns 5, you will see the following message: // // Expected: Foo() is even // Actual: it's 5 // class GTEST_API_ AssertionResult { public: // Copy constructor. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult(const AssertionResult& other); // Used in the EXPECT_TRUE/FALSE(bool_expression). explicit AssertionResult(bool success) : success_(success) {} // Returns true iff the assertion succeeded. operator bool() const { return success_; } // NOLINT // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult operator!() const; // Returns the text streamed into this AssertionResult. Test assertions // use it when they fail (i.e., the predicate's outcome doesn't match the // assertion's expectation). When nothing has been streamed into the // object, returns an empty string. const char* message() const { return message_.get() != NULL ? message_->c_str() : ""; } // TODO(vladl@google.com): Remove this after making sure no clients use it. // Deprecated; please use message() instead. const char* failure_message() const { return message(); } // Streams a custom failure message into this object. template AssertionResult& operator<<(const T& value) { AppendMessage(Message() << value); return *this; } // Allows streaming basic output manipulators such as endl or flush into // this object. AssertionResult& operator<<( ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { AppendMessage(Message() << basic_manipulator); return *this; } private: // Appends the contents of message to message_. void AppendMessage(const Message& a_message) { if (message_.get() == NULL) message_.reset(new ::std::string); message_->append(a_message.GetString().c_str()); } // Stores result of the assertion predicate. bool success_; // Stores the message describing the condition in case the expectation // construct is not satisfied with the predicate's outcome. // Referenced via a pointer to avoid taking too much stack frame space // with test assertions. internal::scoped_ptr< ::std::string> message_; GTEST_DISALLOW_ASSIGN_(AssertionResult); }; // Makes a successful assertion result. GTEST_API_ AssertionResult AssertionSuccess(); // Makes a failed assertion result. GTEST_API_ AssertionResult AssertionFailure(); // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << msg. GTEST_API_ AssertionResult AssertionFailure(const Message& msg); // The abstract class that all tests inherit from. // // In Google Test, a unit test program contains one or many TestCases, and // each TestCase contains one or many Tests. // // When you define a test using the TEST macro, you don't need to // explicitly derive from Test - the TEST macro automatically does // this for you. // // The only time you derive from Test is when defining a test fixture // to be used a TEST_F. For example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { ... } // virtual void TearDown() { ... } // ... // }; // // TEST_F(FooTest, Bar) { ... } // TEST_F(FooTest, Baz) { ... } // // Test is not copyable. class GTEST_API_ Test { public: friend class TestInfo; // Defines types for pointers to functions that set up and tear down // a test case. typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; // The d'tor is virtual as we intend to inherit from Test. virtual ~Test(); // Sets up the stuff shared by all tests in this test case. // // Google Test will call Foo::SetUpTestCase() before running the first // test in test case Foo. Hence a sub-class can define its own // SetUpTestCase() method to shadow the one defined in the super // class. static void SetUpTestCase() {} // Tears down the stuff shared by all tests in this test case. // // Google Test will call Foo::TearDownTestCase() after running the last // test in test case Foo. Hence a sub-class can define its own // TearDownTestCase() method to shadow the one defined in the super // class. static void TearDownTestCase() {} // Returns true iff the current test has a fatal failure. static bool HasFatalFailure(); // Returns true iff the current test has a non-fatal failure. static bool HasNonfatalFailure(); // Returns true iff the current test has a (either fatal or // non-fatal) failure. static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } // Logs a property for the current test. Only the last value for a given // key is remembered. // These are public static so they can be called from utility functions // that are not members of the test fixture. // The arguments are const char* instead strings, as Google Test is used // on platforms where string doesn't compile. // // Note that a driving consideration for these RecordProperty methods // was to produce xml output suited to the Greenspan charting utility, // which at present will only chart values that fit in a 32-bit int. It // is the user's responsibility to restrict their values to 32-bit ints // if they intend them to be used with Greenspan. static void RecordProperty(const char* key, const char* value); static void RecordProperty(const char* key, int value); protected: // Creates a Test object. Test(); // Sets up the test fixture. virtual void SetUp(); // Tears down the test fixture. virtual void TearDown(); private: // Returns true iff the current test has the same fixture class as // the first test in the current test case. static bool HasSameFixtureClass(); // Runs the test after the test fixture has been set up. // // A sub-class must implement this to define the test logic. // // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. // Instead, use the TEST or TEST_F macro. virtual void TestBody() = 0; // Sets up, executes, and tears down the test. void Run(); // Deletes self. We deliberately pick an unusual name for this // internal method to avoid clashing with names used in user TESTs. void DeleteSelf_() { delete this; } // Uses a GTestFlagSaver to save and restore all Google Test flags. const internal::GTestFlagSaver* const gtest_flag_saver_; // Often a user mis-spells SetUp() as Setup() and spends a long time // wondering why it is never called by Google Test. The declaration of // the following method is solely for catching such an error at // compile time: // // - The return type is deliberately chosen to be not void, so it // will be a conflict if a user declares void Setup() in his test // fixture. // // - This method is private, so it will be another compiler error // if a user calls it from his test fixture. // // DO NOT OVERRIDE THIS FUNCTION. // // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } // We disallow copying Tests. GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); }; typedef internal::TimeInMillis TimeInMillis; // A copyable object representing a user specified test property which can be // output as a key/value string pair. // // Don't inherit from TestProperty as its destructor is not virtual. class TestProperty { public: // C'tor. TestProperty does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestProperty object. TestProperty(const char* a_key, const char* a_value) : key_(a_key), value_(a_value) { } // Gets the user supplied key. const char* key() const { return key_.c_str(); } // Gets the user supplied value. const char* value() const { return value_.c_str(); } // Sets a new value, overriding the one supplied in the constructor. void SetValue(const char* new_value) { value_ = new_value; } private: // The key supplied by the user. internal::String key_; // The value supplied by the user. internal::String value_; }; // The result of a single Test. This includes a list of // TestPartResults, a list of TestProperties, a count of how many // death tests there are in the Test, and how much time it took to run // the Test. // // TestResult is not copyable. class GTEST_API_ TestResult { public: // Creates an empty TestResult. TestResult(); // D'tor. Do not inherit from TestResult. ~TestResult(); // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int total_part_count() const; // Returns the number of the test properties. int test_property_count() const; // Returns true iff the test passed (i.e. no test part failed). bool Passed() const { return !Failed(); } // Returns true iff the test failed. bool Failed() const; // Returns true iff the test fatally failed. bool HasFatalFailure() const; // Returns true iff the test has a non-fatal failure. bool HasNonfatalFailure() const; // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test part result among all the results. i can range // from 0 to test_property_count() - 1. If i is not in that range, aborts // the program. const TestPartResult& GetTestPartResult(int i) const; // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& GetTestProperty(int i) const; private: friend class TestInfo; friend class UnitTest; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::ExecDeathTest; friend class internal::TestResultAccessor; friend class internal::UnitTestImpl; friend class internal::WindowsDeathTest; // Gets the vector of TestPartResults. const std::vector& test_part_results() const { return test_part_results_; } // Gets the vector of TestProperties. const std::vector& test_properties() const { return test_properties_; } // Sets the elapsed time. void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } // Adds a test property to the list. The property is validated and may add // a non-fatal failure if invalid (e.g., if it conflicts with reserved // key names). If a property is already recorded for the same key, the // value will be updated, rather than storing multiple values for the same // key. void RecordProperty(const TestProperty& test_property); // Adds a failure if the key is a reserved attribute of Google Test // testcase tags. Returns true if the property is valid. // TODO(russr): Validate attribute names are legal and human readable. static bool ValidateTestProperty(const TestProperty& test_property); // Adds a test part result to the list. void AddTestPartResult(const TestPartResult& test_part_result); // Returns the death test count. int death_test_count() const { return death_test_count_; } // Increments the death test count, returning the new count. int increment_death_test_count() { return ++death_test_count_; } // Clears the test part results. void ClearTestPartResults(); // Clears the object. void Clear(); // Protects mutable state of the property vector and of owned // properties, whose values may be updated. internal::Mutex test_properites_mutex_; // The vector of TestPartResults std::vector test_part_results_; // The vector of TestProperties std::vector test_properties_; // Running count of death tests. int death_test_count_; // The elapsed time, in milliseconds. TimeInMillis elapsed_time_; // We disallow copying TestResult. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); }; // class TestResult // A TestInfo object stores the following information about a test: // // Test case name // Test name // Whether the test should be run // A function pointer that creates the test object when invoked // Test result // // The constructor of TestInfo registers itself with the UnitTest // singleton such that the RUN_ALL_TESTS() macro knows which tests to // run. class GTEST_API_ TestInfo { public: // Destructs a TestInfo object. This function is not virtual, so // don't inherit from TestInfo. ~TestInfo(); // Returns the test case name. const char* test_case_name() const { return test_case_name_.c_str(); } // Returns the test name. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a typed // or a type-parameterized test. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns the text representation of the value parameter, or NULL if this // is not a value-parameterized test. const char* value_param() const { if (value_param_.get() != NULL) return value_param_->c_str(); return NULL; } // Returns true if this test should run, that is if the test is not disabled // (or it is disabled but the also_run_disabled_tests flag has been specified) // and its full name matches the user-specified filter. // // Google Test allows the user to filter the tests by their full names. // The full name of a test Bar in test case Foo is defined as // "Foo.Bar". Only the tests that match the filter will run. // // A filter is a colon-separated list of glob (not regex) patterns, // optionally followed by a '-' and a colon-separated list of // negative patterns (tests to exclude). A test is run if it // matches one of the positive patterns and does not match any of // the negative patterns. // // For example, *A*:Foo.* is a filter that matches any string that // contains the character 'A' or starts with "Foo.". bool should_run() const { return should_run_; } // Returns the result of the test. const TestResult* result() const { return &result_; } private: #if GTEST_HAS_DEATH_TEST friend class internal::DefaultDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST friend class Test; friend class TestCase; friend class internal::UnitTestImpl; friend TestInfo* internal::MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, internal::TypeId fixture_class_id, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, internal::TestFactoryBase* factory); // Constructs a TestInfo object. The newly constructed instance assumes // ownership of the factory object. TestInfo(const char* test_case_name, const char* name, const char* a_type_param, const char* a_value_param, internal::TypeId fixture_class_id, internal::TestFactoryBase* factory); // Increments the number of death tests encountered in this test so // far. int increment_death_test_count() { return result_.increment_death_test_count(); } // Creates the test object, runs it, records its result, and then // deletes it. void Run(); static void ClearTestResult(TestInfo* test_info) { test_info->result_.Clear(); } // These fields are immutable properties of the test. const std::string test_case_name_; // Test case name const std::string name_; // Test name // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // Text representation of the value parameter, or NULL if this is not a // value-parameterized test. const internal::scoped_ptr value_param_; const internal::TypeId fixture_class_id_; // ID of the test fixture class bool should_run_; // True iff this test should run bool is_disabled_; // True iff this test is disabled bool matches_filter_; // True if this test matches the // user-specified filter. internal::TestFactoryBase* const factory_; // The factory that creates // the test object // This field is mutable and needs to be reset before running the // test for the second time. TestResult result_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); }; // A test case, which consists of a vector of TestInfos. // // TestCase is not copyable. class GTEST_API_ TestCase { public: // Creates a TestCase with the given name. // // TestCase does NOT have a default constructor. Always use this // constructor to create a TestCase object. // // Arguments: // // name: name of the test case // a_type_param: the name of the test's type parameter, or NULL if // this is not a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase(const char* name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Destructor of TestCase. virtual ~TestCase(); // Gets the name of the TestCase. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a // type-parameterized test case. const char* type_param() const { if (type_param_.get() != NULL) return type_param_->c_str(); return NULL; } // Returns true if any test in this test case should run. bool should_run() const { return should_run_; } // Gets the number of successful tests in this test case. int successful_test_count() const; // Gets the number of failed tests in this test case. int failed_test_count() const; // Gets the number of disabled tests in this test case. int disabled_test_count() const; // Get the number of tests in this test case that should run. int test_to_run_count() const; // Gets the number of all tests in this test case. int total_test_count() const; // Returns true iff the test case passed. bool Passed() const { return !Failed(); } // Returns true iff the test case failed. bool Failed() const { return failed_test_count() > 0; } // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* GetTestInfo(int i) const; private: friend class Test; friend class internal::UnitTestImpl; // Gets the (mutable) vector of TestInfos in this TestCase. std::vector& test_info_list() { return test_info_list_; } // Gets the (immutable) vector of TestInfos in this TestCase. const std::vector& test_info_list() const { return test_info_list_; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* GetMutableTestInfo(int i); // Sets the should_run member. void set_should_run(bool should) { should_run_ = should; } // Adds a TestInfo to this test case. Will delete the TestInfo upon // destruction of the TestCase object. void AddTestInfo(TestInfo * test_info); // Clears the results of all tests in this test case. void ClearResult(); // Clears the results of all tests in the given test case. static void ClearTestCaseResult(TestCase* test_case) { test_case->ClearResult(); } // Runs every test in this TestCase. void Run(); // Runs SetUpTestCase() for this TestCase. This wrapper is needed // for catching exceptions thrown from SetUpTestCase(). void RunSetUpTestCase() { (*set_up_tc_)(); } // Runs TearDownTestCase() for this TestCase. This wrapper is // needed for catching exceptions thrown from TearDownTestCase(). void RunTearDownTestCase() { (*tear_down_tc_)(); } // Returns true iff test passed. static bool TestPassed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Passed(); } // Returns true iff test failed. static bool TestFailed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Failed(); } // Returns true iff test is disabled. static bool TestDisabled(const TestInfo* test_info) { return test_info->is_disabled_; } // Returns true if the given test should run. static bool ShouldRunTest(const TestInfo* test_info) { return test_info->should_run(); } // Shuffles the tests in this test case. void ShuffleTests(internal::Random* random); // Restores the test order to before the first shuffle. void UnshuffleTests(); // Name of the test case. internal::String name_; // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const internal::scoped_ptr type_param_; // The vector of TestInfos in their original order. It owns the // elements in the vector. std::vector test_info_list_; // Provides a level of indirection for the test list to allow easy // shuffling and restoring the test order. The i-th element in this // vector is the index of the i-th test in the shuffled test list. std::vector test_indices_; // Pointer to the function that sets up the test case. Test::SetUpTestCaseFunc set_up_tc_; // Pointer to the function that tears down the test case. Test::TearDownTestCaseFunc tear_down_tc_; // True iff any test in this test case should run. bool should_run_; // Elapsed time, in milliseconds. TimeInMillis elapsed_time_; // We disallow copying TestCases. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); }; // An Environment object is capable of setting up and tearing down an // environment. The user should subclass this to define his own // environment(s). // // An Environment object does the set-up and tear-down in virtual // methods SetUp() and TearDown() instead of the constructor and the // destructor, as: // // 1. You cannot safely throw from a destructor. This is a problem // as in some cases Google Test is used where exceptions are enabled, and // we may want to implement ASSERT_* using exceptions where they are // available. // 2. You cannot use ASSERT_* directly in a constructor or // destructor. class Environment { public: // The d'tor is virtual as we need to subclass Environment. virtual ~Environment() {} // Override this to define how to set up the environment. virtual void SetUp() {} // Override this to define how to tear down the environment. virtual void TearDown() {} private: // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } }; // The interface for tracing execution of tests. The methods are organized in // the order the corresponding events are fired. class TestEventListener { public: virtual ~TestEventListener() {} // Fired before any test activity starts. virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; // Fired before each iteration of tests starts. There may be more than // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration // index, starting from 0. virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration) = 0; // Fired before environment set-up for each iteration of tests starts. virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; // Fired after environment set-up for each iteration of tests ends. virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; // Fired before the test case starts. virtual void OnTestCaseStart(const TestCase& test_case) = 0; // Fired before the test starts. virtual void OnTestStart(const TestInfo& test_info) = 0; // Fired after a failed assertion or a SUCCEED() invocation. virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; // Fired after the test ends. virtual void OnTestEnd(const TestInfo& test_info) = 0; // Fired after the test case ends. virtual void OnTestCaseEnd(const TestCase& test_case) = 0; // Fired before environment tear-down for each iteration of tests starts. virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; // Fired after environment tear-down for each iteration of tests ends. virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; // Fired after each iteration of tests finishes. virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0; // Fired after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; }; // The convenience class for users who need to override just one or two // methods and are not concerned that a possible change to a signature of // the methods they override will not be caught during the build. For // comments about each method please see the definition of TestEventListener // above. class EmptyTestEventListener : public TestEventListener { public: virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} virtual void OnTestStart(const TestInfo& /*test_info*/) {} virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} virtual void OnTestEnd(const TestInfo& /*test_info*/) {} virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, int /*iteration*/) {} virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} }; // TestEventListeners lets users add listeners to track events in Google Test. class GTEST_API_ TestEventListeners { public: TestEventListeners(); ~TestEventListeners(); // Appends an event listener to the end of the list. Google Test assumes // the ownership of the listener (i.e. it will delete the listener when // the test program finishes). void Append(TestEventListener* listener); // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* Release(TestEventListener* listener); // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the caller and makes this // function return NULL the next time. TestEventListener* default_result_printer() const { return default_result_printer_; } // Returns the standard listener responsible for the default XML output // controlled by the --gtest_output=xml flag. Can be removed from the // listeners list by users who want to shut down the default XML output // controlled by this flag and substitute it with custom one. Note that // removing this object from the listener list with Release transfers its // ownership to the caller and makes this function return NULL the next // time. TestEventListener* default_xml_generator() const { return default_xml_generator_; } private: friend class TestCase; friend class TestInfo; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::NoExecDeathTest; friend class internal::TestEventListenersAccessor; friend class internal::UnitTestImpl; // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* repeater(); // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultResultPrinter(TestEventListener* listener); // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void SetDefaultXmlGenerator(TestEventListener* listener); // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool EventForwardingEnabled() const; void SuppressEventForwarding(); // The actual list of listeners. internal::TestEventRepeater* repeater_; // Listener responsible for the standard result output. TestEventListener* default_result_printer_; // Listener responsible for the creation of the XML output file. TestEventListener* default_xml_generator_; // We disallow copying TestEventListeners. GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); }; // A UnitTest consists of a vector of TestCases. // // This is a singleton class. The only instance of UnitTest is // created when UnitTest::GetInstance() is first called. This // instance is never deleted. // // UnitTest is not copyable. // // This class is thread-safe as long as the methods are called // according to their specification. class GTEST_API_ UnitTest { public: // Gets the singleton UnitTest object. The first time this method // is called, a UnitTest object is constructed and returned. // Consecutive calls will return the same object. static UnitTest* GetInstance(); // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // This method can only be called from the main thread. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. int Run() GTEST_MUST_USE_RESULT_; // Returns the working directory when the first TEST() or TEST_F() // was executed. The UnitTest object owns the string. const char* original_working_dir() const; // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. const TestCase* current_test_case() const; // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. const TestInfo* current_test_info() const; // Returns the random seed used at the start of the current test run. int random_seed() const; #if GTEST_HAS_PARAM_TEST // Returns the ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); #endif // GTEST_HAS_PARAM_TEST // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const; // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const; // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const; // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const; // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& listeners(); private: // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in // the order they were registered. After all tests in the program // have finished, all global test environments will be torn-down in // the *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // This method can only be called from the main thread. Environment* AddEnvironment(Environment* env); // Adds a TestPartResult to the current TestResult object. All // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) // eventually call this to report their results. The user code // should use the assertion macros instead of calling this directly. void AddTestPartResult(TestPartResult::Type result_type, const char* file_name, int line_number, const internal::String& message, const internal::String& os_stack_trace); // Adds a TestProperty to the current TestResult object. If the result already // contains a property with the same key, the value will be updated. void RecordPropertyForCurrentTest(const char* key, const char* value); // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i); // Accessors for the implementation object. internal::UnitTestImpl* impl() { return impl_; } const internal::UnitTestImpl* impl() const { return impl_; } // These classes and funcions are friends as they need to access private // members of UnitTest. friend class Test; friend class internal::AssertHelper; friend class internal::ScopedTrace; friend Environment* AddGlobalTestEnvironment(Environment* env); friend internal::UnitTestImpl* internal::GetUnitTestImpl(); friend void internal::ReportFailureInUnknownLocation( TestPartResult::Type result_type, const internal::String& message); // Creates an empty UnitTest. UnitTest(); // D'tor virtual ~UnitTest(); // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. void PushGTestTrace(const internal::TraceInfo& trace); // Pops a trace from the per-thread Google Test trace stack. void PopGTestTrace(); // Protects mutable state in *impl_. This is mutable as some const // methods need to lock it too. mutable internal::Mutex mutex_; // Opaque implementation object. This field is never changed once // the object is constructed. We don't mark it as const here, as // doing so will cause a warning in the constructor of UnitTest. // Mutable state in *impl_ is protected by mutex_. internal::UnitTestImpl* impl_; // We disallow copying UnitTest. GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); }; // A convenient wrapper for adding an environment for the test // program. // // You should call this before RUN_ALL_TESTS() is called, probably in // main(). If you use gtest_main, you need to call this before main() // starts for it to take effect. For example, you can define a global // variable like this: // // testing::Environment* const foo_env = // testing::AddGlobalTestEnvironment(new FooEnvironment); // // However, we strongly recommend you to write your own main() and // call AddGlobalTestEnvironment() there, as relying on initialization // of global variables makes the code harder to read and may cause // problems when you register multiple environments from different // translation units and the environments have dependencies among them // (remember that the compiler doesn't guarantee the order in which // global variables from different translation units are initialized). inline Environment* AddGlobalTestEnvironment(Environment* env) { return UnitTest::GetInstance()->AddEnvironment(env); } // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. GTEST_API_ void InitGoogleTest(int* argc, char** argv); // This overloaded version can be used in Windows programs compiled in // UNICODE mode. GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); namespace internal { // Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) // operand to be used in a failure message. The type (but not value) // of the other operand may affect the format. This allows us to // print a char* as a raw pointer when it is compared against another // char*, and print it as a C string when it is compared against an // std::string object, for example. // // The default implementation ignores the type of the other operand. // Some specialized versions are used to handle formatting wide or // narrow C strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template String FormatForComparisonFailureMessage(const T1& value, const T2& /* other_operand */) { // C++Builder compiles this incorrectly if the namespace isn't explicitly // given. return ::testing::PrintToString(value); } // The helper function for {ASSERT|EXPECT}_EQ. template AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4389) // Temporarily disables warning on // signed/unsigned mismatch. #endif if (expected == actual) { return AssertionSuccess(); } #ifdef _MSC_VER # pragma warning(pop) // Restores the warning state. #endif return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums // can be implicitly cast to BiggestInt. GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual); // The helper class for {ASSERT|EXPECT}_EQ. The template argument // lhs_is_null_literal is true iff the first argument to ASSERT_EQ() // is a null pointer literal. The following default implementation is // for lhs_is_null_literal being false. template class EqHelper { public: // This templatized version is for the general case. template static AssertionResult Compare(const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // With this overloaded version, we allow anonymous enums to be used // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous // enums can be implicitly cast to BiggestInt. // // Even though its body looks the same as the above version, we // cannot merge the two, as it will make anonymous enums unhappy. static AssertionResult Compare(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } }; // This specialization is used when the first argument to ASSERT_EQ() // is a null pointer literal, like NULL, false, or 0. template <> class EqHelper { public: // We define two overloaded versions of Compare(). The first // version will be picked when the second argument to ASSERT_EQ() is // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or // EXPECT_EQ(false, a_bool). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, const T1& expected, const T2& actual, // The following line prevents this overload from being considered if T2 // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) // expands to Compare("", "", NULL, my_ptr), which requires a conversion // to match the Secret* in the other overload, which would otherwise make // this template match better. typename EnableIf::value>::type* = 0) { return CmpHelperEQ(expected_expression, actual_expression, expected, actual); } // This version will be picked when the second argument to ASSERT_EQ() is a // pointer, e.g. ASSERT_EQ(NULL, a_pointer). template static AssertionResult Compare( const char* expected_expression, const char* actual_expression, // We used to have a second template parameter instead of Secret*. That // template parameter would deduce to 'long', making this a better match // than the first overload even without the first overload's EnableIf. // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to // non-pointer argument" (even a deduced integral argument), so the old // implementation caused warnings in user code. Secret* /* expected (NULL) */, T* actual) { // We already know that 'expected' is a null pointer. return CmpHelperEQ(expected_expression, actual_expression, static_cast(NULL), actual); } }; // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste // of similar code. // // For each templatized helper function, we also define an overloaded // version for BiggestInt in order to reduce code bloat and allow // anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled // with gcc 4. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ template \ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ const T1& val1, const T2& val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ }\ GTEST_API_ AssertionResult CmpHelper##op_name(\ const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // Implements the helper function for {ASSERT|EXPECT}_NE GTEST_IMPL_CMP_HELPER_(NE, !=); // Implements the helper function for {ASSERT|EXPECT}_LE GTEST_IMPL_CMP_HELPER_(LE, <=); // Implements the helper function for {ASSERT|EXPECT}_LT GTEST_IMPL_CMP_HELPER_(LT, < ); // Implements the helper function for {ASSERT|EXPECT}_GE GTEST_IMPL_CMP_HELPER_(GE, >=); // Implements the helper function for {ASSERT|EXPECT}_GT GTEST_IMPL_CMP_HELPER_(GT, > ); #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRCASEEQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual); // The helper function for {ASSERT|EXPECT}_STRNE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRCASENE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2); // Helper function for *_STREQ on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual); // Helper function for *_STRNE on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2); } // namespace internal // IsSubstring() and IsNotSubstring() are intended to be used as the // first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by // themselves. They check whether needle is a substring of haystack // (NULL is considered a substring of itself only), and return an // appropriate error message when they fail. // // The {needle,haystack}_expr arguments are the stringified // expressions that generated the two real arguments. GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack); GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack); #if GTEST_HAS_STD_WSTRING GTEST_API_ AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); GTEST_API_ AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack); #endif // GTEST_HAS_STD_WSTRING namespace internal { // Helper template function for comparing floating-points. // // Template parameter: // // RawType: the raw floating-point type (either float or double) // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, const char* actual_expression, RawType expected, RawType actual) { const FloatingPoint lhs(expected), rhs(actual); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } ::std::stringstream expected_ss; expected_ss << std::setprecision(std::numeric_limits::digits10 + 2) << expected; ::std::stringstream actual_ss; actual_ss << std::setprecision(std::numeric_limits::digits10 + 2) << actual; return EqFailure(expected_expression, actual_expression, StringStreamToString(&expected_ss), StringStreamToString(&actual_ss), false); } // Helper function for implementing ASSERT_NEAR. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // A class that enables one to stream messages to assertion macros class GTEST_API_ AssertHelper { public: // Constructor. AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message); ~AssertHelper(); // Message assignment is a semantic trick to enable assertion // streaming; see the GTEST_MESSAGE_ macro below. void operator=(const Message& message) const; private: // We put our data in a struct so that the size of the AssertHelper class can // be as small as possible. This is important because gcc is incapable of // re-using stack space even for temporary variables, so every EXPECT_EQ // reserves stack space for another AssertHelper. struct AssertHelperData { AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num, const char* msg) : type(t), file(srcfile), line(line_num), message(msg) { } TestPartResult::Type const type; const char* const file; int const line; String const message; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); }; AssertHelperData* const data_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); }; } // namespace internal #if GTEST_HAS_PARAM_TEST // The pure interface class that all value-parameterized tests inherit from. // A value-parameterized class must inherit from both ::testing::Test and // ::testing::WithParamInterface. In most cases that just means inheriting // from ::testing::TestWithParam, but more complicated test hierarchies // may need to inherit from Test and WithParamInterface at different levels. // // This interface has support for accessing the test parameter value via // the GetParam() method. // // Use it with one of the parameter generator defining functions, like Range(), // Values(), ValuesIn(), Bool(), and Combine(). // // class FooTest : public ::testing::TestWithParam { // protected: // FooTest() { // // Can use GetParam() here. // } // virtual ~FooTest() { // // Can use GetParam() here. // } // virtual void SetUp() { // // Can use GetParam() here. // } // virtual void TearDown { // // Can use GetParam() here. // } // }; // TEST_P(FooTest, DoesBar) { // // Can use GetParam() method here. // Foo foo; // ASSERT_TRUE(foo.DoesBar(GetParam())); // } // INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); template class WithParamInterface { public: typedef T ParamType; virtual ~WithParamInterface() {} // The current parameter value. Is also available in the test fixture's // constructor. This member function is non-static, even though it only // references static data, to reduce the opportunity for incorrect uses // like writing 'WithParamInterface::GetParam()' for a test that // uses a fixture whose parameter type is int. const ParamType& GetParam() const { return *parameter_; } private: // Sets parameter value. The caller is responsible for making sure the value // remains alive and unchanged throughout the current test. static void SetParam(const ParamType* parameter) { parameter_ = parameter; } // Static value used for accessing parameter during a test lifetime. static const ParamType* parameter_; // TestClass must be a subclass of WithParamInterface and Test. template friend class internal::ParameterizedTestFactory; }; template const T* WithParamInterface::parameter_ = NULL; // Most value-parameterized classes can ignore the existence of // WithParamInterface, and can just inherit from ::testing::TestWithParam. template class TestWithParam : public Test, public WithParamInterface { }; #endif // GTEST_HAS_PARAM_TEST // Macros for indicating success/failure in test code. // ADD_FAILURE unconditionally adds a failure to the current test. // SUCCEED generates a success - it doesn't automatically make the // current test successful, as a test is only successful when it has // no failure. // // EXPECT_* verifies that a certain condition is satisfied. If not, // it behaves like ADD_FAILURE. In particular: // // EXPECT_TRUE verifies that a Boolean condition is true. // EXPECT_FALSE verifies that a Boolean condition is false. // // FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except // that they will also abort the current function on failure. People // usually want the fail-fast behavior of FAIL and ASSERT_*, but those // writing data-driven tests often find themselves using ADD_FAILURE // and EXPECT_* more. // // Examples: // // EXPECT_TRUE(server.StatusIsOK()); // ASSERT_FALSE(server.HasPendingRequest(port)) // << "There are still pending requests " << "on port " << port; // Generates a nonfatal failure with a generic message. #define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") // Generates a nonfatal failure at the given source file location with // a generic message. #define ADD_FAILURE_AT(file, line) \ GTEST_MESSAGE_AT_(file, line, "Failed", \ ::testing::TestPartResult::kNonFatalFailure) // Generates a fatal failure with a generic message. #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") // Define this macro to 1 to omit the definition of FAIL(), which is a // generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_FAIL # define FAIL() GTEST_FAIL() #endif // Generates a success with a generic message. #define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") // Define this macro to 1 to omit the definition of SUCCEED(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_SUCCEED # define SUCCEED() GTEST_SUCCEED() #endif // Macros for testing exceptions. // // * {ASSERT|EXPECT}_THROW(statement, expected_exception): // Tests that the statement throws the expected exception. // * {ASSERT|EXPECT}_NO_THROW(statement): // Tests that the statement doesn't throw any exception. // * {ASSERT|EXPECT}_ANY_THROW(statement): // Tests that the statement throws an exception. #define EXPECT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) #define EXPECT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define EXPECT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) #define ASSERT_THROW(statement, expected_exception) \ GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) #define ASSERT_NO_THROW(statement) \ GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) #define ASSERT_ANY_THROW(statement) \ GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) // Boolean assertions. Condition can be either a Boolean expression or an // AssertionResult. For more information on how to use AssertionResult with // these macros see comments on that class. #define EXPECT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_NONFATAL_FAILURE_) #define EXPECT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_NONFATAL_FAILURE_) #define ASSERT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_FATAL_FAILURE_) #define ASSERT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_FATAL_FAILURE_) // Includes the auto-generated header that implements a family of // generic predicate assertion macros. #include "gtest/gtest_pred_impl.h" // Macros for testing equalities and inequalities. // // * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual // * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 // * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 // * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 // * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 // * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 // // When they are not, Google Test prints both the tested expressions and // their actual values. The values must be compatible built-in types, // or you will get a compiler error. By "compatible" we mean that the // values can be compared by the respective operator. // // Note: // // 1. It is possible to make a user-defined type work with // {ASSERT|EXPECT}_??(), but that requires overloading the // comparison operators and is thus discouraged by the Google C++ // Usage Guide. Therefore, you are advised to use the // {ASSERT|EXPECT}_TRUE() macro to assert that two objects are // equal. // // 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on // pointers (in particular, C strings). Therefore, if you use it // with two C strings, you are testing how their locations in memory // are related, not how their content is related. To compare two C // strings by content, use {ASSERT|EXPECT}_STR*(). // // 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to // {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you // what the actual value is when it fails, and similarly for the // other comparisons. // // 4. Do not depend on the order in which {ASSERT|EXPECT}_??() // evaluate their arguments, which is undefined. // // 5. These macros evaluate their arguments exactly once. // // Examples: // // EXPECT_NE(5, Foo()); // EXPECT_EQ(NULL, a_pointer); // ASSERT_LT(i, array_size); // ASSERT_GT(records.size(), 0) << "There is no record left."; #define EXPECT_EQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define EXPECT_NE(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) #define EXPECT_LE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define EXPECT_LT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define EXPECT_GE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define EXPECT_GT(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) #define GTEST_ASSERT_EQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal:: \ EqHelper::Compare, \ expected, actual) #define GTEST_ASSERT_NE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) #define GTEST_ASSERT_LE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) #define GTEST_ASSERT_LT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) #define GTEST_ASSERT_GE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) #define GTEST_ASSERT_GT(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) // Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of // ASSERT_XY(), which clashes with some users' own code. #if !GTEST_DONT_DEFINE_ASSERT_EQ # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_NE # define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LE # define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LT # define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GE # define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GT # define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) #endif // C String Comparisons. All tests treat NULL and any non-NULL string // as different. Two NULLs are equal. // // * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 // * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 // * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case // * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case // // For wide or narrow string objects, you can use the // {ASSERT|EXPECT}_??() macros. // // Don't depend on the order in which the arguments are evaluated, // which is undefined. // // These macros evaluate their arguments exactly once. #define EXPECT_STREQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define EXPECT_STRNE(s1, s2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define EXPECT_STRCASEEQ(expected, actual) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define EXPECT_STRCASENE(s1, s2)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) #define ASSERT_STREQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) #define ASSERT_STRNE(s1, s2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define ASSERT_STRCASEEQ(expected, actual) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) #define ASSERT_STRCASENE(s1, s2)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) // Macros for comparing floating-point numbers. // // * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): // Tests that two float values are almost equal. // * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): // Tests that two double values are almost equal. // * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): // Tests that v1 and v2 are within the given distance to each other. // // Google Test uses ULP-based comparison to automatically pick a default // error bound that is appropriate for the operands. See the // FloatingPoint template class in gtest-internal.h if you are // interested in the implementation details. #define EXPECT_FLOAT_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_DOUBLE_EQ(expected, actual)\ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_FLOAT_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define ASSERT_DOUBLE_EQ(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ, \ expected, actual) #define EXPECT_NEAR(val1, val2, abs_error)\ EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) #define ASSERT_NEAR(val1, val2, abs_error)\ ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ val1, val2, abs_error) // These predicate format functions work on floating-point values, and // can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. // // EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2); GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2); #if GTEST_OS_WINDOWS // Macros that test for HRESULT failure and success, these are only useful // on Windows, and rely on Windows SDK macros and APIs to compile. // // * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) // // When expr unexpectedly fails or succeeds, Google Test prints the // expected result and the actual result with both a human-readable // string representation of the error, if available, as well as the // hex result code. # define EXPECT_HRESULT_SUCCEEDED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define ASSERT_HRESULT_SUCCEEDED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) # define EXPECT_HRESULT_FAILED(expr) \ EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) # define ASSERT_HRESULT_FAILED(expr) \ ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) #endif // GTEST_OS_WINDOWS // Macros that execute statement and check that it doesn't generate new fatal // failures in the current thread. // // * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); // // Examples: // // EXPECT_NO_FATAL_FAILURE(Process()); // ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; // #define ASSERT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) #define EXPECT_NO_FATAL_FAILURE(statement) \ GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) // Causes a trace (including the source file path, the current line // number, and the given message) to be included in every test failure // message generated by code in the current scope. The effect is // undone when the control leaves the current scope. // // The message argument can be anything streamable to std::ostream. // // In the implementation, we include the current line number as part // of the dummy variable name, thus allowing multiple SCOPED_TRACE()s // to appear in the same block - as long as they are on different // lines. #define SCOPED_TRACE(message) \ ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ __FILE__, __LINE__, ::testing::Message() << (message)) // Compile-time assertion for type equality. // StaticAssertTypeEq() compiles iff type1 and type2 are // the same type. The value it returns is not interesting. // // Instead of making StaticAssertTypeEq a class template, we make it a // function template that invokes a helper class template. This // prevents a user from misusing StaticAssertTypeEq by // defining objects of that type. // // CAVEAT: // // When used inside a method of a class template, // StaticAssertTypeEq() is effective ONLY IF the method is // instantiated. For example, given: // // template class Foo { // public: // void Bar() { testing::StaticAssertTypeEq(); } // }; // // the code: // // void Test1() { Foo foo; } // // will NOT generate a compiler error, as Foo::Bar() is never // actually instantiated. Instead, you need: // // void Test2() { Foo foo; foo.Bar(); } // // to cause a compiler error. template bool StaticAssertTypeEq() { (void)internal::StaticAssertTypeEqHelper(); return true; } // Defines a test. // // The first parameter is the name of the test case, and the second // parameter is the name of the test within the test case. // // The convention is to end the test case name with "Test". For // example, a test case for the Foo class can be named FooTest. // // The user should put his test code between braces after using this // macro. Example: // // TEST(FooTest, InitializesCorrectly) { // Foo foo; // EXPECT_TRUE(foo.StatusIsOK()); // } // Note that we call GetTestTypeId() instead of GetTypeId< // ::testing::Test>() here to get the type ID of testing::Test. This // is to work around a suspected linker bug when using Google Test as // a framework on Mac OS X. The bug causes GetTypeId< // ::testing::Test>() to return different values depending on whether // the call is from the Google Test framework itself or from user test // code. GetTestTypeId() is guaranteed to always return the same // value, as it always calls GetTypeId<>() from the Google Test // framework. #define GTEST_TEST(test_case_name, test_name)\ GTEST_TEST_(test_case_name, test_name, \ ::testing::Test, ::testing::internal::GetTestTypeId()) // Define this macro to 1 to omit the definition of TEST(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_TEST # define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) #endif // Defines a test that uses a test fixture. // // The first parameter is the name of the test fixture class, which // also doubles as the test case name. The second parameter is the // name of the test within the test case. // // A test fixture class must be declared earlier. The user should put // his test code between braces after using this macro. Example: // // class FooTest : public testing::Test { // protected: // virtual void SetUp() { b_.AddElement(3); } // // Foo a_; // Foo b_; // }; // // TEST_F(FooTest, InitializesCorrectly) { // EXPECT_TRUE(a_.StatusIsOK()); // } // // TEST_F(FooTest, ReturnsElementCountCorrectly) { // EXPECT_EQ(0, a_.size()); // EXPECT_EQ(1, b_.size()); // } #define TEST_F(test_fixture, test_name)\ GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId()) // Use this macro in main() to run all tests. It returns 0 if all // tests are successful, or 1 otherwise. // // RUN_ALL_TESTS() should be invoked after the command line has been // parsed by InitGoogleTest(). #define RUN_ALL_TESTS()\ (::testing::UnitTest::GetInstance()->Run()) } // namespace testing #endif // GTEST_INCLUDE_GTEST_GTEST_H_ jellyfish-1.1.11/unit_tests/gtest/src/0000755015303500042660000000000012200542320014702 500000000000000jellyfish-1.1.11/unit_tests/gtest/src/gtest-port.cc0000644015303500042660000006151112151455365017266 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/internal/gtest-port.h" #include #include #include #include #if GTEST_OS_WINDOWS_MOBILE # include // For TerminateProcess() #elif GTEST_OS_WINDOWS # include # include #else # include #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_MAC # include # include # include #endif // GTEST_OS_MAC #include "gtest/gtest-spi.h" #include "gtest/gtest-message.h" #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #ifdef __ICC // Disable explicit warning on Intel compiler #pragma warning disable 2304 #endif namespace testing { namespace internal { #if defined(_MSC_VER) || defined(__BORLANDC__) // MSVC and C++Builder do not provide a definition of STDERR_FILENO. const int kStdOutFileno = 1; const int kStdErrFileno = 2; #else const int kStdOutFileno = STDOUT_FILENO; const int kStdErrFileno = STDERR_FILENO; #endif // _MSC_VER #if GTEST_OS_MAC // Returns the number of threads running in the process, or 0 to indicate that // we cannot detect it. size_t GetThreadCount() { const task_t task = mach_task_self(); mach_msg_type_number_t thread_count; thread_act_array_t thread_list; const kern_return_t status = task_threads(task, &thread_list, &thread_count); if (status == KERN_SUCCESS) { // task_threads allocates resources in thread_list and we need to free them // to avoid leaks. vm_deallocate(task, reinterpret_cast(thread_list), sizeof(thread_t) * thread_count); return static_cast(thread_count); } else { return 0; } } #else size_t GetThreadCount() { // There's no portable way to detect the number of threads, so we just // return 0 to indicate that we cannot detect it. return 0; } #endif // GTEST_OS_MAC #if GTEST_USES_POSIX_RE // Implements RE. Currently only needed for death tests. RE::~RE() { if (is_valid_) { // regfree'ing an invalid regex might crash because the content // of the regex is undefined. Since the regex's are essentially // the same, one cannot be valid (or invalid) without the other // being so too. regfree(&partial_regex_); regfree(&full_regex_); } free(const_cast(pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.full_regex_, str, 1, &match, 0) == 0; } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; regmatch_t match; return regexec(&re.partial_regex_, str, 1, &match, 0) == 0; } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = posix::StrDup(regex); // Reserves enough bytes to hold the regular expression used for a // full match. const size_t full_regex_len = strlen(regex) + 10; char* const full_pattern = new char[full_regex_len]; snprintf(full_pattern, full_regex_len, "^(%s)$", regex); is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0; // We want to call regcomp(&partial_regex_, ...) even if the // previous expression returns false. Otherwise partial_regex_ may // not be properly initialized can may cause trouble when it's // freed. // // Some implementation of POSIX regex (e.g. on at least some // versions of Cygwin) doesn't accept the empty string as a valid // regex. We change it to an equivalent form "()" to be safe. if (is_valid_) { const char* const partial_regex = (*regex == '\0') ? "()" : regex; is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0; } EXPECT_TRUE(is_valid_) << "Regular expression \"" << regex << "\" is not a valid POSIX Extended regular expression."; delete[] full_pattern; } #elif GTEST_USES_SIMPLE_RE // Returns true iff ch appears anywhere in str (excluding the // terminating '\0' character). bool IsInSet(char ch, const char* str) { return ch != '\0' && strchr(str, ch) != NULL; } // Returns true iff ch belongs to the given classification. Unlike // similar functions in , these aren't affected by the // current locale. bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } bool IsAsciiPunct(char ch) { return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~"); } bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } bool IsAsciiWordChar(char ch) { return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9') || ch == '_'; } // Returns true iff "\\c" is a supported escape sequence. bool IsValidEscape(char c) { return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); } // Returns true iff the given atom (specified by escaped and pattern) // matches ch. The result is undefined if the atom is invalid. bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { if (escaped) { // "\\p" where p is pattern_char. switch (pattern_char) { case 'd': return IsAsciiDigit(ch); case 'D': return !IsAsciiDigit(ch); case 'f': return ch == '\f'; case 'n': return ch == '\n'; case 'r': return ch == '\r'; case 's': return IsAsciiWhiteSpace(ch); case 'S': return !IsAsciiWhiteSpace(ch); case 't': return ch == '\t'; case 'v': return ch == '\v'; case 'w': return IsAsciiWordChar(ch); case 'W': return !IsAsciiWordChar(ch); } return IsAsciiPunct(pattern_char) && pattern_char == ch; } return (pattern_char == '.' && ch != '\n') || pattern_char == ch; } // Helper function used by ValidateRegex() to format error messages. String FormatRegexSyntaxError(const char* regex, int index) { return (Message() << "Syntax error at index " << index << " in simple regular expression \"" << regex << "\": ").GetString(); } // Generates non-fatal failures and returns false if regex is invalid; // otherwise returns true. bool ValidateRegex(const char* regex) { if (regex == NULL) { // TODO(wan@google.com): fix the source file location in the // assertion failures to match where the regex is used in user // code. ADD_FAILURE() << "NULL is not a valid simple regular expression."; return false; } bool is_valid = true; // True iff ?, *, or + can follow the previous atom. bool prev_repeatable = false; for (int i = 0; regex[i]; i++) { if (regex[i] == '\\') { // An escape sequence i++; if (regex[i] == '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "'\\' cannot appear at the end."; return false; } if (!IsValidEscape(regex[i])) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1) << "invalid escape sequence \"\\" << regex[i] << "\"."; is_valid = false; } prev_repeatable = true; } else { // Not an escape sequence. const char ch = regex[i]; if (ch == '^' && i > 0) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'^' can only appear at the beginning."; is_valid = false; } else if (ch == '$' && regex[i + 1] != '\0') { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'$' can only appear at the end."; is_valid = false; } else if (IsInSet(ch, "()[]{}|")) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' is unsupported."; is_valid = false; } else if (IsRepeat(ch) && !prev_repeatable) { ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch << "' can only follow a repeatable token."; is_valid = false; } prev_repeatable = !IsInSet(ch, "^$?*+"); } } return is_valid; } // Matches a repeated regex atom followed by a valid simple regular // expression. The regex atom is defined as c if escaped is false, // or \c otherwise. repeat is the repetition meta character (?, *, // or +). The behavior is undefined if str contains too many // characters to be indexable by size_t, in which case the test will // probably time out anyway. We are fine with this limitation as // std::string has it too. bool MatchRepetitionAndRegexAtHead( bool escaped, char c, char repeat, const char* regex, const char* str) { const size_t min_count = (repeat == '+') ? 1 : 0; const size_t max_count = (repeat == '?') ? 1 : static_cast(-1) - 1; // We cannot call numeric_limits::max() as it conflicts with the // max() macro on Windows. for (size_t i = 0; i <= max_count; ++i) { // We know that the atom matches each of the first i characters in str. if (i >= min_count && MatchRegexAtHead(regex, str + i)) { // We have enough matches at the head, and the tail matches too. // Since we only care about *whether* the pattern matches str // (as opposed to *how* it matches), there is no need to find a // greedy match. return true; } if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) return false; } return false; } // Returns true iff regex matches a prefix of str. regex must be a // valid simple regular expression and not start with "^", or the // result is undefined. bool MatchRegexAtHead(const char* regex, const char* str) { if (*regex == '\0') // An empty regex matches a prefix of anything. return true; // "$" only matches the end of a string. Note that regex being // valid guarantees that there's nothing after "$" in it. if (*regex == '$') return *str == '\0'; // Is the first thing in regex an escape sequence? const bool escaped = *regex == '\\'; if (escaped) ++regex; if (IsRepeat(regex[1])) { // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so // here's an indirect recursion. It terminates as the regex gets // shorter in each recursion. return MatchRepetitionAndRegexAtHead( escaped, regex[0], regex[1], regex + 2, str); } else { // regex isn't empty, isn't "$", and doesn't start with a // repetition. We match the first atom of regex with the first // character of str and recurse. return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && MatchRegexAtHead(regex + 1, str + 1); } } // Returns true iff regex matches any substring of str. regex must be // a valid simple regular expression, or the result is undefined. // // The algorithm is recursive, but the recursion depth doesn't exceed // the regex length, so we won't need to worry about running out of // stack space normally. In rare cases the time complexity can be // exponential with respect to the regex length + the string length, // but usually it's must faster (often close to linear). bool MatchRegexAnywhere(const char* regex, const char* str) { if (regex == NULL || str == NULL) return false; if (*regex == '^') return MatchRegexAtHead(regex + 1, str); // A successful match can be anywhere in str. do { if (MatchRegexAtHead(regex, str)) return true; } while (*str++ != '\0'); return false; } // Implements the RE class. RE::~RE() { free(const_cast(pattern_)); free(const_cast(full_pattern_)); } // Returns true iff regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); } // Returns true iff regular expression re matches a substring of str // (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); } // Initializes an RE from its string representation. void RE::Init(const char* regex) { pattern_ = full_pattern_ = NULL; if (regex != NULL) { pattern_ = posix::StrDup(regex); } is_valid_ = ValidateRegex(regex); if (!is_valid_) { // No need to calculate the full pattern when the regex is invalid. return; } const size_t len = strlen(regex); // Reserves enough bytes to hold the regular expression used for a // full match: we need space to prepend a '^', append a '$', and // terminate the string with '\0'. char* buffer = static_cast(malloc(len + 3)); full_pattern_ = buffer; if (*regex != '^') *buffer++ = '^'; // Makes sure full_pattern_ starts with '^'. // We don't use snprintf or strncpy, as they trigger a warning when // compiled with VC++ 8.0. memcpy(buffer, regex, len); buffer += len; if (len == 0 || regex[len - 1] != '$') *buffer++ = '$'; // Makes sure full_pattern_ ends with '$'. *buffer = '\0'; } #endif // GTEST_USES_POSIX_RE const char kUnknownFile[] = "unknown file"; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { const char* const file_name = file == NULL ? kUnknownFile : file; if (line < 0) { return String::Format("%s:", file_name).c_str(); } #ifdef _MSC_VER return String::Format("%s(%d):", file_name, line).c_str(); #else return String::Format("%s:%d:", file_name, line).c_str(); #endif // _MSC_VER } // Formats a file location for compiler-independent XML output. // Although this function is not platform dependent, we put it next to // FormatFileLocation in order to contrast the two functions. // Note that FormatCompilerIndependentFileLocation() does NOT append colon // to the file location it produces, unlike FormatFileLocation(). GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( const char* file, int line) { const char* const file_name = file == NULL ? kUnknownFile : file; if (line < 0) return file_name; else return String::Format("%s:%d", file_name, line).c_str(); } GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) : severity_(severity) { const char* const marker = severity == GTEST_INFO ? "[ INFO ]" : severity == GTEST_WARNING ? "[WARNING]" : severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; GetStream() << ::std::endl << marker << " " << FormatFileLocation(file, line).c_str() << ": "; } // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. GTestLog::~GTestLog() { GetStream() << ::std::endl; if (severity_ == GTEST_FATAL) { fflush(stderr); posix::Abort(); } } // Disable Microsoft deprecation warnings for POSIX functions called from // this class (creat, dup, dup2, and close) #ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4996) #endif // _MSC_VER #if GTEST_HAS_STREAM_REDIRECTION // Object that captures an output stream (stdout/stderr). class CapturedStream { public: // The ctor redirects the stream to a temporary file. CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { # if GTEST_OS_WINDOWS char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); const UINT success = ::GetTempFileNameA(temp_dir_path, "gtest_redir", 0, // Generate unique file name. temp_file_path); GTEST_CHECK_(success != 0) << "Unable to create a temporary file in " << temp_dir_path; const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " << temp_file_path; filename_ = temp_file_path; # else // There's no guarantee that a test has write access to the // current directory, so we create the temporary file in the /tmp // directory instead. char name_template[] = "/tmp/captured_stream.XXXXXX"; const int captured_fd = mkstemp(name_template); filename_ = name_template; # endif // GTEST_OS_WINDOWS fflush(NULL); dup2(captured_fd, fd_); close(captured_fd); } ~CapturedStream() { remove(filename_.c_str()); } String GetCapturedString() { if (uncaptured_fd_ != -1) { // Restores the original stream. fflush(NULL); dup2(uncaptured_fd_, fd_); close(uncaptured_fd_); uncaptured_fd_ = -1; } FILE* const file = posix::FOpen(filename_.c_str(), "r"); const String content = ReadEntireFile(file); posix::FClose(file); return content; } private: // Reads the entire content of a file as a String. static String ReadEntireFile(FILE* file); // Returns the size (in bytes) of a file. static size_t GetFileSize(FILE* file); const int fd_; // A stream to capture. int uncaptured_fd_; // Name of the temporary file holding the stderr output. ::std::string filename_; GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); }; // Returns the size (in bytes) of a file. size_t CapturedStream::GetFileSize(FILE* file) { fseek(file, 0, SEEK_END); return static_cast(ftell(file)); } // Reads the entire content of a file as a string. String CapturedStream::ReadEntireFile(FILE* file) { const size_t file_size = GetFileSize(file); char* const buffer = new char[file_size]; size_t bytes_last_read = 0; // # of bytes read in the last fread() size_t bytes_read = 0; // # of bytes read so far fseek(file, 0, SEEK_SET); // Keeps reading the file until we cannot read further or the // pre-determined file size is reached. do { bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); bytes_read += bytes_last_read; } while (bytes_last_read > 0 && bytes_read < file_size); const String content(buffer, bytes_read); delete[] buffer; return content; } # ifdef _MSC_VER # pragma warning(pop) # endif // _MSC_VER static CapturedStream* g_captured_stderr = NULL; static CapturedStream* g_captured_stdout = NULL; // Starts capturing an output stream (stdout/stderr). void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { if (*stream != NULL) { GTEST_LOG_(FATAL) << "Only one " << stream_name << " capturer can exist at a time."; } *stream = new CapturedStream(fd); } // Stops capturing the output stream and returns the captured string. String GetCapturedStream(CapturedStream** captured_stream) { const String content = (*captured_stream)->GetCapturedString(); delete *captured_stream; *captured_stream = NULL; return content; } // Starts capturing stdout. void CaptureStdout() { CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); } // Starts capturing stderr. void CaptureStderr() { CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr); } // Stops capturing stdout and returns the captured string. String GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); } // Stops capturing stderr and returns the captured string. String GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } #endif // GTEST_HAS_STREAM_REDIRECTION #if GTEST_HAS_DEATH_TEST // A copy of all command line arguments. Set by InitGoogleTest(). ::std::vector g_argvs; // Returns the command line as a vector of strings. const ::std::vector& GetArgvs() { return g_argvs; } #endif // GTEST_HAS_DEATH_TEST #if GTEST_OS_WINDOWS_MOBILE namespace posix { void Abort() { DebugBreak(); TerminateProcess(GetCurrentProcess(), 1); } } // namespace posix #endif // GTEST_OS_WINDOWS_MOBILE // Returns the name of the environment variable corresponding to the // given flag. For example, FlagToEnvVar("foo") will return // "GTEST_FOO" in the open-source version. static String FlagToEnvVar(const char* flag) { const String full_flag = (Message() << GTEST_FLAG_PREFIX_ << flag).GetString(); Message env_var; for (size_t i = 0; i != full_flag.length(); i++) { env_var << ToUpper(full_flag.c_str()[i]); } return env_var.GetString(); } // Parses 'str' for a 32-bit signed integer. If successful, writes // the result to *value and returns true; otherwise leaves *value // unchanged and returns false. bool ParseInt32(const Message& src_text, const char* str, Int32* value) { // Parses the environment variable as a decimal integer. char* end = NULL; const long long_value = strtol(str, &end, 10); // NOLINT // Has strtol() consumed all characters in the string? if (*end != '\0') { // No - an invalid character was encountered. Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value \"" << str << "\".\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } // Is the parsed value in the range of an Int32? const Int32 result = static_cast(long_value); if (long_value == LONG_MAX || long_value == LONG_MIN || // The parsed value overflows as a long. (strtol() returns // LONG_MAX or LONG_MIN when the input overflows.) result != long_value // The parsed value overflows as an Int32. ) { Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" << " has value " << str << ", which overflows.\n"; printf("%s", msg.GetString().c_str()); fflush(stdout); return false; } *value = result; return true; } // Reads and returns the Boolean environment variable corresponding to // the given flag; if it's not set, returns default_value. // // The value is considered true iff it's not "0". bool BoolFromGTestEnv(const char* flag, bool default_value) { const String env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); return string_value == NULL ? default_value : strcmp(string_value, "0") != 0; } // Reads and returns a 32-bit integer stored in the environment // variable corresponding to the given flag; if it isn't set or // doesn't represent a valid 32-bit integer, returns default_value. Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { const String env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); if (string_value == NULL) { // The environment variable is not set. return default_value; } Int32 result = default_value; if (!ParseInt32(Message() << "Environment variable " << env_var, string_value, &result)) { printf("The default value %s is used.\n", (Message() << default_value).GetString().c_str()); fflush(stdout); return default_value; } return result; } // Reads and returns the string environment variable corresponding to // the given flag; if it's not set, returns default_value. const char* StringFromGTestEnv(const char* flag, const char* default_value) { const String env_var = FlagToEnvVar(flag); const char* const value = posix::GetEnv(env_var.c_str()); return value == NULL ? default_value : value; } } // namespace internal } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-all.cc0000644015303500042660000000416112151455365017050 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: mheule@google.com (Markus Heule) // // Google C++ Testing Framework (Google Test) // // Sometimes it's desirable to build Google Test by compiling a single file. // This file serves this purpose. // This line ensures that gtest.h can be compiled on its own, even // when it's fused. #include "gtest/gtest.h" // The following lines pull in the real gtest *.cc files. #include "src/gtest.cc" #include "src/gtest-death-test.cc" #include "src/gtest-filepath.cc" #include "src/gtest-port.cc" #include "src/gtest-printers.cc" #include "src/gtest-test-part.cc" #include "src/gtest-typed-test.cc" jellyfish-1.1.11/unit_tests/gtest/src/gtest-death-test.cc0000644015303500042660000013251512151455365020347 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) // // This file implements death tests. #include "gtest/gtest-death-test.h" #include "gtest/internal/gtest-port.h" #if GTEST_HAS_DEATH_TEST # if GTEST_OS_MAC # include # endif // GTEST_OS_MAC # include # include # include # include # if GTEST_OS_WINDOWS # include # else # include # include # endif // GTEST_OS_WINDOWS #endif // GTEST_HAS_DEATH_TEST #include "gtest/gtest-message.h" #include "gtest/internal/gtest-string.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { // Constants. // The default death test style. static const char kDefaultDeathTestStyle[] = "fast"; GTEST_DEFINE_string_( death_test_style, internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), "Indicates how to run a death test in a forked child process: " "\"threadsafe\" (child process re-executes the test binary " "from the beginning, running only the specific death test) or " "\"fast\" (child process runs the death test immediately " "after forking)."); GTEST_DEFINE_bool_( death_test_use_fork, internal::BoolFromGTestEnv("death_test_use_fork", false), "Instructs to use fork()/_exit() instead of clone() in death tests. " "Ignored and always uses fork() on POSIX systems where clone() is not " "implemented. Useful when running under valgrind or similar tools if " "those do not support clone(). Valgrind 3.3.1 will just fail if " "it sees an unsupported combination of clone() flags. " "It is not recommended to use this flag w/o valgrind though it will " "work in 99% of the cases. Once valgrind is fixed, this flag will " "most likely be removed."); namespace internal { GTEST_DEFINE_string_( internal_run_death_test, "", "Indicates the file, line number, temporal index of " "the single death test to run, and a file descriptor to " "which a success code may be sent, all separated by " "colons. This flag is specified if and only if the current " "process is a sub-process launched for running a thread-safe " "death test. FOR INTERNAL USE ONLY."); } // namespace internal #if GTEST_HAS_DEATH_TEST // ExitedWithCode constructor. ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { } // ExitedWithCode function-call operator. bool ExitedWithCode::operator()(int exit_status) const { # if GTEST_OS_WINDOWS return exit_status == exit_code_; # else return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; # endif // GTEST_OS_WINDOWS } # if !GTEST_OS_WINDOWS // KilledBySignal constructor. KilledBySignal::KilledBySignal(int signum) : signum_(signum) { } // KilledBySignal function-call operator. bool KilledBySignal::operator()(int exit_status) const { return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; } # endif // !GTEST_OS_WINDOWS namespace internal { // Utilities needed for death tests. // Generates a textual description of a given exit code, in the format // specified by wait(2). static String ExitSummary(int exit_code) { Message m; # if GTEST_OS_WINDOWS m << "Exited with exit status " << exit_code; # else if (WIFEXITED(exit_code)) { m << "Exited with exit status " << WEXITSTATUS(exit_code); } else if (WIFSIGNALED(exit_code)) { m << "Terminated by signal " << WTERMSIG(exit_code); } # ifdef WCOREDUMP if (WCOREDUMP(exit_code)) { m << " (core dumped)"; } # endif # endif // GTEST_OS_WINDOWS return m.GetString(); } // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. bool ExitedUnsuccessfully(int exit_status) { return !ExitedWithCode(0)(exit_status); } # if !GTEST_OS_WINDOWS // Generates a textual failure message when a death test finds more than // one thread running, or cannot determine the number of threads, prior // to executing the given statement. It is the responsibility of the // caller not to pass a thread_count of 1. static String DeathTestThreadWarning(size_t thread_count) { Message msg; msg << "Death tests use fork(), which is unsafe particularly" << " in a threaded context. For this test, " << GTEST_NAME_ << " "; if (thread_count == 0) msg << "couldn't detect the number of threads."; else msg << "detected " << thread_count << " threads."; return msg.GetString(); } # endif // !GTEST_OS_WINDOWS // Flag characters for reporting a death test that did not die. static const char kDeathTestLived = 'L'; static const char kDeathTestReturned = 'R'; static const char kDeathTestThrew = 'T'; static const char kDeathTestInternalError = 'I'; // An enumeration describing all of the possible ways that a death test can // conclude. DIED means that the process died while executing the test // code; LIVED means that process lived beyond the end of the test code; // RETURNED means that the test statement attempted to execute a return // statement, which is not allowed; THREW means that the test statement // returned control by throwing an exception. IN_PROGRESS means the test // has not yet concluded. // TODO(vladl@google.com): Unify names and possibly values for // AbortReason, DeathTestOutcome, and flag characters above. enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; // Routine for aborting the program which is safe to call from an // exec-style death test child process, in which case the error // message is propagated back to the parent process. Otherwise, the // message is simply printed to stderr. In either case, the program // then exits with status 1. void DeathTestAbort(const String& message) { // On a POSIX system, this function may be called from a threadsafe-style // death test child process, which operates on a very small stack. Use // the heap for any additional non-minuscule memory requirements. const InternalRunDeathTestFlag* const flag = GetUnitTestImpl()->internal_run_death_test_flag(); if (flag != NULL) { FILE* parent = posix::FDOpen(flag->write_fd(), "w"); fputc(kDeathTestInternalError, parent); fprintf(parent, "%s", message.c_str()); fflush(parent); _exit(1); } else { fprintf(stderr, "%s", message.c_str()); fflush(stderr); posix::Abort(); } } // A replacement for CHECK that calls DeathTestAbort if the assertion // fails. # define GTEST_DEATH_TEST_CHECK_(expression) \ do { \ if (!::testing::internal::IsTrue(expression)) { \ DeathTestAbort(::testing::internal::String::Format( \ "CHECK failed: File %s, line %d: %s", \ __FILE__, __LINE__, #expression)); \ } \ } while (::testing::internal::AlwaysFalse()) // This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for // evaluating any system call that fulfills two conditions: it must return // -1 on failure, and set errno to EINTR when it is interrupted and // should be tried again. The macro expands to a loop that repeatedly // evaluates the expression as long as it evaluates to -1 and sets // errno to EINTR. If the expression evaluates to -1 but errno is // something other than EINTR, DeathTestAbort is called. # define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ do { \ int gtest_retval; \ do { \ gtest_retval = (expression); \ } while (gtest_retval == -1 && errno == EINTR); \ if (gtest_retval == -1) { \ DeathTestAbort(::testing::internal::String::Format( \ "CHECK failed: File %s, line %d: %s != -1", \ __FILE__, __LINE__, #expression)); \ } \ } while (::testing::internal::AlwaysFalse()) // Returns the message describing the last system error in errno. String GetLastErrnoDescription() { return String(errno == 0 ? "" : posix::StrError(errno)); } // This is called from a death test parent process to read a failure // message from the death test child process and log it with the FATAL // severity. On Windows, the message is read from a pipe handle. On other // platforms, it is read from a file descriptor. static void FailFromInternalError(int fd) { Message error; char buffer[256]; int num_read; do { while ((num_read = posix::Read(fd, buffer, 255)) > 0) { buffer[num_read] = '\0'; error << buffer; } } while (num_read == -1 && errno == EINTR); if (num_read == 0) { GTEST_LOG_(FATAL) << error.GetString(); } else { const int last_error = errno; GTEST_LOG_(FATAL) << "Error while reading death test internal: " << GetLastErrnoDescription() << " [" << last_error << "]"; } } // Death test constructor. Increments the running death test count // for the current test. DeathTest::DeathTest() { TestInfo* const info = GetUnitTestImpl()->current_test_info(); if (info == NULL) { DeathTestAbort("Cannot run a death test outside of a TEST or " "TEST_F construct"); } } // Creates and returns a death test by dispatching to the current // death test factory. bool DeathTest::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { return GetUnitTestImpl()->death_test_factory()->Create( statement, regex, file, line, test); } const char* DeathTest::LastMessage() { return last_death_test_message_.c_str(); } void DeathTest::set_last_death_test_message(const String& message) { last_death_test_message_ = message; } String DeathTest::last_death_test_message_; // Provides cross platform implementation for some death functionality. class DeathTestImpl : public DeathTest { protected: DeathTestImpl(const char* a_statement, const RE* a_regex) : statement_(a_statement), regex_(a_regex), spawned_(false), status_(-1), outcome_(IN_PROGRESS), read_fd_(-1), write_fd_(-1) {} // read_fd_ is expected to be closed and cleared by a derived class. ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } void Abort(AbortReason reason); virtual bool Passed(bool status_ok); const char* statement() const { return statement_; } const RE* regex() const { return regex_; } bool spawned() const { return spawned_; } void set_spawned(bool is_spawned) { spawned_ = is_spawned; } int status() const { return status_; } void set_status(int a_status) { status_ = a_status; } DeathTestOutcome outcome() const { return outcome_; } void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; } int read_fd() const { return read_fd_; } void set_read_fd(int fd) { read_fd_ = fd; } int write_fd() const { return write_fd_; } void set_write_fd(int fd) { write_fd_ = fd; } // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void ReadAndInterpretStatusByte(); private: // The textual content of the code this object is testing. This class // doesn't own this string and should not attempt to delete it. const char* const statement_; // The regular expression which test output must match. DeathTestImpl // doesn't own this object and should not attempt to delete it. const RE* const regex_; // True if the death test child process has been successfully spawned. bool spawned_; // The exit status of the child process. int status_; // How the death test concluded. DeathTestOutcome outcome_; // Descriptor to the read end of the pipe to the child process. It is // always -1 in the child process. The child keeps its write end of the // pipe in write_fd_. int read_fd_; // Descriptor to the child's write end of the pipe to the parent process. // It is always -1 in the parent process. The parent keeps its end of the // pipe in read_fd_. int write_fd_; }; // Called in the parent process only. Reads the result code of the death // test child process via a pipe, interprets it to set the outcome_ // member, and closes read_fd_. Outputs diagnostics and terminates in // case of unexpected codes. void DeathTestImpl::ReadAndInterpretStatusByte() { char flag; int bytes_read; // The read() here blocks until data is available (signifying the // failure of the death test) or until the pipe is closed (signifying // its success), so it's okay to call this in the parent before // the child process has exited. do { bytes_read = posix::Read(read_fd(), &flag, 1); } while (bytes_read == -1 && errno == EINTR); if (bytes_read == 0) { set_outcome(DIED); } else if (bytes_read == 1) { switch (flag) { case kDeathTestReturned: set_outcome(RETURNED); break; case kDeathTestThrew: set_outcome(THREW); break; case kDeathTestLived: set_outcome(LIVED); break; case kDeathTestInternalError: FailFromInternalError(read_fd()); // Does not return. break; default: GTEST_LOG_(FATAL) << "Death test child process reported " << "unexpected status byte (" << static_cast(flag) << ")"; } } else { GTEST_LOG_(FATAL) << "Read from death test child process failed: " << GetLastErrnoDescription(); } GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd())); set_read_fd(-1); } // Signals that the death test code which should have exited, didn't. // Should be called only in a death test child process. // Writes a status byte to the child's status file descriptor, then // calls _exit(1). void DeathTestImpl::Abort(AbortReason reason) { // The parent process considers the death test to be a failure if // it finds any data in our pipe. So, here we write a single flag byte // to the pipe, then exit. const char status_ch = reason == TEST_DID_NOT_DIE ? kDeathTestLived : reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); // We are leaking the descriptor here because on some platforms (i.e., // when built as Windows DLL), destructors of global objects will still // run after calling _exit(). On such systems, write_fd_ will be // indirectly closed from the destructor of UnitTestImpl, causing double // close if it is also closed here. On debug configurations, double close // may assert. As there are no in-process buffers to flush here, we are // relying on the OS to close the descriptor after the process terminates // when the destructors are not run. _exit(1); // Exits w/o any normal exit hooks (we were supposed to crash) } // Returns an indented copy of stderr output for a death test. // This makes distinguishing death test output lines from regular log lines // much easier. static ::std::string FormatDeathTestOutput(const ::std::string& output) { ::std::string ret; for (size_t at = 0; ; ) { const size_t line_end = output.find('\n', at); ret += "[ DEATH ] "; if (line_end == ::std::string::npos) { ret += output.substr(at); break; } ret += output.substr(at, line_end + 1 - at); at = line_end + 1; } return ret; } // Assesses the success or failure of a death test, using both private // members which have previously been set, and one argument: // // Private data members: // outcome: An enumeration describing how the death test // concluded: DIED, LIVED, THREW, or RETURNED. The death test // fails in the latter three cases. // status: The exit status of the child process. On *nix, it is in the // in the format specified by wait(2). On Windows, this is the // value supplied to the ExitProcess() API or a numeric code // of the exception that terminated the program. // regex: A regular expression object to be applied to // the test's captured standard error output; the death test // fails if it does not match. // // Argument: // status_ok: true if exit_status is acceptable in the context of // this particular death test, which fails if it is false // // Returns true iff all of the above conditions are met. Otherwise, the // first failing condition, in the order given above, is the one that is // reported. Also sets the last death test message string. bool DeathTestImpl::Passed(bool status_ok) { if (!spawned()) return false; const String error_message = GetCapturedStderr(); bool success = false; Message buffer; buffer << "Death test: " << statement() << "\n"; switch (outcome()) { case LIVED: buffer << " Result: failed to die.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case THREW: buffer << " Result: threw an exception.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case RETURNED: buffer << " Result: illegal return in test statement.\n" << " Error msg:\n" << FormatDeathTestOutput(error_message); break; case DIED: if (status_ok) { const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); if (matched) { success = true; } else { buffer << " Result: died but not with expected error.\n" << " Expected: " << regex()->pattern() << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } } else { buffer << " Result: died but not with expected exit code:\n" << " " << ExitSummary(status()) << "\n" << "Actual msg:\n" << FormatDeathTestOutput(error_message); } break; case IN_PROGRESS: default: GTEST_LOG_(FATAL) << "DeathTest::Passed somehow called before conclusion of test"; } DeathTest::set_last_death_test_message(buffer.GetString()); return success; } # if GTEST_OS_WINDOWS // WindowsDeathTest implements death tests on Windows. Due to the // specifics of starting new processes on Windows, death tests there are // always threadsafe, and Google Test considers the // --gtest_death_test_style=fast setting to be equivalent to // --gtest_death_test_style=threadsafe there. // // A few implementation notes: Like the Linux version, the Windows // implementation uses pipes for child-to-parent communication. But due to // the specifics of pipes on Windows, some extra steps are required: // // 1. The parent creates a communication pipe and stores handles to both // ends of it. // 2. The parent starts the child and provides it with the information // necessary to acquire the handle to the write end of the pipe. // 3. The child acquires the write end of the pipe and signals the parent // using a Windows event. // 4. Now the parent can release the write end of the pipe on its side. If // this is done before step 3, the object's reference count goes down to // 0 and it is destroyed, preventing the child from acquiring it. The // parent now has to release it, or read operations on the read end of // the pipe will not return when the child terminates. // 5. The parent reads child's output through the pipe (outcome code and // any possible error messages) from the pipe, and its stderr and then // determines whether to fail the test. // // Note: to distinguish Win32 API calls from the local method and function // calls, the former are explicitly resolved in the global namespace. // class WindowsDeathTest : public DeathTestImpl { public: WindowsDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} // All of these virtual functions are inherited from DeathTest. virtual int Wait(); virtual TestRole AssumeRole(); private: // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; // Handle to the write end of the pipe to the child process. AutoHandle write_handle_; // Child process handle. AutoHandle child_handle_; // Event the child process uses to signal the parent that it has // acquired the handle to the write end of the pipe. After seeing this // event the parent can release its own handles to make sure its // ReadFile() calls return when the child terminates. AutoHandle event_handle_; }; // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int WindowsDeathTest::Wait() { if (!spawned()) return 0; // Wait until the child either signals that it has acquired the write end // of the pipe or it dies. const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; switch (::WaitForMultipleObjects(2, wait_handles, FALSE, // Waits for any of the handles. INFINITE)) { case WAIT_OBJECT_0: case WAIT_OBJECT_0 + 1: break; default: GTEST_DEATH_TEST_CHECK_(false); // Should not get here. } // The child has acquired the write end of the pipe or exited. // We release the handle on our side and continue. write_handle_.Reset(); event_handle_.Reset(); ReadAndInterpretStatusByte(); // Waits for the child process to exit if it haven't already. This // returns immediately if the child has already exited, regardless of // whether previous calls to WaitForMultipleObjects synchronized on this // handle or not. GTEST_DEATH_TEST_CHECK_( WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), INFINITE)); DWORD status_code; GTEST_DEATH_TEST_CHECK_( ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); child_handle_.Reset(); set_status(static_cast(status_code)); return status(); } // The AssumeRole process for a Windows death test. It creates a child // process with the same executable as the current process to run the // death test. The child process is given the --gtest_filter and // --gtest_internal_run_death_test flags such that it knows to run the // current death test only. DeathTest::TestRole WindowsDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { // ParseInternalRunDeathTestFlag() has performed all the necessary // processing. set_write_fd(flag->write_fd()); return EXECUTE_TEST; } // WindowsDeathTest uses an anonymous pipe to communicate results of // a death test. SECURITY_ATTRIBUTES handles_are_inheritable = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; HANDLE read_handle, write_handle; GTEST_DEATH_TEST_CHECK_( ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, 0) // Default buffer size. != FALSE); set_read_fd(::_open_osfhandle(reinterpret_cast(read_handle), O_RDONLY)); write_handle_.Reset(write_handle); event_handle_.Reset(::CreateEvent( &handles_are_inheritable, TRUE, // The event will automatically reset to non-signaled state. FALSE, // The initial state is non-signalled. NULL)); // The even is unnamed. GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); const String filter_flag = String::Format("--%s%s=%s.%s", GTEST_FLAG_PREFIX_, kFilterFlag, info->test_case_name(), info->name()); const String internal_flag = String::Format( "--%s%s=%s|%d|%d|%u|%Iu|%Iu", GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag, file_, line_, death_test_index, static_cast(::GetCurrentProcessId()), // size_t has the same with as pointers on both 32-bit and 64-bit // Windows platforms. // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. reinterpret_cast(write_handle), reinterpret_cast(event_handle_.Get())); char executable_path[_MAX_PATH + 1]; // NOLINT GTEST_DEATH_TEST_CHECK_( _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, executable_path, _MAX_PATH)); String command_line = String::Format("%s %s \"%s\"", ::GetCommandLineA(), filter_flag.c_str(), internal_flag.c_str()); DeathTest::set_last_death_test_message(""); CaptureStderr(); // Flush the log buffers since the log streams are shared with the child. FlushInfoLog(); // The child process will share the standard handles with the parent. STARTUPINFOA startup_info; memset(&startup_info, 0, sizeof(STARTUPINFO)); startup_info.dwFlags = STARTF_USESTDHANDLES; startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE); startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); PROCESS_INFORMATION process_info; GTEST_DEATH_TEST_CHECK_(::CreateProcessA( executable_path, const_cast(command_line.c_str()), NULL, // Retuned process handle is not inheritable. NULL, // Retuned thread handle is not inheritable. TRUE, // Child inherits all inheritable handles (for write_handle_). 0x0, // Default creation flags. NULL, // Inherit the parent's environment. UnitTest::GetInstance()->original_working_dir(), &startup_info, &process_info) != FALSE); child_handle_.Reset(process_info.hProcess); ::CloseHandle(process_info.hThread); set_spawned(true); return OVERSEE_TEST; } # else // We are not on Windows. // ForkingDeathTest provides implementations for most of the abstract // methods of the DeathTest interface. Only the AssumeRole method is // left undefined. class ForkingDeathTest : public DeathTestImpl { public: ForkingDeathTest(const char* statement, const RE* regex); // All of these virtual functions are inherited from DeathTest. virtual int Wait(); protected: void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } private: // PID of child process during death test; 0 in the child process itself. pid_t child_pid_; }; // Constructs a ForkingDeathTest. ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) : DeathTestImpl(a_statement, a_regex), child_pid_(-1) {} // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int ForkingDeathTest::Wait() { if (!spawned()) return 0; ReadAndInterpretStatusByte(); int status_value; GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0)); set_status(status_value); return status_value; } // A concrete death test class that forks, then immediately runs the test // in the child process. class NoExecDeathTest : public ForkingDeathTest { public: NoExecDeathTest(const char* a_statement, const RE* a_regex) : ForkingDeathTest(a_statement, a_regex) { } virtual TestRole AssumeRole(); }; // The AssumeRole process for a fork-and-run death test. It implements a // straightforward fork, with a simple pipe to transmit the status byte. DeathTest::TestRole NoExecDeathTest::AssumeRole() { const size_t thread_count = GetThreadCount(); if (thread_count != 1) { GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count); } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); DeathTest::set_last_death_test_message(""); CaptureStderr(); // When we fork the process below, the log file buffers are copied, but the // file descriptors are shared. We flush all log files here so that closing // the file descriptors in the child process doesn't throw off the // synchronization between descriptors and buffers in the parent process. // This is as close to the fork as possible to avoid a race condition in case // there are multiple threads running before the death test, and another // thread writes to the log file. FlushInfoLog(); const pid_t child_pid = fork(); GTEST_DEATH_TEST_CHECK_(child_pid != -1); set_child_pid(child_pid); if (child_pid == 0) { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0])); set_write_fd(pipe_fd[1]); // Redirects all logging to stderr in the child process to prevent // concurrent writes to the log files. We capture stderr in the parent // process and append the child process' output to a log. LogToStderr(); // Event forwarding to the listeners of event listener API mush be shut // down in death test subprocesses. GetUnitTestImpl()->listeners()->SuppressEventForwarding(); return EXECUTE_TEST; } else { GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } } // A concrete death test class that forks and re-executes the main // program from the beginning, with command-line flags set that cause // only this specific death test to be run. class ExecDeathTest : public ForkingDeathTest { public: ExecDeathTest(const char* a_statement, const RE* a_regex, const char* file, int line) : ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } virtual TestRole AssumeRole(); private: // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; }; // Utility class for accumulating command-line arguments. class Arguments { public: Arguments() { args_.push_back(NULL); } ~Arguments() { for (std::vector::iterator i = args_.begin(); i != args_.end(); ++i) { free(*i); } } void AddArgument(const char* argument) { args_.insert(args_.end() - 1, posix::StrDup(argument)); } template void AddArguments(const ::std::vector& arguments) { for (typename ::std::vector::const_iterator i = arguments.begin(); i != arguments.end(); ++i) { args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); } } char* const* Argv() { return &args_[0]; } private: std::vector args_; }; // A struct that encompasses the arguments to the child process of a // threadsafe-style death test process. struct ExecDeathTestArgs { char* const* argv; // Command-line arguments for the child's call to exec int close_fd; // File descriptor to close; the read end of a pipe }; # if GTEST_OS_MAC inline char** GetEnviron() { // When Google Test is built as a framework on MacOS X, the environ variable // is unavailable. Apple's documentation (man environ) recommends using // _NSGetEnviron() instead. return *_NSGetEnviron(); } # else // Some POSIX platforms expect you to declare environ. extern "C" makes // it reside in the global namespace. extern "C" char** environ; inline char** GetEnviron() { return environ; } # endif // GTEST_OS_MAC // The main function for a threadsafe-style death test child process. // This function is called in a clone()-ed process and thus must avoid // any potentially unsafe operations like malloc or libc functions. static int ExecDeathTestChildMain(void* child_arg) { ExecDeathTestArgs* const args = static_cast(child_arg); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd)); // We need to execute the test program in the same environment where // it was originally invoked. Therefore we change to the original // working directory first. const char* const original_dir = UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { DeathTestAbort(String::Format("chdir(\"%s\") failed: %s", original_dir, GetLastErrnoDescription().c_str())); return EXIT_FAILURE; } // We can safely call execve() as it's a direct system call. We // cannot use execvp() as it's a libc function and thus potentially // unsafe. Since execve() doesn't search the PATH, the user must // invoke the test program via a valid path that contains at least // one path separator. execve(args->argv[0], args->argv, GetEnviron()); DeathTestAbort(String::Format("execve(%s, ...) in %s failed: %s", args->argv[0], original_dir, GetLastErrnoDescription().c_str())); return EXIT_FAILURE; } // Two utility routines that together determine the direction the stack // grows. // This could be accomplished more elegantly by a single recursive // function, but we want to guard against the unlikely possibility of // a smart compiler optimizing the recursion away. // // GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining // StackLowerThanAddress into StackGrowsDown, which then doesn't give // correct answer. bool StackLowerThanAddress(const void* ptr) GTEST_NO_INLINE_; bool StackLowerThanAddress(const void* ptr) { int dummy; return &dummy < ptr; } bool StackGrowsDown() { int dummy; return StackLowerThanAddress(&dummy); } // A threadsafe implementation of fork(2) for threadsafe-style death tests // that uses clone(2). It dies with an error message if anything goes // wrong. static pid_t ExecDeathTestFork(char* const* argv, int close_fd) { ExecDeathTestArgs args = { argv, close_fd }; pid_t child_pid = -1; # if GTEST_HAS_CLONE const bool use_fork = GTEST_FLAG(death_test_use_fork); if (!use_fork) { static const bool stack_grows_down = StackGrowsDown(); const size_t stack_size = getpagesize(); // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); void* const stack_top = static_cast(stack) + (stack_grows_down ? stack_size : 0); child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); } # else const bool use_fork = true; # endif // GTEST_HAS_CLONE if (use_fork && (child_pid = fork()) == 0) { ExecDeathTestChildMain(&args); _exit(0); } GTEST_DEATH_TEST_CHECK_(child_pid != -1); return child_pid; } // The AssumeRole process for a fork-and-exec death test. It re-executes the // main program from the beginning, setting the --gtest_filter // and --gtest_internal_run_death_test flags to cause only the current // death test to be re-run. DeathTest::TestRole ExecDeathTest::AssumeRole() { const UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); if (flag != NULL) { set_write_fd(flag->write_fd()); return EXECUTE_TEST; } int pipe_fd[2]; GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1); // Clear the close-on-exec flag on the write end of the pipe, lest // it be closed when the child process does an exec: GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); const String filter_flag = String::Format("--%s%s=%s.%s", GTEST_FLAG_PREFIX_, kFilterFlag, info->test_case_name(), info->name()); const String internal_flag = String::Format("--%s%s=%s|%d|%d|%d", GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag, file_, line_, death_test_index, pipe_fd[1]); Arguments args; args.AddArguments(GetArgvs()); args.AddArgument(filter_flag.c_str()); args.AddArgument(internal_flag.c_str()); DeathTest::set_last_death_test_message(""); CaptureStderr(); // See the comment in NoExecDeathTest::AssumeRole for why the next line // is necessary. FlushInfoLog(); const pid_t child_pid = ExecDeathTestFork(args.Argv(), pipe_fd[0]); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1])); set_child_pid(child_pid); set_read_fd(pipe_fd[0]); set_spawned(true); return OVERSEE_TEST; } # endif // !GTEST_OS_WINDOWS // Creates a concrete DeathTest-derived class that depends on the // --gtest_death_test_style flag, and sets the pointer pointed to // by the "test" argument to its address. If the test should be // skipped, sets that pointer to NULL. Returns true, unless the // flag is set to an invalid value. bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, const char* file, int line, DeathTest** test) { UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); const int death_test_index = impl->current_test_info() ->increment_death_test_count(); if (flag != NULL) { if (death_test_index > flag->index()) { DeathTest::set_last_death_test_message(String::Format( "Death test count (%d) somehow exceeded expected maximum (%d)", death_test_index, flag->index())); return false; } if (!(flag->file() == file && flag->line() == line && flag->index() == death_test_index)) { *test = NULL; return true; } } # if GTEST_OS_WINDOWS if (GTEST_FLAG(death_test_style) == "threadsafe" || GTEST_FLAG(death_test_style) == "fast") { *test = new WindowsDeathTest(statement, regex, file, line); } # else if (GTEST_FLAG(death_test_style) == "threadsafe") { *test = new ExecDeathTest(statement, regex, file, line); } else if (GTEST_FLAG(death_test_style) == "fast") { *test = new NoExecDeathTest(statement, regex); } # endif // GTEST_OS_WINDOWS else { // NOLINT - this is more readable than unbalanced brackets inside #if. DeathTest::set_last_death_test_message(String::Format( "Unknown death test style \"%s\" encountered", GTEST_FLAG(death_test_style).c_str())); return false; } return true; } // Splits a given string on a given delimiter, populating a given // vector with the fields. GTEST_HAS_DEATH_TEST implies that we have // ::std::string, so we can use it here. static void SplitString(const ::std::string& str, char delimiter, ::std::vector< ::std::string>* dest) { ::std::vector< ::std::string> parsed; ::std::string::size_type pos = 0; while (::testing::internal::AlwaysTrue()) { const ::std::string::size_type colon = str.find(delimiter, pos); if (colon == ::std::string::npos) { parsed.push_back(str.substr(pos)); break; } else { parsed.push_back(str.substr(pos, colon - pos)); pos = colon + 1; } } dest->swap(parsed); } # if GTEST_OS_WINDOWS // Recreates the pipe and event handles from the provided parameters, // signals the event, and returns a file descriptor wrapped around the pipe // handle. This function is called in the child process only. int GetStatusFileDescriptor(unsigned int parent_process_id, size_t write_handle_as_size_t, size_t event_handle_as_size_t) { AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, FALSE, // Non-inheritable. parent_process_id)); if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { DeathTestAbort(String::Format("Unable to open parent process %u", parent_process_id)); } // TODO(vladl@google.com): Replace the following check with a // compile-time assertion when available. GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); const HANDLE write_handle = reinterpret_cast(write_handle_as_size_t); HANDLE dup_write_handle; // The newly initialized handle is accessible only in in the parent // process. To obtain one accessible within the child, we need to use // DuplicateHandle. if (!::DuplicateHandle(parent_process_handle.Get(), write_handle, ::GetCurrentProcess(), &dup_write_handle, 0x0, // Requested privileges ignored since // DUPLICATE_SAME_ACCESS is used. FALSE, // Request non-inheritable handler. DUPLICATE_SAME_ACCESS)) { DeathTestAbort(String::Format( "Unable to duplicate the pipe handle %Iu from the parent process %u", write_handle_as_size_t, parent_process_id)); } const HANDLE event_handle = reinterpret_cast(event_handle_as_size_t); HANDLE dup_event_handle; if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, ::GetCurrentProcess(), &dup_event_handle, 0x0, FALSE, DUPLICATE_SAME_ACCESS)) { DeathTestAbort(String::Format( "Unable to duplicate the event handle %Iu from the parent process %u", event_handle_as_size_t, parent_process_id)); } const int write_fd = ::_open_osfhandle(reinterpret_cast(dup_write_handle), O_APPEND); if (write_fd == -1) { DeathTestAbort(String::Format( "Unable to convert pipe handle %Iu to a file descriptor", write_handle_as_size_t)); } // Signals the parent that the write end of the pipe has been acquired // so the parent can release its own write end. ::SetEvent(dup_event_handle); return write_fd; } # endif // GTEST_OS_WINDOWS // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { if (GTEST_FLAG(internal_run_death_test) == "") return NULL; // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we // can use it here. int line = -1; int index = -1; ::std::vector< ::std::string> fields; SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); int write_fd = -1; # if GTEST_OS_WINDOWS unsigned int parent_process_id = 0; size_t write_handle_as_size_t = 0; size_t event_handle_as_size_t = 0; if (fields.size() != 6 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &parent_process_id) || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { DeathTestAbort(String::Format( "Bad --gtest_internal_run_death_test flag: %s", GTEST_FLAG(internal_run_death_test).c_str())); } write_fd = GetStatusFileDescriptor(parent_process_id, write_handle_as_size_t, event_handle_as_size_t); # else if (fields.size() != 4 || !ParseNaturalNumber(fields[1], &line) || !ParseNaturalNumber(fields[2], &index) || !ParseNaturalNumber(fields[3], &write_fd)) { DeathTestAbort(String::Format( "Bad --gtest_internal_run_death_test flag: %s", GTEST_FLAG(internal_run_death_test).c_str())); } # endif // GTEST_OS_WINDOWS return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); } } // namespace internal #endif // GTEST_HAS_DEATH_TEST } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-filepath.cc0000644015303500042660000003365712151455365020110 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Authors: keith.ray@gmail.com (Keith Ray) #include "gtest/internal/gtest-filepath.h" #include "gtest/internal/gtest-port.h" #include #if GTEST_OS_WINDOWS_MOBILE # include #elif GTEST_OS_WINDOWS # include # include #elif GTEST_OS_SYMBIAN || GTEST_OS_NACL // Symbian OpenC and NaCl have PATH_MAX in sys/syslimits.h # include #else # include # include // Some Linux distributions define PATH_MAX here. #endif // GTEST_OS_WINDOWS_MOBILE #if GTEST_OS_WINDOWS # define GTEST_PATH_MAX_ _MAX_PATH #elif defined(PATH_MAX) # define GTEST_PATH_MAX_ PATH_MAX #elif defined(_XOPEN_PATH_MAX) # define GTEST_PATH_MAX_ _XOPEN_PATH_MAX #else # define GTEST_PATH_MAX_ _POSIX_PATH_MAX #endif // GTEST_OS_WINDOWS #include "gtest/internal/gtest-string.h" namespace testing { namespace internal { #if GTEST_OS_WINDOWS // On Windows, '\\' is the standard path separator, but many tools and the // Windows API also accept '/' as an alternate path separator. Unless otherwise // noted, a file path can contain either kind of path separators, or a mixture // of them. const char kPathSeparator = '\\'; const char kAlternatePathSeparator = '/'; const char kPathSeparatorString[] = "\\"; const char kAlternatePathSeparatorString[] = "/"; # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory. You should not use // the current directory in tests on Windows CE, but this at least // provides a reasonable fallback. const char kCurrentDirectoryString[] = "\\"; // Windows CE doesn't define INVALID_FILE_ATTRIBUTES const DWORD kInvalidFileAttributes = 0xffffffff; # else const char kCurrentDirectoryString[] = ".\\"; # endif // GTEST_OS_WINDOWS_MOBILE #else const char kPathSeparator = '/'; const char kPathSeparatorString[] = "/"; const char kCurrentDirectoryString[] = "./"; #endif // GTEST_OS_WINDOWS // Returns whether the given character is a valid path separator. static bool IsPathSeparator(char c) { #if GTEST_HAS_ALT_PATH_SEP_ return (c == kPathSeparator) || (c == kAlternatePathSeparator); #else return c == kPathSeparator; #endif } // Returns the current working directory, or "" if unsuccessful. FilePath FilePath::GetCurrentDir() { #if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory, so we just return // something reasonable. return FilePath(kCurrentDirectoryString); #elif GTEST_OS_WINDOWS char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #else char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); #endif // GTEST_OS_WINDOWS_MOBILE } // Returns a copy of the FilePath with the case-insensitive extension removed. // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns // FilePath("dir/file"). If a case-insensitive extension is not // found, returns a copy of the original FilePath. FilePath FilePath::RemoveExtension(const char* extension) const { String dot_extension(String::Format(".%s", extension)); if (pathname_.EndsWithCaseInsensitive(dot_extension.c_str())) { return FilePath(String(pathname_.c_str(), pathname_.length() - 4)); } return *this; } // Returns a pointer to the last occurence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FilePath::FindLastPathSeparator() const { const char* const last_sep = strrchr(c_str(), kPathSeparator); #if GTEST_HAS_ALT_PATH_SEP_ const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); // Comparing two pointers of which only one is NULL is undefined. if (last_alt_sep != NULL && (last_sep == NULL || last_alt_sep > last_sep)) { return last_alt_sep; } #endif return last_sep; } // Returns a copy of the FilePath with the directory part removed. // Example: FilePath("path/to/file").RemoveDirectoryName() returns // FilePath("file"). If there is no directory part ("just_a_file"), it returns // the FilePath unmodified. If there is no file part ("just_a_dir/") it // returns an empty FilePath (""). // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveDirectoryName() const { const char* const last_sep = FindLastPathSeparator(); return last_sep ? FilePath(String(last_sep + 1)) : *this; } // RemoveFileName returns the directory path with the filename removed. // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/". // If the FilePath is "a_file" or "/a_file", RemoveFileName returns // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does // not have a file, like "just/a/dir/", it returns the FilePath unmodified. // On Windows platform, '\' is the path separator, otherwise it is '/'. FilePath FilePath::RemoveFileName() const { const char* const last_sep = FindLastPathSeparator(); String dir; if (last_sep) { dir = String(c_str(), last_sep + 1 - c_str()); } else { dir = kCurrentDirectoryString; } return FilePath(dir); } // Helper functions for naming files in a directory for xml output. // Given directory = "dir", base_name = "test", number = 0, // extension = "xml", returns "dir/test.xml". If number is greater // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. FilePath FilePath::MakeFileName(const FilePath& directory, const FilePath& base_name, int number, const char* extension) { String file; if (number == 0) { file = String::Format("%s.%s", base_name.c_str(), extension); } else { file = String::Format("%s_%d.%s", base_name.c_str(), number, extension); } return ConcatPaths(directory, FilePath(file)); } // Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml". // On Windows, uses \ as the separator rather than /. FilePath FilePath::ConcatPaths(const FilePath& directory, const FilePath& relative_path) { if (directory.IsEmpty()) return relative_path; const FilePath dir(directory.RemoveTrailingPathSeparator()); return FilePath(String::Format("%s%c%s", dir.c_str(), kPathSeparator, relative_path.c_str())); } // Returns true if pathname describes something findable in the file-system, // either a file, directory, or whatever. bool FilePath::FileOrDirectoryExists() const { #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; return attributes != kInvalidFileAttributes; #else posix::StatStruct file_stat; return posix::Stat(pathname_.c_str(), &file_stat) == 0; #endif // GTEST_OS_WINDOWS_MOBILE } // Returns true if pathname describes a directory in the file-system // that exists. bool FilePath::DirectoryExists() const { bool result = false; #if GTEST_OS_WINDOWS // Don't strip off trailing separator if path is a root directory on // Windows (like "C:\\"). const FilePath& path(IsRootDirectory() ? *this : RemoveTrailingPathSeparator()); #else const FilePath& path(*this); #endif #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); const DWORD attributes = GetFileAttributes(unicode); delete [] unicode; if ((attributes != kInvalidFileAttributes) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { result = true; } #else posix::StatStruct file_stat; result = posix::Stat(path.c_str(), &file_stat) == 0 && posix::IsDir(file_stat); #endif // GTEST_OS_WINDOWS_MOBILE return result; } // Returns true if pathname describes a root directory. (Windows has one // root directory per disk drive.) bool FilePath::IsRootDirectory() const { #if GTEST_OS_WINDOWS // TODO(wan@google.com): on Windows a network share like // \\server\share can be a root directory, although it cannot be the // current directory. Handle this properly. return pathname_.length() == 3 && IsAbsolutePath(); #else return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); #endif } // Returns true if pathname describes an absolute path. bool FilePath::IsAbsolutePath() const { const char* const name = pathname_.c_str(); #if GTEST_OS_WINDOWS return pathname_.length() >= 3 && ((name[0] >= 'a' && name[0] <= 'z') || (name[0] >= 'A' && name[0] <= 'Z')) && name[1] == ':' && IsPathSeparator(name[2]); #else return IsPathSeparator(name[0]); #endif } // Returns a pathname for a file that does not currently exist. The pathname // will be directory/base_name.extension or // directory/base_name_.extension if directory/base_name.extension // already exists. The number will be incremented until a pathname is found // that does not already exist. // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'. // There could be a race condition if two or more processes are calling this // function at the same time -- they could both pick the same filename. FilePath FilePath::GenerateUniqueFileName(const FilePath& directory, const FilePath& base_name, const char* extension) { FilePath full_pathname; int number = 0; do { full_pathname.Set(MakeFileName(directory, base_name, number++, extension)); } while (full_pathname.FileOrDirectoryExists()); return full_pathname; } // Returns true if FilePath ends with a path separator, which indicates that // it is intended to represent a directory. Returns false otherwise. // This does NOT check that a directory (or file) actually exists. bool FilePath::IsDirectory() const { return !pathname_.empty() && IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]); } // Create directories so that path exists. Returns true if successful or if // the directories already exist; returns false if unable to create directories // for any reason. bool FilePath::CreateDirectoriesRecursively() const { if (!this->IsDirectory()) { return false; } if (pathname_.length() == 0 || this->DirectoryExists()) { return true; } const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName()); return parent.CreateDirectoriesRecursively() && this->CreateFolder(); } // Create the directory so that path exists. Returns true if successful or // if the directory already exists; returns false if unable to create the // directory for any reason, including if the parent directory does not // exist. Not named "CreateDirectory" because that's a macro on Windows. bool FilePath::CreateFolder() const { #if GTEST_OS_WINDOWS_MOBILE FilePath removed_sep(this->RemoveTrailingPathSeparator()); LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); int result = CreateDirectory(unicode, NULL) ? 0 : -1; delete [] unicode; #elif GTEST_OS_WINDOWS int result = _mkdir(pathname_.c_str()); #else int result = mkdir(pathname_.c_str(), 0777); #endif // GTEST_OS_WINDOWS_MOBILE if (result == -1) { return this->DirectoryExists(); // An error is OK if the directory exists. } return true; // No error. } // If input name has a trailing separator character, remove it and return the // name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath FilePath::RemoveTrailingPathSeparator() const { return IsDirectory() ? FilePath(String(pathname_.c_str(), pathname_.length() - 1)) : *this; } // Removes any redundant separators that might be in the pathname. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". // TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). void FilePath::Normalize() { if (pathname_.c_str() == NULL) { pathname_ = ""; return; } const char* src = pathname_.c_str(); char* const dest = new char[pathname_.length() + 1]; char* dest_ptr = dest; memset(dest_ptr, 0, pathname_.length() + 1); while (*src != '\0') { *dest_ptr = *src; if (!IsPathSeparator(*src)) { src++; } else { #if GTEST_HAS_ALT_PATH_SEP_ if (*dest_ptr == kAlternatePathSeparator) { *dest_ptr = kPathSeparator; } #endif while (IsPathSeparator(*src)) src++; } dest_ptr++; } *dest_ptr = '\0'; pathname_ = dest; delete[] dest; } } // namespace internal } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-typed-test.cc0000644015303500042660000000724312151455365020406 00000000000000// Copyright 2008 Google Inc. // All Rights Reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) #include "gtest/gtest-typed-test.h" #include "gtest/gtest.h" namespace testing { namespace internal { #if GTEST_HAS_TYPED_TEST_P // Skips to the first non-space char in str. Returns an empty string if str // contains only whitespace characters. static const char* SkipSpaces(const char* str) { while (IsSpace(*str)) str++; return str; } // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. const char* TypedTestCasePState::VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests) { typedef ::std::set::const_iterator DefinedTestIter; registered_ = true; // Skip initial whitespace in registered_tests since some // preprocessors prefix stringizied literals with whitespace. registered_tests = SkipSpaces(registered_tests); Message errors; ::std::set tests; for (const char* names = registered_tests; names != NULL; names = SkipComma(names)) { const String name = GetPrefixUntilComma(names); if (tests.count(name) != 0) { errors << "Test " << name << " is listed more than once.\n"; continue; } bool found = false; for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (name == *it) { found = true; break; } } if (found) { tests.insert(name); } else { errors << "No test named " << name << " can be found in this test case.\n"; } } for (DefinedTestIter it = defined_test_names_.begin(); it != defined_test_names_.end(); ++it) { if (tests.count(*it) == 0) { errors << "You forgot to list test " << *it << ".\n"; } } const String& errors_str = errors.GetString(); if (errors_str != "") { fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors_str.c_str()); fflush(stderr); posix::Abort(); } return registered_tests; } #endif // GTEST_HAS_TYPED_TEST_P } // namespace internal } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-test-part.cc0000644015303500042660000001014512151455365020222 00000000000000// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: mheule@google.com (Markus Heule) // // The Google C++ Testing Framework (Google Test) #include "gtest/gtest-test-part.h" // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ namespace testing { using internal::GetUnitTestImpl; // Gets the summary of the failure message by omitting the stack trace // in it. internal::String TestPartResult::ExtractSummary(const char* message) { const char* const stack_trace = strstr(message, internal::kStackTraceMarker); return stack_trace == NULL ? internal::String(message) : internal::String(message, stack_trace - message); } // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { return os << result.file_name() << ":" << result.line_number() << ": " << (result.type() == TestPartResult::kSuccess ? "Success" : result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : "Non-fatal failure") << ":\n" << result.message() << std::endl; } // Appends a TestPartResult to the array. void TestPartResultArray::Append(const TestPartResult& result) { array_.push_back(result); } // Returns the TestPartResult at the given index (0-based). const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { if (index < 0 || index >= size()) { printf("\nInvalid index (%d) into TestPartResultArray.\n", index); internal::posix::Abort(); } return array_[index]; } // Returns the number of TestPartResult objects in the array. int TestPartResultArray::size() const { return static_cast(array_.size()); } namespace internal { HasNewFatalFailureHelper::HasNewFatalFailureHelper() : has_new_fatal_failure_(false), original_reporter_(GetUnitTestImpl()-> GetTestPartResultReporterForCurrentThread()) { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); } HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( original_reporter_); } void HasNewFatalFailureHelper::ReportTestPartResult( const TestPartResult& result) { if (result.fatally_failed()) has_new_fatal_failure_ = true; original_reporter_->ReportTestPartResult(result); } } // namespace internal } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest_main.cc0000644015303500042660000000335412151455365017311 00000000000000// Copyright 2006, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "gtest/gtest.h" GTEST_API_ int main(int argc, char **argv) { std::cout << "Running main() from gtest_main.cc\n"; testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } jellyfish-1.1.11/unit_tests/gtest/src/gtest.cc0000644015303500042660000053715612151455365016321 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // // The Google C++ Testing Framework (Google Test) #include "gtest/gtest.h" #include "gtest/gtest-spi.h" #include #include #include #include #include #include #include #include #include // NOLINT #include #include #if GTEST_OS_LINUX // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # include // NOLINT # include // NOLINT // Declares vsnprintf(). This header is not available on Windows. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # include #elif GTEST_OS_SYMBIAN # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT #elif GTEST_OS_ZOS # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT // On z/OS we additionally need strings.h for strcasecmp. # include // NOLINT #elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. # include // NOLINT #elif GTEST_OS_WINDOWS // We are on Windows proper. # include // NOLINT # include // NOLINT # include // NOLINT # include // NOLINT # if GTEST_OS_WINDOWS_MINGW // MinGW has gettimeofday() but not _ftime64(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). // TODO(kenton@google.com): There are other ways to get the time on // Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW // supports these. consider using them instead. # define GTEST_HAS_GETTIMEOFDAY_ 1 # include // NOLINT # endif // GTEST_OS_WINDOWS_MINGW // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT #else // Assume other platforms have gettimeofday(). // TODO(kenton@google.com): Use autoconf to detect availability of // gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 // cpplint thinks that the header is already included, so we want to // silence it. # include // NOLINT # include // NOLINT #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS # include #endif #if GTEST_CAN_STREAM_RESULTS_ # include // NOLINT # include // NOLINT #endif // Indicates that this translation unit is part of Google Test's // implementation. It must come before gtest-internal-inl.h is // included, or there will be a compiler error. This trick is to // prevent a user from accidentally including gtest-internal-inl.h in // his code. #define GTEST_IMPLEMENTATION_ 1 #include "src/gtest-internal-inl.h" #undef GTEST_IMPLEMENTATION_ #if GTEST_OS_WINDOWS # define vsnprintf _vsnprintf #endif // GTEST_OS_WINDOWS namespace testing { using internal::CountIf; using internal::ForEach; using internal::GetElementOr; using internal::Shuffle; // Constants. // A test whose test case name or test name matches this filter is // disabled and not run. static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; // A test case whose name matches this filter is considered a death // test case and will be run before test cases whose name doesn't // match this filter. static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; // A test filter that matches everything. static const char kUniversalFilter[] = "*"; // The default output file for XML output. static const char kDefaultOutputFile[] = "test_detail.xml"; // The environment variable name for the test shard index. static const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; // The environment variable name for the total number of test shards. static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; // The environment variable name for the test shard status file. static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE"; namespace internal { // The text used in failure messages to indicate the start of the // stack trace. const char kStackTraceMarker[] = "\nStack trace:\n"; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. bool g_help_flag = false; } // namespace internal GTEST_DEFINE_bool_( also_run_disabled_tests, internal::BoolFromGTestEnv("also_run_disabled_tests", false), "Run disabled tests too, in addition to the tests normally being run."); GTEST_DEFINE_bool_( break_on_failure, internal::BoolFromGTestEnv("break_on_failure", false), "True iff a failed assertion should be a debugger break-point."); GTEST_DEFINE_bool_( catch_exceptions, internal::BoolFromGTestEnv("catch_exceptions", true), "True iff " GTEST_NAME_ " should catch exceptions and treat them as test failures."); GTEST_DEFINE_string_( color, internal::StringFromGTestEnv("color", "auto"), "Whether to use colors in the output. Valid values: yes, no, " "and auto. 'auto' means to use colors if the output is " "being sent to a terminal and the TERM environment variable " "is set to xterm, xterm-color, xterm-256color, linux or cygwin."); GTEST_DEFINE_string_( filter, internal::StringFromGTestEnv("filter", kUniversalFilter), "A colon-separated list of glob (not regex) patterns " "for filtering the tests to run, optionally followed by a " "'-' and a : separated list of negative patterns (tests to " "exclude). A test is run if it matches one of the positive " "patterns and does not match any of the negative patterns."); GTEST_DEFINE_bool_(list_tests, false, "List all tests without running them."); GTEST_DEFINE_string_( output, internal::StringFromGTestEnv("output", ""), "A format (currently must be \"xml\"), optionally followed " "by a colon and an output file name or directory. A directory " "is indicated by a trailing pathname separator. " "Examples: \"xml:filename.xml\", \"xml::directoryname/\". " "If a directory is specified, output files will be created " "within that directory, with file-names based on the test " "executable's name and, if necessary, made unique by adding " "digits."); GTEST_DEFINE_bool_( print_time, internal::BoolFromGTestEnv("print_time", true), "True iff " GTEST_NAME_ " should display elapsed time in text output."); GTEST_DEFINE_int32_( random_seed, internal::Int32FromGTestEnv("random_seed", 0), "Random number seed to use when shuffling test orders. Must be in range " "[1, 99999], or 0 to use a seed based on the current time."); GTEST_DEFINE_int32_( repeat, internal::Int32FromGTestEnv("repeat", 1), "How many times to repeat each test. Specify a negative number " "for repeating forever. Useful for shaking out flaky tests."); GTEST_DEFINE_bool_( show_internal_stack_frames, false, "True iff " GTEST_NAME_ " should include internal stack frames when " "printing test failure stack traces."); GTEST_DEFINE_bool_( shuffle, internal::BoolFromGTestEnv("shuffle", false), "True iff " GTEST_NAME_ " should randomize tests' order on every run."); GTEST_DEFINE_int32_( stack_trace_depth, internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), "The maximum number of stack frames to print when an " "assertion fails. The valid range is 0 through 100, inclusive."); GTEST_DEFINE_string_( stream_result_to, internal::StringFromGTestEnv("stream_result_to", ""), "This flag specifies the host name and the port number on which to stream " "test results. Example: \"localhost:555\". The flag is effective only on " "Linux."); GTEST_DEFINE_bool_( throw_on_failure, internal::BoolFromGTestEnv("throw_on_failure", false), "When this flag is specified, a failed assertion will throw an exception " "if exceptions are enabled or exit the program with a non-zero code " "otherwise."); namespace internal { // Generates a random number from [0, range), using a Linear // Congruential Generator (LCG). Crashes if 'range' is 0 or greater // than kMaxRange. UInt32 Random::Generate(UInt32 range) { // These constants are the same as are used in glibc's rand(3). state_ = (1103515245U*state_ + 12345U) % kMaxRange; GTEST_CHECK_(range > 0) << "Cannot generate a number in the range [0, 0)."; GTEST_CHECK_(range <= kMaxRange) << "Generation of a number in [0, " << range << ") was requested, " << "but this can only generate numbers in [0, " << kMaxRange << ")."; // Converting via modulus introduces a bit of downward bias, but // it's simple, and a linear congruential generator isn't too good // to begin with. return state_ % range; } // GTestIsInitialized() returns true iff the user has initialized // Google Test. Useful for catching the user mistake of not initializing // Google Test before calling RUN_ALL_TESTS(). // // A user must call testing::InitGoogleTest() to initialize Google // Test. g_init_gtest_count is set to the number of times // InitGoogleTest() has been called. We don't protect this variable // under a mutex as it is only accessed in the main thread. int g_init_gtest_count = 0; static bool GTestIsInitialized() { return g_init_gtest_count != 0; } // Iterates over a vector of TestCases, keeping a running sum of the // results of calling a given int-returning method on each. // Returns the sum. static int SumOverTestCaseList(const std::vector& case_list, int (TestCase::*method)() const) { int sum = 0; for (size_t i = 0; i < case_list.size(); i++) { sum += (case_list[i]->*method)(); } return sum; } // Returns true iff the test case passed. static bool TestCasePassed(const TestCase* test_case) { return test_case->should_run() && test_case->Passed(); } // Returns true iff the test case failed. static bool TestCaseFailed(const TestCase* test_case) { return test_case->should_run() && test_case->Failed(); } // Returns true iff test_case contains at least one test that should // run. static bool ShouldRunTestCase(const TestCase* test_case) { return test_case->should_run(); } // AssertHelper constructor. AssertHelper::AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message) : data_(new AssertHelperData(type, file, line, message)) { } AssertHelper::~AssertHelper() { delete data_; } // Message assignment, for assertion streaming support. void AssertHelper::operator=(const Message& message) const { UnitTest::GetInstance()-> AddTestPartResult(data_->type, data_->file, data_->line, AppendUserMessage(data_->message, message), UnitTest::GetInstance()->impl() ->CurrentOsStackTraceExceptTop(1) // Skips the stack frame for this function itself. ); // NOLINT } // Mutex for linked pointers. GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); // Application pathname gotten in InitGoogleTest. String g_executable_path; // Returns the current application's name, removing directory path if that // is present. FilePath GetCurrentExecutableName() { FilePath result; #if GTEST_OS_WINDOWS result.Set(FilePath(g_executable_path).RemoveExtension("exe")); #else result.Set(FilePath(g_executable_path)); #endif // GTEST_OS_WINDOWS return result.RemoveDirectoryName(); } // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. String UnitTestOptions::GetOutputFormat() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return String(""); const char* const colon = strchr(gtest_output_flag, ':'); return (colon == NULL) ? String(gtest_output_flag) : String(gtest_output_flag, colon - gtest_output_flag); } // Returns the name of the requested output file, or the default if none // was explicitly specified. String UnitTestOptions::GetAbsolutePathToOutputFile() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); if (gtest_output_flag == NULL) return String(""); const char* const colon = strchr(gtest_output_flag, ':'); if (colon == NULL) return String(internal::FilePath::ConcatPaths( internal::FilePath( UnitTest::GetInstance()->original_working_dir()), internal::FilePath(kDefaultOutputFile)).ToString() ); internal::FilePath output_name(colon + 1); if (!output_name.IsAbsolutePath()) // TODO(wan@google.com): on Windows \some\path is not an absolute // path (as its meaning depends on the current drive), yet the // following logic for turning it into an absolute path is wrong. // Fix it. output_name = internal::FilePath::ConcatPaths( internal::FilePath(UnitTest::GetInstance()->original_working_dir()), internal::FilePath(colon + 1)); if (!output_name.IsDirectory()) return output_name.ToString(); internal::FilePath result(internal::FilePath::GenerateUniqueFileName( output_name, internal::GetCurrentExecutableName(), GetOutputFormat().c_str())); return result.ToString(); } // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. bool UnitTestOptions::PatternMatchesString(const char *pattern, const char *str) { switch (*pattern) { case '\0': case ':': // Either ':' or '\0' marks the end of the pattern. return *str == '\0'; case '?': // Matches any single character. return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); case '*': // Matches any string (possibly empty) of characters. return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || PatternMatchesString(pattern + 1, str); default: // Non-special character. Matches itself. return *pattern == *str && PatternMatchesString(pattern + 1, str + 1); } } bool UnitTestOptions::MatchesFilter(const String& name, const char* filter) { const char *cur_pattern = filter; for (;;) { if (PatternMatchesString(cur_pattern, name.c_str())) { return true; } // Finds the next pattern in the filter. cur_pattern = strchr(cur_pattern, ':'); // Returns if no more pattern can be found. if (cur_pattern == NULL) { return false; } // Skips the pattern separater (the ':' character). cur_pattern++; } } // TODO(keithray): move String function implementations to gtest-string.cc. // Returns true iff the user-specified filter matches the test case // name and the test name. bool UnitTestOptions::FilterMatchesTest(const String &test_case_name, const String &test_name) { const String& full_name = String::Format("%s.%s", test_case_name.c_str(), test_name.c_str()); // Split --gtest_filter at '-', if there is one, to separate into // positive filter and negative filter portions const char* const p = GTEST_FLAG(filter).c_str(); const char* const dash = strchr(p, '-'); String positive; String negative; if (dash == NULL) { positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter negative = String(""); } else { positive = String(p, dash - p); // Everything up to the dash negative = String(dash+1); // Everything after the dash if (positive.empty()) { // Treat '-test1' as the same as '*-test1' positive = kUniversalFilter; } } // A filter is a colon-separated list of patterns. It matches a // test if any pattern in it matches the test. return (MatchesFilter(full_name, positive.c_str()) && !MatchesFilter(full_name, negative.c_str())); } #if GTEST_HAS_SEH // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { // Google Test should handle a SEH exception if: // 1. the user wants it to, AND // 2. this is not a breakpoint exception, AND // 3. this is not a C++ exception (VC++ implements them via SEH, // apparently). // // SEH exception code for C++ exceptions. // (see http://support.microsoft.com/kb/185294 for more information). const DWORD kCxxExceptionCode = 0xe06d7363; bool should_handle = true; if (!GTEST_FLAG(catch_exceptions)) should_handle = false; else if (exception_code == EXCEPTION_BREAKPOINT) should_handle = false; else if (exception_code == kCxxExceptionCode) should_handle = false; return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; } #endif // GTEST_HAS_SEH } // namespace internal // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. Intercepts only failures from the current thread. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( TestPartResultArray* result) : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), result_(result) { Init(); } // The c'tor sets this object as the test part result reporter used by // Google Test. The 'result' parameter specifies where to report the // results. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( InterceptMode intercept_mode, TestPartResultArray* result) : intercept_mode_(intercept_mode), result_(result) { Init(); } void ScopedFakeTestPartResultReporter::Init() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { old_reporter_ = impl->GetGlobalTestPartResultReporter(); impl->SetGlobalTestPartResultReporter(this); } else { old_reporter_ = impl->GetTestPartResultReporterForCurrentThread(); impl->SetTestPartResultReporterForCurrentThread(this); } } // The d'tor restores the test part result reporter used by Google Test // before. ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); if (intercept_mode_ == INTERCEPT_ALL_THREADS) { impl->SetGlobalTestPartResultReporter(old_reporter_); } else { impl->SetTestPartResultReporterForCurrentThread(old_reporter_); } } // Increments the test part result count and remembers the result. // This method is from the TestPartResultReporterInterface interface. void ScopedFakeTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { result_->Append(result); } namespace internal { // Returns the type ID of ::testing::Test. We should always call this // instead of GetTypeId< ::testing::Test>() to get the type ID of // testing::Test. This is to work around a suspected linker bug when // using Google Test as a framework on Mac OS X. The bug causes // GetTypeId< ::testing::Test>() to return different values depending // on whether the call is from the Google Test framework itself or // from user test code. GetTestTypeId() is guaranteed to always // return the same value, as it always calls GetTypeId<>() from the // gtest.cc, which is within the Google Test framework. TypeId GetTestTypeId() { return GetTypeId(); } // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId(); // This predicate-formatter checks that 'results' contains a test part // failure of the given type and that the failure message contains the // given substring. AssertionResult HasOneFailure(const char* /* results_expr */, const char* /* type_expr */, const char* /* substr_expr */, const TestPartResultArray& results, TestPartResult::Type type, const string& substr) { const String expected(type == TestPartResult::kFatalFailure ? "1 fatal failure" : "1 non-fatal failure"); Message msg; if (results.size() != 1) { msg << "Expected: " << expected << "\n" << " Actual: " << results.size() << " failures"; for (int i = 0; i < results.size(); i++) { msg << "\n" << results.GetTestPartResult(i); } return AssertionFailure() << msg; } const TestPartResult& r = results.GetTestPartResult(0); if (r.type() != type) { return AssertionFailure() << "Expected: " << expected << "\n" << " Actual:\n" << r; } if (strstr(r.message(), substr.c_str()) == NULL) { return AssertionFailure() << "Expected: " << expected << " containing \"" << substr << "\"\n" << " Actual:\n" << r; } return AssertionSuccess(); } // The constructor of SingleFailureChecker remembers where to look up // test part results, what type of failure we expect, and what // substring the failure message should contain. SingleFailureChecker:: SingleFailureChecker( const TestPartResultArray* results, TestPartResult::Type type, const string& substr) : results_(results), type_(type), substr_(substr) {} // The destructor of SingleFailureChecker verifies that the given // TestPartResultArray contains exactly one failure that has the given // type and contains the given substring. If that's not the case, a // non-fatal failure will be generated. SingleFailureChecker::~SingleFailureChecker() { EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_); } DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultGlobalTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->current_test_result()->AddTestPartResult(result); unit_test_->listeners()->repeater()->OnTestPartResult(result); } DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( UnitTestImpl* unit_test) : unit_test_(unit_test) {} void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result); } // Returns the global test part result reporter. TestPartResultReporterInterface* UnitTestImpl::GetGlobalTestPartResultReporter() { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); return global_test_part_result_repoter_; } // Sets the global test part result reporter. void UnitTestImpl::SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter) { internal::MutexLock lock(&global_test_part_result_reporter_mutex_); global_test_part_result_repoter_ = reporter; } // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* UnitTestImpl::GetTestPartResultReporterForCurrentThread() { return per_thread_test_part_result_reporter_.get(); } // Sets the test part result reporter for the current thread. void UnitTestImpl::SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter) { per_thread_test_part_result_reporter_.set(reporter); } // Gets the number of successful test cases. int UnitTestImpl::successful_test_case_count() const { return CountIf(test_cases_, TestCasePassed); } // Gets the number of failed test cases. int UnitTestImpl::failed_test_case_count() const { return CountIf(test_cases_, TestCaseFailed); } // Gets the number of all test cases. int UnitTestImpl::total_test_case_count() const { return static_cast(test_cases_.size()); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTestImpl::test_case_to_run_count() const { return CountIf(test_cases_, ShouldRunTestCase); } // Gets the number of successful tests. int UnitTestImpl::successful_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); } // Gets the number of failed tests. int UnitTestImpl::failed_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); } // Gets the number of disabled tests. int UnitTestImpl::disabled_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); } // Gets the number of all tests. int UnitTestImpl::total_test_count() const { return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); } // Gets the number of tests that should run. int UnitTestImpl::test_to_run_count() const { return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); } // Returns the current OS stack trace as a String. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { (void)skip_count; return String(""); } // Returns the current time in milliseconds. TimeInMillis GetTimeInMillis() { #if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) // Difference between 1970-01-01 and 1601-01-01 in milliseconds. // http://analogous.blogspot.com/2005/04/epoch.html const TimeInMillis kJavaEpochToWinFileTimeDelta = static_cast(116444736UL) * 100000UL; const DWORD kTenthMicrosInMilliSecond = 10000; SYSTEMTIME now_systime; FILETIME now_filetime; ULARGE_INTEGER now_int64; // TODO(kenton@google.com): Shouldn't this just use // GetSystemTimeAsFileTime()? GetSystemTime(&now_systime); if (SystemTimeToFileTime(&now_systime, &now_filetime)) { now_int64.LowPart = now_filetime.dwLowDateTime; now_int64.HighPart = now_filetime.dwHighDateTime; now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - kJavaEpochToWinFileTimeDelta; return now_int64.QuadPart; } return 0; #elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ __timeb64 now; # ifdef _MSC_VER // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 // (deprecated function) there. // TODO(kenton@google.com): Use GetTickCount()? Or use // SystemTimeToFileTime() # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996. _ftime64(&now); # pragma warning(pop) // Restores the warning state. # else _ftime64(&now); # endif // _MSC_VER return static_cast(now.time) * 1000 + now.millitm; #elif GTEST_HAS_GETTIMEOFDAY_ struct timeval now; gettimeofday(&now, NULL); return static_cast(now.tv_sec) * 1000 + now.tv_usec / 1000; #else # error "Don't know how to get the current time on your system." #endif } // Utilities // class String // Returns the input enclosed in double quotes if it's not NULL; // otherwise returns "(null)". For example, "\"Hello\"" is returned // for input "Hello". // // This is useful for printing a C string in the syntax of a literal. // // Known issue: escape sequences are not handled yet. String String::ShowCStringQuoted(const char* c_str) { return c_str ? String::Format("\"%s\"", c_str) : String("(null)"); } // Copies at most length characters from str into a newly-allocated // piece of memory of size length+1. The memory is allocated with new[]. // A terminating null byte is written to the memory, and a pointer to it // is returned. If str is NULL, NULL is returned. static char* CloneString(const char* str, size_t length) { if (str == NULL) { return NULL; } else { char* const clone = new char[length + 1]; posix::StrNCpy(clone, str, length); clone[length] = '\0'; return clone; } } // Clones a 0-terminated C string, allocating memory using new. The // caller is responsible for deleting[] the return value. Returns the // cloned string, or NULL if the input is NULL. const char * String::CloneCString(const char* c_str) { return (c_str == NULL) ? NULL : CloneString(c_str, strlen(c_str)); } #if GTEST_OS_WINDOWS_MOBILE // Creates a UTF-16 wide string from the given ANSI string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the wide string, or NULL if the // input is NULL. LPCWSTR String::AnsiToUtf16(const char* ansi) { if (!ansi) return NULL; const int length = strlen(ansi); const int unicode_length = MultiByteToWideChar(CP_ACP, 0, ansi, length, NULL, 0); WCHAR* unicode = new WCHAR[unicode_length + 1]; MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length); unicode[unicode_length] = 0; return unicode; } // Creates an ANSI string from the given wide string, allocating // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { if (!utf16_str) return NULL; const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, NULL, 0, NULL, NULL); char* ansi = new char[ansi_length + 1]; WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, ansi, ansi_length, NULL, NULL); ansi[ansi_length] = 0; return ansi; } #endif // GTEST_OS_WINDOWS_MOBILE // Compares two C strings. Returns true iff they have the same content. // // Unlike strcmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::CStringEquals(const char * lhs, const char * rhs) { if ( lhs == NULL ) return rhs == NULL; if ( rhs == NULL ) return false; return strcmp(lhs, rhs) == 0; } #if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING // Converts an array of wide chars to a narrow string using the UTF-8 // encoding, and streams the result to the given Message object. static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, Message* msg) { // TODO(wan): consider allowing a testing::String object to // contain '\0'. This will make it behave more like std::string, // and will allow ToUtf8String() to return the correct encoding // for '\0' s.t. we can get rid of the conditional here (and in // several other places). for (size_t i = 0; i != length; ) { // NOLINT if (wstr[i] != L'\0') { *msg << WideStringToUtf8(wstr + i, static_cast(length - i)); while (i != length && wstr[i] != L'\0') i++; } else { *msg << '\0'; i++; } } } #endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING } // namespace internal #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::std::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_STD_WSTRING #if GTEST_HAS_GLOBAL_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. Message& Message::operator <<(const ::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } #endif // GTEST_HAS_GLOBAL_WSTRING // AssertionResult constructors. // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult::AssertionResult(const AssertionResult& other) : success_(other.success_), message_(other.message_.get() != NULL ? new ::std::string(*other.message_) : static_cast< ::std::string*>(NULL)) { } // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult AssertionResult::operator!() const { AssertionResult negation(!success_); if (message_.get() != NULL) negation << *message_; return negation; } // Makes a successful assertion result. AssertionResult AssertionSuccess() { return AssertionResult(true); } // Makes a failed assertion result. AssertionResult AssertionFailure() { return AssertionResult(false); } // Makes a failed assertion result with the given failure message. // Deprecated; use AssertionFailure() << message. AssertionResult AssertionFailure(const Message& message) { return AssertionFailure() << message; } namespace internal { // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // // The first four parameters are the expressions used in the assertion // and their values, as strings. For example, for ASSERT_EQ(foo, bar) // where foo is 5 and bar is 6, we have: // // expected_expression: "foo" // actual_expression: "bar" // expected_value: "5" // actual_value: "6" // // The ignoring_case parameter is true iff the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. AssertionResult EqFailure(const char* expected_expression, const char* actual_expression, const String& expected_value, const String& actual_value, bool ignoring_case) { Message msg; msg << "Value of: " << actual_expression; if (actual_value != actual_expression) { msg << "\n Actual: " << actual_value; } msg << "\nExpected: " << expected_expression; if (ignoring_case) { msg << " (ignoring case)"; } if (expected_value != expected_expression) { msg << "\nWhich is: " << expected_value; } return AssertionFailure() << msg; } // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. String GetBoolAssertionFailureMessage(const AssertionResult& assertion_result, const char* expression_text, const char* actual_predicate_value, const char* expected_predicate_value) { const char* actual_message = assertion_result.message(); Message msg; msg << "Value of: " << expression_text << "\n Actual: " << actual_predicate_value; if (actual_message[0] != '\0') msg << " (" << actual_message << ")"; msg << "\nExpected: " << expected_predicate_value; return msg.GetString(); } // Helper function for implementing ASSERT_NEAR. AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, double val1, double val2, double abs_error) { const double diff = fabs(val1 - val2); if (diff <= abs_error) return AssertionSuccess(); // TODO(wan): do not print the value of an expression if it's // already a literal. return AssertionFailure() << "The difference between " << expr1 << " and " << expr2 << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" << expr1 << " evaluates to " << val1 << ",\n" << expr2 << " evaluates to " << val2 << ", and\n" << abs_error_expr << " evaluates to " << abs_error << "."; } // Helper template for implementing FloatLE() and DoubleLE(). template AssertionResult FloatingPointLE(const char* expr1, const char* expr2, RawType val1, RawType val2) { // Returns success if val1 is less than val2, if (val1 < val2) { return AssertionSuccess(); } // or if val1 is almost equal to val2. const FloatingPoint lhs(val1), rhs(val2); if (lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } // Note that the above two checks will both fail if either val1 or // val2 is NaN, as the IEEE floating-point standard requires that // any predicate involving a NaN must return false. ::std::stringstream val1_ss; val1_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val1; ::std::stringstream val2_ss; val2_ss << std::setprecision(std::numeric_limits::digits10 + 2) << val2; return AssertionFailure() << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" << " Actual: " << StringStreamToString(&val1_ss) << " vs " << StringStreamToString(&val2_ss); } } // namespace internal // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, float val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2) { return internal::FloatingPointLE(expr1, expr2, val1, val2); } namespace internal { // The helper function for {ASSERT|EXPECT}_EQ with int or enum // arguments. AssertionResult CmpHelperEQ(const char* expected_expression, const char* actual_expression, BiggestInt expected, BiggestInt actual) { if (expected == actual) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, FormatForComparisonFailureMessage(expected, actual), FormatForComparisonFailureMessage(actual, expected), false); } // A macro for implementing the helper functions needed to implement // ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here // just to avoid copy-and-paste of similar code. #define GTEST_IMPL_CMP_HELPER_(op_name, op)\ AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ BiggestInt val1, BiggestInt val2) {\ if (val1 op val2) {\ return AssertionSuccess();\ } else {\ return AssertionFailure() \ << "Expected: (" << expr1 << ") " #op " (" << expr2\ << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ << " vs " << FormatForComparisonFailureMessage(val2, val1);\ }\ } // Implements the helper function for {ASSERT|EXPECT}_NE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(NE, !=) // Implements the helper function for {ASSERT|EXPECT}_LE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LE, <=) // Implements the helper function for {ASSERT|EXPECT}_LT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(LT, < ) // Implements the helper function for {ASSERT|EXPECT}_GE with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GE, >=) // Implements the helper function for {ASSERT|EXPECT}_GT with int or // enum arguments. GTEST_IMPL_CMP_HELPER_(GT, > ) #undef GTEST_IMPL_CMP_HELPER_ // The helper function for {ASSERT|EXPECT}_STREQ. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, String::ShowCStringQuoted(expected), String::ShowCStringQuoted(actual), false); } // The helper function for {ASSERT|EXPECT}_STRCASEEQ. AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, const char* actual_expression, const char* expected, const char* actual) { if (String::CaseInsensitiveCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, String::ShowCStringQuoted(expected), String::ShowCStringQuoted(actual), true); } // The helper function for {ASSERT|EXPECT}_STRNE. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } // The helper function for {ASSERT|EXPECT}_STRCASENE. AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, const char* s1, const char* s2) { if (!String::CaseInsensitiveCStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << ") (ignoring case), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } } // namespace internal namespace { // Helper functions for implementing IsSubString() and IsNotSubstring(). // This group of overloaded functions return true iff needle is a // substring of haystack. NULL is considered a substring of itself // only. bool IsSubstringPred(const char* needle, const char* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return strstr(haystack, needle) != NULL; } bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { if (needle == NULL || haystack == NULL) return needle == haystack; return wcsstr(haystack, needle) != NULL; } // StringType here can be either ::std::string or ::std::wstring. template bool IsSubstringPred(const StringType& needle, const StringType& haystack) { return haystack.find(needle) != StringType::npos; } // This function implements either IsSubstring() or IsNotSubstring(), // depending on the value of the expected_to_be_substring parameter. // StringType here can be const char*, const wchar_t*, ::std::string, // or ::std::wstring. template AssertionResult IsSubstringImpl( bool expected_to_be_substring, const char* needle_expr, const char* haystack_expr, const StringType& needle, const StringType& haystack) { if (IsSubstringPred(needle, haystack) == expected_to_be_substring) return AssertionSuccess(); const bool is_wide_string = sizeof(needle[0]) > 1; const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; return AssertionFailure() << "Value of: " << needle_expr << "\n" << " Actual: " << begin_string_quote << needle << "\"\n" << "Expected: " << (expected_to_be_substring ? "" : "not ") << "a substring of " << haystack_expr << "\n" << "Which is: " << begin_string_quote << haystack << "\""; } } // namespace // IsSubstring() and IsNotSubstring() check whether needle is a // substring of haystack (NULL is considered a substring of itself // only), and return an appropriate error message when they fail. AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const char* needle, const char* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::string& needle, const ::std::string& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #if GTEST_HAS_STD_WSTRING AssertionResult IsSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } AssertionResult IsNotSubstring( const char* needle_expr, const char* haystack_expr, const ::std::wstring& needle, const ::std::wstring& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #endif // GTEST_HAS_STD_WSTRING namespace internal { #if GTEST_OS_WINDOWS namespace { // Helper function for IsHRESULT{SuccessFailure} predicates AssertionResult HRESULTFailureHelper(const char* expr, const char* expected, long hr) { // NOLINT # if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't support FormatMessage. const char error_text[] = ""; # else // Looks up the human-readable system message for the HRESULT code // and since we're not passing any params to FormatMessage, we don't // want inserts expanded. const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; const DWORD kBufSize = 4096; // String::Format can't exceed this length. // Gets the system's human readable message string for this HRESULT. char error_text[kBufSize] = { '\0' }; DWORD message_length = ::FormatMessageA(kFlags, 0, // no source, we're asking system hr, // the error 0, // no line width restrictions error_text, // output buffer kBufSize, // buf size NULL); // no arguments for inserts // Trims tailing white space (FormatMessage leaves a trailing cr-lf) for (; message_length && IsSpace(error_text[message_length - 1]); --message_length) { error_text[message_length - 1] = '\0'; } # endif // GTEST_OS_WINDOWS_MOBILE const String error_hex(String::Format("0x%08X ", hr)); return ::testing::AssertionFailure() << "Expected: " << expr << " " << expected << ".\n" << " Actual: " << error_hex << error_text << "\n"; } } // namespace AssertionResult IsHRESULTSuccess(const char* expr, long hr) { // NOLINT if (SUCCEEDED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "succeeds", hr); } AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT if (FAILED(hr)) { return AssertionSuccess(); } return HRESULTFailureHelper(expr, "fails", hr); } #endif // GTEST_OS_WINDOWS // Utility functions for encoding Unicode text (wide strings) in // UTF-8. // A Unicode code-point can have upto 21 bits, and is encoded in UTF-8 // like this: // // Code-point length Encoding // 0 - 7 bits 0xxxxxxx // 8 - 11 bits 110xxxxx 10xxxxxx // 12 - 16 bits 1110xxxx 10xxxxxx 10xxxxxx // 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx // The maximum code-point a one-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint1 = (static_cast(1) << 7) - 1; // The maximum code-point a two-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint2 = (static_cast(1) << (5 + 6)) - 1; // The maximum code-point a three-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint3 = (static_cast(1) << (4 + 2*6)) - 1; // The maximum code-point a four-byte UTF-8 sequence can represent. const UInt32 kMaxCodePoint4 = (static_cast(1) << (3 + 3*6)) - 1; // Chops off the n lowest bits from a bit pattern. Returns the n // lowest bits. As a side effect, the original bit pattern will be // shifted to the right by n bits. inline UInt32 ChopLowBits(UInt32* bits, int n) { const UInt32 low_bits = *bits & ((static_cast(1) << n) - 1); *bits >>= n; return low_bits; } // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // The output buffer str must containt at least 32 characters. // The function returns the address of the output buffer. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output // as '(Invalid Unicode 0xXXXXXXXX)'. char* CodePointToUtf8(UInt32 code_point, char* str) { if (code_point <= kMaxCodePoint1) { str[1] = '\0'; str[0] = static_cast(code_point); // 0xxxxxxx } else if (code_point <= kMaxCodePoint2) { str[2] = '\0'; str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xC0 | code_point); // 110xxxxx } else if (code_point <= kMaxCodePoint3) { str[3] = '\0'; str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xE0 | code_point); // 1110xxxx } else if (code_point <= kMaxCodePoint4) { str[4] = '\0'; str[3] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[2] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[1] = static_cast(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx str[0] = static_cast(0xF0 | code_point); // 11110xxx } else { // The longest string String::Format can produce when invoked // with these parameters is 28 character long (not including // the terminating nul character). We are asking for 32 character // buffer just in case. This is also enough for strncpy to // null-terminate the destination string. posix::StrNCpy( str, String::Format("(Invalid Unicode 0x%X)", code_point).c_str(), 32); str[31] = '\0'; // Makes sure no change in the format to strncpy leaves // the result unterminated. } return str; } // The following two functions only make sense if the the system // uses UTF-16 for wide string encoding. All supported systems // with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. // Determines if the arguments constitute UTF-16 surrogate pair // and thus should be combined into a single Unicode code point // using CreateCodePointFromUtf16SurrogatePair. inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { return sizeof(wchar_t) == 2 && (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; } // Creates a Unicode code point from UTF16 surrogate pair. inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, wchar_t second) { const UInt32 mask = (1 << 10) - 1; return (sizeof(wchar_t) == 2) ? (((first & mask) << 10) | (second & mask)) + 0x10000 : // This function should not be called when the condition is // false, but we provide a sensible default in case it is. static_cast(first); } // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. String WideStringToUtf8(const wchar_t* str, int num_chars) { if (num_chars == -1) num_chars = static_cast(wcslen(str)); ::std::stringstream stream; for (int i = 0; i < num_chars; ++i) { UInt32 unicode_code_point; if (str[i] == L'\0') { break; } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], str[i + 1]); i++; } else { unicode_code_point = static_cast(str[i]); } char buffer[32]; // CodePointToUtf8 requires a buffer this big. stream << CodePointToUtf8(unicode_code_point, buffer); } return StringStreamToString(&stream); } // Converts a wide C string to a String using the UTF-8 encoding. // NULL will be converted to "(null)". String String::ShowWideCString(const wchar_t * wide_c_str) { if (wide_c_str == NULL) return String("(null)"); return String(internal::WideStringToUtf8(wide_c_str, -1).c_str()); } // Similar to ShowWideCString(), except that this function encloses // the converted string in double quotes. String String::ShowWideCStringQuoted(const wchar_t* wide_c_str) { if (wide_c_str == NULL) return String("(null)"); return String::Format("L\"%s\"", String::ShowWideCString(wide_c_str).c_str()); } // Compares two wide C strings. Returns true iff they have the same // content. // // Unlike wcscmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return wcscmp(lhs, rhs) == 0; } // Helper function for *_STREQ on wide strings. AssertionResult CmpHelperSTREQ(const char* expected_expression, const char* actual_expression, const wchar_t* expected, const wchar_t* actual) { if (String::WideCStringEquals(expected, actual)) { return AssertionSuccess(); } return EqFailure(expected_expression, actual_expression, String::ShowWideCStringQuoted(expected), String::ShowWideCStringQuoted(actual), false); } // Helper function for *_STRNE on wide strings. AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, const wchar_t* s1, const wchar_t* s2) { if (!String::WideCStringEquals(s1, s2)) { return AssertionSuccess(); } return AssertionFailure() << "Expected: (" << s1_expression << ") != (" << s2_expression << "), actual: " << String::ShowWideCStringQuoted(s1) << " vs " << String::ShowWideCStringQuoted(s2); } // Compares two C strings, ignoring case. Returns true iff they have // the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; return posix::StrCaseCmp(lhs, rhs) == 0; } // Compares two wide C strings, ignoring case. Returns true iff they // have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, // including the empty string. // NB: The implementations on different platforms slightly differ. // On windows, this method uses _wcsicmp which compares according to LC_CTYPE // environment variable. On GNU platform this method uses wcscasecmp // which compares according to LC_CTYPE category of the current locale. // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the // current locale. bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) { if (lhs == NULL) return rhs == NULL; if (rhs == NULL) return false; #if GTEST_OS_WINDOWS return _wcsicmp(lhs, rhs) == 0; #elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID return wcscasecmp(lhs, rhs) == 0; #else // Android, Mac OS X and Cygwin don't define wcscasecmp. // Other unknown OSes may not define it either. wint_t left, right; do { left = towlower(*lhs++); right = towlower(*rhs++); } while (left && left == right); return left == right; #endif // OS selector } // Compares this with another String. // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0 // if this is greater than rhs. int String::Compare(const String & rhs) const { const char* const lhs_c_str = c_str(); const char* const rhs_c_str = rhs.c_str(); if (lhs_c_str == NULL) { return rhs_c_str == NULL ? 0 : -1; // NULL < anything except NULL } else if (rhs_c_str == NULL) { return 1; } const size_t shorter_str_len = length() <= rhs.length() ? length() : rhs.length(); for (size_t i = 0; i != shorter_str_len; i++) { if (lhs_c_str[i] < rhs_c_str[i]) { return -1; } else if (lhs_c_str[i] > rhs_c_str[i]) { return 1; } } return (length() < rhs.length()) ? -1 : (length() > rhs.length()) ? 1 : 0; } // Returns true iff this String ends with the given suffix. *Any* // String is considered to end with a NULL or empty suffix. bool String::EndsWith(const char* suffix) const { if (suffix == NULL || CStringEquals(suffix, "")) return true; if (c_str() == NULL) return false; const size_t this_len = strlen(c_str()); const size_t suffix_len = strlen(suffix); return (this_len >= suffix_len) && CStringEquals(c_str() + this_len - suffix_len, suffix); } // Returns true iff this String ends with the given suffix, ignoring case. // Any String is considered to end with a NULL or empty suffix. bool String::EndsWithCaseInsensitive(const char* suffix) const { if (suffix == NULL || CStringEquals(suffix, "")) return true; if (c_str() == NULL) return false; const size_t this_len = strlen(c_str()); const size_t suffix_len = strlen(suffix); return (this_len >= suffix_len) && CaseInsensitiveCStringEquals(c_str() + this_len - suffix_len, suffix); } // Formats a list of arguments to a String, using the same format // spec string as for printf. // // We do not use the StringPrintf class as it is not universally // available. // // The result is limited to 4096 characters (including the tailing 0). // If 4096 characters are not enough to format the input, or if // there's an error, "" is // returned. String String::Format(const char * format, ...) { va_list args; va_start(args, format); char buffer[4096]; const int kBufferSize = sizeof(buffer)/sizeof(buffer[0]); // MSVC 8 deprecates vsnprintf(), so we want to suppress warning // 4996 (deprecated function) there. #ifdef _MSC_VER // We are using MSVC. # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4996) // Temporarily disables warning 4996. const int size = vsnprintf(buffer, kBufferSize, format, args); # pragma warning(pop) // Restores the warning state. #else // We are not using MSVC. const int size = vsnprintf(buffer, kBufferSize, format, args); #endif // _MSC_VER va_end(args); // vsnprintf()'s behavior is not portable. When the buffer is not // big enough, it returns a negative value in MSVC, and returns the // needed buffer size on Linux. When there is an output error, it // always returns a negative value. For simplicity, we lump the two // error cases together. if (size < 0 || size >= kBufferSize) { return String(""); } else { return String(buffer, size); } } // Converts the buffer in a stringstream to a String, converting NUL // bytes to "\\0" along the way. String StringStreamToString(::std::stringstream* ss) { const ::std::string& str = ss->str(); const char* const start = str.c_str(); const char* const end = start + str.length(); // We need to use a helper stringstream to do this transformation // because String doesn't support push_back(). ::std::stringstream helper; for (const char* ch = start; ch != end; ++ch) { if (*ch == '\0') { helper << "\\0"; // Replaces NUL with "\\0"; } else { helper.put(*ch); } } return String(helper.str().c_str()); } // Appends the user-supplied message to the Google-Test-generated message. String AppendUserMessage(const String& gtest_msg, const Message& user_msg) { // Appends the user message if it's non-empty. const String user_msg_string = user_msg.GetString(); if (user_msg_string.empty()) { return gtest_msg; } Message msg; msg << gtest_msg << "\n" << user_msg_string; return msg.GetString(); } } // namespace internal // class TestResult // Creates an empty TestResult. TestResult::TestResult() : death_test_count_(0), elapsed_time_(0) { } // D'tor. TestResult::~TestResult() { } // Returns the i-th test part result among all the results. i can // range from 0 to total_part_count() - 1. If i is not in that range, // aborts the program. const TestPartResult& TestResult::GetTestPartResult(int i) const { if (i < 0 || i >= total_part_count()) internal::posix::Abort(); return test_part_results_.at(i); } // Returns the i-th test property. i can range from 0 to // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& TestResult::GetTestProperty(int i) const { if (i < 0 || i >= test_property_count()) internal::posix::Abort(); return test_properties_.at(i); } // Clears the test part results. void TestResult::ClearTestPartResults() { test_part_results_.clear(); } // Adds a test part result to the list. void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { test_part_results_.push_back(test_part_result); } // Adds a test property to the list. If a property with the same key as the // supplied property is already represented, the value of this test_property // replaces the old value for that key. void TestResult::RecordProperty(const TestProperty& test_property) { if (!ValidateTestProperty(test_property)) { return; } internal::MutexLock lock(&test_properites_mutex_); const std::vector::iterator property_with_matching_key = std::find_if(test_properties_.begin(), test_properties_.end(), internal::TestPropertyKeyIs(test_property.key())); if (property_with_matching_key == test_properties_.end()) { test_properties_.push_back(test_property); return; } property_with_matching_key->SetValue(test_property.value()); } // Adds a failure if the key is a reserved attribute of Google Test // testcase tags. Returns true if the property is valid. bool TestResult::ValidateTestProperty(const TestProperty& test_property) { internal::String key(test_property.key()); if (key == "name" || key == "status" || key == "time" || key == "classname") { ADD_FAILURE() << "Reserved key used in RecordProperty(): " << key << " ('name', 'status', 'time', and 'classname' are reserved by " << GTEST_NAME_ << ")"; return false; } return true; } // Clears the object. void TestResult::Clear() { test_part_results_.clear(); test_properties_.clear(); death_test_count_ = 0; elapsed_time_ = 0; } // Returns true iff the test failed. bool TestResult::Failed() const { for (int i = 0; i < total_part_count(); ++i) { if (GetTestPartResult(i).failed()) return true; } return false; } // Returns true iff the test part fatally failed. static bool TestPartFatallyFailed(const TestPartResult& result) { return result.fatally_failed(); } // Returns true iff the test fatally failed. bool TestResult::HasFatalFailure() const { return CountIf(test_part_results_, TestPartFatallyFailed) > 0; } // Returns true iff the test part non-fatally failed. static bool TestPartNonfatallyFailed(const TestPartResult& result) { return result.nonfatally_failed(); } // Returns true iff the test has a non-fatal failure. bool TestResult::HasNonfatalFailure() const { return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; } // Gets the number of all test parts. This is the sum of the number // of successful test parts and the number of failed test parts. int TestResult::total_part_count() const { return static_cast(test_part_results_.size()); } // Returns the number of the test properties. int TestResult::test_property_count() const { return static_cast(test_properties_.size()); } // class Test // Creates a Test object. // The c'tor saves the values of all Google Test flags. Test::Test() : gtest_flag_saver_(new internal::GTestFlagSaver) { } // The d'tor restores the values of all Google Test flags. Test::~Test() { delete gtest_flag_saver_; } // Sets up the test fixture. // // A sub-class may override this. void Test::SetUp() { } // Tears down the test fixture. // // A sub-class may override this. void Test::TearDown() { } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const char* key, const char* value) { UnitTest::GetInstance()->RecordPropertyForCurrentTest(key, value); } // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const char* key, int value) { Message value_message; value_message << value; RecordProperty(key, value_message.GetString().c_str()); } namespace internal { void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const String& message) { // This function is a friend of UnitTest and as such has access to // AddTestPartResult. UnitTest::GetInstance()->AddTestPartResult( result_type, NULL, // No info about the source file where the exception occurred. -1, // We have no info on which line caused the exception. message, String()); // No stack trace, either. } } // namespace internal // Google Test requires all tests in the same test case to use the same test // fixture class. This function checks if the current test has the // same fixture class as the first test in the current test case. If // yes, it returns true; otherwise it generates a Google Test failure and // returns false. bool Test::HasSameFixtureClass() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); const TestCase* const test_case = impl->current_test_case(); // Info about the first test in the current test case. const TestInfo* const first_test_info = test_case->test_info_list()[0]; const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; const char* const first_test_name = first_test_info->name(); // Info about the current test. const TestInfo* const this_test_info = impl->current_test_info(); const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_; const char* const this_test_name = this_test_info->name(); if (this_fixture_id != first_fixture_id) { // Is the first test defined using TEST? const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId(); // Is this test defined using TEST? const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); if (first_is_TEST || this_is_TEST) { // The user mixed TEST and TEST_F in this test case - we'll tell // him/her how to fix it. // Gets the name of the TEST and the name of the TEST_F. Note // that first_is_TEST and this_is_TEST cannot both be true, as // the fixture IDs are different for the two tests. const char* const TEST_name = first_is_TEST ? first_test_name : this_test_name; const char* const TEST_F_name = first_is_TEST ? this_test_name : first_test_name; ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class, so mixing TEST_F and TEST in the same test case is\n" << "illegal. In test case " << this_test_info->test_case_name() << ",\n" << "test " << TEST_F_name << " is defined using TEST_F but\n" << "test " << TEST_name << " is defined using TEST. You probably\n" << "want to change the TEST to TEST_F or move it to another test\n" << "case."; } else { // The user defined two fixture classes with the same name in // two namespaces - we'll tell him/her how to fix it. ADD_FAILURE() << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << this_test_info->test_case_name() << ",\n" << "you defined test " << first_test_name << " and test " << this_test_name << "\n" << "using two different test fixture classes. This can happen if\n" << "the two classes are from different namespaces or translation\n" << "units and have the same name. You should probably rename one\n" << "of the classes to put the tests into different test cases."; } return false; } return true; } #if GTEST_HAS_SEH // Adds an "exception thrown" fatal failure to the current test. This // function returns its result via an output parameter pointer because VC++ // prohibits creation of objects with destructors on stack in functions // using __try (see error C2712). static internal::String* FormatSehExceptionMessage(DWORD exception_code, const char* location) { Message message; message << "SEH exception with code 0x" << std::setbase(16) << exception_code << std::setbase(10) << " thrown in " << location << "."; return new internal::String(message.GetString()); } #endif // GTEST_HAS_SEH #if GTEST_HAS_EXCEPTIONS // Adds an "exception thrown" fatal failure to the current test. static internal::String FormatCxxExceptionMessage(const char* description, const char* location) { Message message; if (description != NULL) { message << "C++ exception with description \"" << description << "\""; } else { message << "Unknown C++ exception"; } message << " thrown in " << location << "."; return message.GetString(); } static internal::String PrintTestPartResultToString( const TestPartResult& test_part_result); // A failed Google Test assertion will throw an exception of this type when // GTEST_FLAG(throw_on_failure) is true (if exceptions are enabled). We // derive it from std::runtime_error, which is for errors presumably // detectable only at run time. Since std::runtime_error inherits from // std::exception, many testing frameworks know how to extract and print the // message inside it. class GoogleTestFailureException : public ::std::runtime_error { public: explicit GoogleTestFailureException(const TestPartResult& failure) : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {} }; #endif // GTEST_HAS_EXCEPTIONS namespace internal { // We put these helper functions in the internal namespace as IBM's xlC // compiler rejects the code if they were declared static. // Runs the given method and handles SEH exceptions it throws, when // SEH is supported; returns the 0-value for type Result in case of an // SEH exception. (Microsoft compilers cannot handle SEH and C++ // exceptions in the same function. Therefore, we provide a separate // wrapper function for handling SEH exceptions.) template Result HandleSehExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { #if GTEST_HAS_SEH __try { return (object->*method)(); } __except (internal::UnitTestOptions::GTestShouldProcessSEH( // NOLINT GetExceptionCode())) { // We create the exception message on the heap because VC++ prohibits // creation of objects with destructors on stack in functions using __try // (see error C2712). internal::String* exception_message = FormatSehExceptionMessage( GetExceptionCode(), location); internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, *exception_message); delete exception_message; return static_cast(0); } #else (void)location; return (object->*method)(); #endif // GTEST_HAS_SEH } // Runs the given method and catches and reports C++ and/or SEH-style // exceptions, if they are supported; returns the 0-value for type // Result in case of an SEH exception. template Result HandleExceptionsInMethodIfSupported( T* object, Result (T::*method)(), const char* location) { // NOTE: The user code can affect the way in which Google Test handles // exceptions by setting GTEST_FLAG(catch_exceptions), but only before // RUN_ALL_TESTS() starts. It is technically possible to check the flag // after the exception is caught and either report or re-throw the // exception based on the flag's value: // // try { // // Perform the test method. // } catch (...) { // if (GTEST_FLAG(catch_exceptions)) // // Report the exception as failure. // else // throw; // Re-throws the original exception. // } // // However, the purpose of this flag is to allow the program to drop into // the debugger when the exception is thrown. On most platforms, once the // control enters the catch block, the exception origin information is // lost and the debugger will stop the program at the point of the // re-throw in this function -- instead of at the point of the original // throw statement in the code under test. For this reason, we perform // the check early, sacrificing the ability to affect Google Test's // exception handling in the method where the exception is thrown. if (internal::GetUnitTestImpl()->catch_exceptions()) { #if GTEST_HAS_EXCEPTIONS try { return HandleSehExceptionsInMethodIfSupported(object, method, location); } catch (const GoogleTestFailureException&) { // NOLINT // This exception doesn't originate in code under test. It makes no // sense to report it as a test failure. throw; } catch (const std::exception& e) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(e.what(), location)); } catch (...) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, FormatCxxExceptionMessage(NULL, location)); } return static_cast(0); #else return HandleSehExceptionsInMethodIfSupported(object, method, location); #endif // GTEST_HAS_EXCEPTIONS } else { return (object->*method)(); } } } // namespace internal // Runs the test and updates the test result. void Test::Run() { if (!HasSameFixtureClass()) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); // We will run the test only if SetUp() was successful. if (!HasFatalFailure()) { impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TestBody, "the test body"); } // However, we want to clean up as much as possible. Hence we will // always call TearDown(), even if SetUp() or the test body has // failed. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TearDown, "TearDown()"); } // Returns true iff the current test has a fatal failure. bool Test::HasFatalFailure() { return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); } // Returns true iff the current test has a non-fatal failure. bool Test::HasNonfatalFailure() { return internal::GetUnitTestImpl()->current_test_result()-> HasNonfatalFailure(); } // class TestInfo // Constructs a TestInfo object. It assumes ownership of the test factory // object. // TODO(vladl@google.com): Make a_test_case_name and a_name const string&'s // to signify they cannot be NULLs. TestInfo::TestInfo(const char* a_test_case_name, const char* a_name, const char* a_type_param, const char* a_value_param, internal::TypeId fixture_class_id, internal::TestFactoryBase* factory) : test_case_name_(a_test_case_name), name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), value_param_(a_value_param ? new std::string(a_value_param) : NULL), fixture_class_id_(fixture_class_id), should_run_(false), is_disabled_(false), matches_filter_(false), factory_(factory), result_() {} // Destructs a TestInfo object. TestInfo::~TestInfo() { delete factory_; } namespace internal { // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // // test_case_name: name of the test case // name: name of the test // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // value_param: text representation of the test's value parameter, // or NULL if this is not a value-parameterized test. // fixture_class_id: ID of the test fixture class // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. TestInfo* MakeAndRegisterTestInfo( const char* test_case_name, const char* name, const char* type_param, const char* value_param, TypeId fixture_class_id, SetUpTestCaseFunc set_up_tc, TearDownTestCaseFunc tear_down_tc, TestFactoryBase* factory) { TestInfo* const test_info = new TestInfo(test_case_name, name, type_param, value_param, fixture_class_id, factory); GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); return test_info; } #if GTEST_HAS_PARAM_TEST void ReportInvalidTestCaseType(const char* test_case_name, const char* file, int line) { Message errors; errors << "Attempted redefinition of test case " << test_case_name << ".\n" << "All tests in the same test case must use the same test fixture\n" << "class. However, in test case " << test_case_name << ", you tried\n" << "to define a test using a fixture class different from the one\n" << "used earlier. This can happen if the two fixture classes are\n" << "from different namespaces and have the same name. You should\n" << "probably rename one of the classes to put the tests into different\n" << "test cases."; fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), errors.GetString().c_str()); } #endif // GTEST_HAS_PARAM_TEST } // namespace internal namespace { // A predicate that checks the test name of a TestInfo against a known // value. // // This is used for implementation of the TestCase class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestNameIs is copyable. class TestNameIs { public: // Constructor. // // TestNameIs has NO default constructor. explicit TestNameIs(const char* name) : name_(name) {} // Returns true iff the test name of test_info matches name_. bool operator()(const TestInfo * test_info) const { return test_info && internal::String(test_info->name()).Compare(name_) == 0; } private: internal::String name_; }; } // namespace namespace internal { // This method expands all parameterized tests registered with macros TEST_P // and INSTANTIATE_TEST_CASE_P into regular tests and registers those. // This will be done just once during the program runtime. void UnitTestImpl::RegisterParameterizedTests() { #if GTEST_HAS_PARAM_TEST if (!parameterized_tests_registered_) { parameterized_test_registry_.RegisterTests(); parameterized_tests_registered_ = true; } #endif } } // namespace internal // Creates the test object, runs it, records its result, and then // deletes it. void TestInfo::Run() { if (!should_run_) return; // Tells UnitTest where to store test result. internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_info(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); // Notifies the unit test event listeners that a test is about to start. repeater->OnTestStart(*this); const TimeInMillis start = internal::GetTimeInMillis(); impl->os_stack_trace_getter()->UponLeavingGTest(); // Creates the test object. Test* const test = internal::HandleExceptionsInMethodIfSupported( factory_, &internal::TestFactoryBase::CreateTest, "the test fixture's constructor"); // Runs the test only if the test object was created and its // constructor didn't generate a fatal failure. if ((test != NULL) && !Test::HasFatalFailure()) { // This doesn't throw as all user code that can throw are wrapped into // exception handling code. test->Run(); } // Deletes the test object. impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( test, &Test::DeleteSelf_, "the test fixture's destructor"); result_.set_elapsed_time(internal::GetTimeInMillis() - start); // Notifies the unit test event listener that a test has just finished. repeater->OnTestEnd(*this); // Tells UnitTest to stop associating assertion results to this // test. impl->set_current_test_info(NULL); } // class TestCase // Gets the number of successful tests in this test case. int TestCase::successful_test_count() const { return CountIf(test_info_list_, TestPassed); } // Gets the number of failed tests in this test case. int TestCase::failed_test_count() const { return CountIf(test_info_list_, TestFailed); } int TestCase::disabled_test_count() const { return CountIf(test_info_list_, TestDisabled); } // Get the number of tests in this test case that should run. int TestCase::test_to_run_count() const { return CountIf(test_info_list_, ShouldRunTest); } // Gets the number of all tests. int TestCase::total_test_count() const { return static_cast(test_info_list_.size()); } // Creates a TestCase with the given name. // // Arguments: // // name: name of the test case // a_type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase::TestCase(const char* a_name, const char* a_type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) : name_(a_name), type_param_(a_type_param ? new std::string(a_type_param) : NULL), set_up_tc_(set_up_tc), tear_down_tc_(tear_down_tc), should_run_(false), elapsed_time_(0) { } // Destructor of TestCase. TestCase::~TestCase() { // Deletes every Test in the collection. ForEach(test_info_list_, internal::Delete); } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* TestCase::GetTestInfo(int i) const { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. TestInfo* TestCase::GetMutableTestInfo(int i) { const int index = GetElementOr(test_indices_, i, -1); return index < 0 ? NULL : test_info_list_[index]; } // Adds a test to this test case. Will delete the test upon // destruction of the TestCase object. void TestCase::AddTestInfo(TestInfo * test_info) { test_info_list_.push_back(test_info); test_indices_.push_back(static_cast(test_indices_.size())); } // Runs every test in this TestCase. void TestCase::Run() { if (!should_run_) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_case(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); repeater->OnTestCaseStart(*this); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); const internal::TimeInMillis start = internal::GetTimeInMillis(); for (int i = 0; i < total_test_count(); i++) { GetMutableTestInfo(i)->Run(); } elapsed_time_ = internal::GetTimeInMillis() - start; impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); repeater->OnTestCaseEnd(*this); impl->set_current_test_case(NULL); } // Clears the results of all tests in this test case. void TestCase::ClearResult() { ForEach(test_info_list_, TestInfo::ClearTestResult); } // Shuffles the tests in this test case. void TestCase::ShuffleTests(internal::Random* random) { Shuffle(random, &test_indices_); } // Restores the test order to before the first shuffle. void TestCase::UnshuffleTests() { for (size_t i = 0; i < test_indices_.size(); i++) { test_indices_[i] = static_cast(i); } } // Formats a countable noun. Depending on its quantity, either the // singular form or the plural form is used. e.g. // // FormatCountableNoun(1, "formula", "formuli") returns "1 formula". // FormatCountableNoun(5, "book", "books") returns "5 books". static internal::String FormatCountableNoun(int count, const char * singular_form, const char * plural_form) { return internal::String::Format("%d %s", count, count == 1 ? singular_form : plural_form); } // Formats the count of tests. static internal::String FormatTestCount(int test_count) { return FormatCountableNoun(test_count, "test", "tests"); } // Formats the count of test cases. static internal::String FormatTestCaseCount(int test_case_count) { return FormatCountableNoun(test_case_count, "test case", "test cases"); } // Converts a TestPartResult::Type enum to human-friendly string // representation. Both kNonFatalFailure and kFatalFailure are translated // to "Failure", as the user usually doesn't care about the difference // between the two when viewing the test result. static const char * TestPartResultTypeToString(TestPartResult::Type type) { switch (type) { case TestPartResult::kSuccess: return "Success"; case TestPartResult::kNonFatalFailure: case TestPartResult::kFatalFailure: #ifdef _MSC_VER return "error: "; #else return "Failure\n"; #endif default: return "Unknown result type"; } } // Prints a TestPartResult to a String. static internal::String PrintTestPartResultToString( const TestPartResult& test_part_result) { return (Message() << internal::FormatFileLocation(test_part_result.file_name(), test_part_result.line_number()) << " " << TestPartResultTypeToString(test_part_result.type()) << test_part_result.message()).GetString(); } // Prints a TestPartResult. static void PrintTestPartResult(const TestPartResult& test_part_result) { const internal::String& result = PrintTestPartResultToString(test_part_result); printf("%s\n", result.c_str()); fflush(stdout); // If the test program runs in Visual Studio or a debugger, the // following statements add the test part result message to the Output // window such that the user can double-click on it to jump to the // corresponding source code location; otherwise they do nothing. #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // We don't call OutputDebugString*() on Windows Mobile, as printing // to stdout is done by OutputDebugString() there already - we don't // want the same message printed twice. ::OutputDebugStringA(result.c_str()); ::OutputDebugStringA("\n"); #endif } // class PrettyUnitTestResultPrinter namespace internal { enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW }; #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns the character attribute for the given color. WORD GetColorAttribute(GTestColor color) { switch (color) { case COLOR_RED: return FOREGROUND_RED; case COLOR_GREEN: return FOREGROUND_GREEN; case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; default: return 0; } } #else // Returns the ANSI color code for the given color. COLOR_DEFAULT is // an invalid input. const char* GetAnsiColorCode(GTestColor color) { switch (color) { case COLOR_RED: return "1"; case COLOR_GREEN: return "2"; case COLOR_YELLOW: return "3"; default: return NULL; }; } #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE // Returns true iff Google Test should use colors in the output. bool ShouldUseColor(bool stdout_is_tty) { const char* const gtest_color = GTEST_FLAG(color).c_str(); if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { #if GTEST_OS_WINDOWS // On Windows the TERM variable is usually not set, but the // console there does support colors. return stdout_is_tty; #else // On non-Windows platforms, we rely on the TERM variable. const char* const term = posix::GetEnv("TERM"); const bool term_supports_color = String::CStringEquals(term, "xterm") || String::CStringEquals(term, "xterm-color") || String::CStringEquals(term, "xterm-256color") || String::CStringEquals(term, "screen") || String::CStringEquals(term, "linux") || String::CStringEquals(term, "cygwin"); return stdout_is_tty && term_supports_color; #endif // GTEST_OS_WINDOWS } return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || String::CaseInsensitiveCStringEquals(gtest_color, "true") || String::CaseInsensitiveCStringEquals(gtest_color, "t") || String::CStringEquals(gtest_color, "1"); // We take "yes", "true", "t", and "1" as meaning "yes". If the // value is neither one of these nor "auto", we treat it as "no" to // be conservative. } // Helpers for printing colored strings to stdout. Note that on Windows, we // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS const bool use_color = false; #else static const bool in_color_mode = ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); const bool use_color = in_color_mode && (color != COLOR_DEFAULT); #endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS // The '!= 0' comparison is necessary to satisfy MSVC 7.1. if (!use_color) { vprintf(fmt, args); va_end(args); return; } #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // Gets the current text color. CONSOLE_SCREEN_BUFFER_INFO buffer_info; GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); const WORD old_color_attrs = buffer_info.wAttributes; // We need to flush the stream buffers into the console before each // SetConsoleTextAttribute call lest it affect the text that is already // printed but has not yet reached the console. fflush(stdout); SetConsoleTextAttribute(stdout_handle, GetColorAttribute(color) | FOREGROUND_INTENSITY); vprintf(fmt, args); fflush(stdout); // Restores the text color. SetConsoleTextAttribute(stdout_handle, old_color_attrs); #else printf("\033[0;3%sm", GetAnsiColorCode(color)); vprintf(fmt, args); printf("\033[m"); // Resets the terminal to default. #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE va_end(args); } void PrintFullTestCommentIfPresent(const TestInfo& test_info) { const char* const type_param = test_info.type_param(); const char* const value_param = test_info.value_param(); if (type_param != NULL || value_param != NULL) { printf(", where "); if (type_param != NULL) { printf("TypeParam = %s", type_param); if (value_param != NULL) printf(" and "); } if (value_param != NULL) { printf("GetParam() = %s", value_param); } } } // This class implements the TestEventListener interface. // // Class PrettyUnitTestResultPrinter is copyable. class PrettyUnitTestResultPrinter : public TestEventListener { public: PrettyUnitTestResultPrinter() {} static void PrintTestName(const char * test_case, const char * test) { printf("%s.%s", test_case, test); } // The following methods override what's in the TestEventListener class. virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} private: static void PrintFailedTests(const UnitTest& unit_test); internal::String test_case_name_; }; // Fired before each iteration of tests starts. void PrettyUnitTestResultPrinter::OnTestIterationStart( const UnitTest& unit_test, int iteration) { if (GTEST_FLAG(repeat) != 1) printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); const char* const filter = GTEST_FLAG(filter).c_str(); // Prints the filter if it's not *. This reminds the user that some // tests may be skipped. if (!internal::String::CStringEquals(filter, kUniversalFilter)) { ColoredPrintf(COLOR_YELLOW, "Note: %s filter = %s\n", GTEST_NAME_, filter); } if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); ColoredPrintf(COLOR_YELLOW, "Note: This is test shard %d of %s.\n", static_cast(shard_index) + 1, internal::posix::GetEnv(kTestTotalShards)); } if (GTEST_FLAG(shuffle)) { ColoredPrintf(COLOR_YELLOW, "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } ColoredPrintf(COLOR_GREEN, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment set-up.\n"); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { test_case_name_ = test_case.name(); const internal::String counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s", counts.c_str(), test_case_name_.c_str()); if (test_case.type_param() == NULL) { printf("\n"); } else { printf(", where TypeParam = %s\n", test_case.type_param()); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { ColoredPrintf(COLOR_GREEN, "[ RUN ] "); PrintTestName(test_case_name_.c_str(), test_info.name()); printf("\n"); fflush(stdout); } // Called after an assertion failure. void PrettyUnitTestResultPrinter::OnTestPartResult( const TestPartResult& result) { // If the test part succeeded, we don't need to do anything. if (result.type() == TestPartResult::kSuccess) return; // Print failure message from the assertion (e.g. expected this and got that). PrintTestPartResult(result); fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { if (test_info.result()->Passed()) { ColoredPrintf(COLOR_GREEN, "[ OK ] "); } else { ColoredPrintf(COLOR_RED, "[ FAILED ] "); } PrintTestName(test_case_name_.c_str(), test_info.name()); if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info); if (GTEST_FLAG(print_time)) { printf(" (%s ms)\n", internal::StreamableToString( test_info.result()->elapsed_time()).c_str()); } else { printf("\n"); } fflush(stdout); } void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { if (!GTEST_FLAG(print_time)) return; test_case_name_ = test_case.name(); const internal::String counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_case_name_.c_str(), internal::StreamableToString(test_case.elapsed_time()).c_str()); fflush(stdout); } void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( const UnitTest& /*unit_test*/) { ColoredPrintf(COLOR_GREEN, "[----------] "); printf("Global test environment tear-down\n"); fflush(stdout); } // Internal helper for printing the list of failed tests. void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { const int failed_test_count = unit_test.failed_test_count(); if (failed_test_count == 0) { return; } for (int i = 0; i < unit_test.total_test_case_count(); ++i) { const TestCase& test_case = *unit_test.GetTestCase(i); if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { continue; } for (int j = 0; j < test_case.total_test_count(); ++j) { const TestInfo& test_info = *test_case.GetTestInfo(j); if (!test_info.should_run() || test_info.result()->Passed()) { continue; } ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s.%s", test_case.name(), test_info.name()); PrintFullTestCommentIfPresent(test_info); printf("\n"); } } } void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { ColoredPrintf(COLOR_GREEN, "[==========] "); printf("%s from %s ran.", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); if (GTEST_FLAG(print_time)) { printf(" (%s ms total)", internal::StreamableToString(unit_test.elapsed_time()).c_str()); } printf("\n"); ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); int num_failures = unit_test.failed_test_count(); if (!unit_test.Passed()) { const int failed_test_count = unit_test.failed_test_count(); ColoredPrintf(COLOR_RED, "[ FAILED ] "); printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); PrintFailedTests(unit_test); printf("\n%2d FAILED %s\n", num_failures, num_failures == 1 ? "TEST" : "TESTS"); } int num_disabled = unit_test.disabled_test_count(); if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { if (!num_failures) { printf("\n"); // Add a spacer if no FAILURE banner is displayed. } ColoredPrintf(COLOR_YELLOW, " YOU HAVE %d DISABLED %s\n\n", num_disabled, num_disabled == 1 ? "TEST" : "TESTS"); } // Ensure that Google Test output is printed before, e.g., heapchecker output. fflush(stdout); } // End PrettyUnitTestResultPrinter // class TestEventRepeater // // This class forwards events to other event listeners. class TestEventRepeater : public TestEventListener { public: TestEventRepeater() : forwarding_enabled_(true) {} virtual ~TestEventRepeater(); void Append(TestEventListener *listener); TestEventListener* Release(TestEventListener* listener); // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled() const { return forwarding_enabled_; } void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } virtual void OnTestProgramStart(const UnitTest& unit_test); virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); virtual void OnTestCaseStart(const TestCase& test_case); virtual void OnTestStart(const TestInfo& test_info); virtual void OnTestPartResult(const TestPartResult& result); virtual void OnTestEnd(const TestInfo& test_info); virtual void OnTestCaseEnd(const TestCase& test_case); virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); virtual void OnTestProgramEnd(const UnitTest& unit_test); private: // Controls whether events will be forwarded to listeners_. Set to false // in death test child processes. bool forwarding_enabled_; // The list of listeners that receive events. std::vector listeners_; GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); }; TestEventRepeater::~TestEventRepeater() { ForEach(listeners_, Delete); } void TestEventRepeater::Append(TestEventListener *listener) { listeners_.push_back(listener); } // TODO(vladl@google.com): Factor the search functionality into Vector::Find. TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { for (size_t i = 0; i < listeners_.size(); ++i) { if (listeners_[i] == listener) { listeners_.erase(listeners_.begin() + i); return listener; } } return NULL; } // Since most methods are very similar, use macros to reduce boilerplate. // This defines a member that forwards the call to all listeners. #define GTEST_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (size_t i = 0; i < listeners_.size(); i++) { \ listeners_[i]->Name(parameter); \ } \ } \ } // This defines a member that forwards the call to all listeners in reverse // order. #define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ void TestEventRepeater::Name(const Type& parameter) { \ if (forwarding_enabled_) { \ for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { \ listeners_[i]->Name(parameter); \ } \ } \ } GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) #undef GTEST_REPEATER_METHOD_ #undef GTEST_REVERSE_REPEATER_METHOD_ void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (size_t i = 0; i < listeners_.size(); i++) { listeners_[i]->OnTestIterationStart(unit_test, iteration); } } } void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { for (int i = static_cast(listeners_.size()) - 1; i >= 0; i--) { listeners_[i]->OnTestIterationEnd(unit_test, iteration); } } } // End TestEventRepeater // This class generates an XML output file. class XmlUnitTestResultPrinter : public EmptyTestEventListener { public: explicit XmlUnitTestResultPrinter(const char* output_file); virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); private: // Is c a whitespace character that is normalized to a space character // when it appears in an XML attribute value? static bool IsNormalizableWhitespace(char c) { return c == 0x9 || c == 0xA || c == 0xD; } // May c appear in a well-formed XML document? static bool IsValidXmlCharacter(char c) { return IsNormalizableWhitespace(c) || c >= 0x20; } // Returns an XML-escaped copy of the input string str. If // is_attribute is true, the text is meant to appear as an attribute // value, and normalizable whitespace is preserved by replacing it // with character references. static String EscapeXml(const char* str, bool is_attribute); // Returns the given string with all characters invalid in XML removed. static string RemoveInvalidXmlCharacters(const string& str); // Convenience wrapper around EscapeXml when str is an attribute value. static String EscapeXmlAttribute(const char* str) { return EscapeXml(str, true); } // Convenience wrapper around EscapeXml when str is not an attribute value. static String EscapeXmlText(const char* str) { return EscapeXml(str, false); } // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. static void OutputXmlCDataSection(::std::ostream* stream, const char* data); // Streams an XML representation of a TestInfo object. static void OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info); // Prints an XML representation of a TestCase object static void PrintXmlTestCase(FILE* out, const TestCase& test_case); // Prints an XML summary of unit_test to output stream out. static void PrintXmlUnitTest(FILE* out, const UnitTest& unit_test); // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. // When the String is not empty, it includes a space at the beginning, // to delimit this attribute from prior attributes. static String TestPropertiesAsXmlAttributes(const TestResult& result); // The output file. const String output_file_; GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); }; // Creates a new XmlUnitTestResultPrinter. XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) : output_file_(output_file) { if (output_file_.c_str() == NULL || output_file_.empty()) { fprintf(stderr, "XML output file may not be null\n"); fflush(stderr); exit(EXIT_FAILURE); } } // Called after the unit test ends. void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { FILE* xmlout = NULL; FilePath output_file(output_file_); FilePath output_dir(output_file.RemoveFileName()); if (output_dir.CreateDirectoriesRecursively()) { xmlout = posix::FOpen(output_file_.c_str(), "w"); } if (xmlout == NULL) { // TODO(wan): report the reason of the failure. // // We don't do it for now as: // // 1. There is no urgent need for it. // 2. It's a bit involved to make the errno variable thread-safe on // all three operating systems (Linux, Windows, and Mac OS). // 3. To interpret the meaning of errno in a thread-safe way, // we need the strerror_r() function, which is not available on // Windows. fprintf(stderr, "Unable to open file \"%s\"\n", output_file_.c_str()); fflush(stderr); exit(EXIT_FAILURE); } PrintXmlUnitTest(xmlout, unit_test); fclose(xmlout); } // Returns an XML-escaped copy of the input string str. If is_attribute // is true, the text is meant to appear as an attribute value, and // normalizable whitespace is preserved by replacing it with character // references. // // Invalid XML characters in str, if any, are stripped from the output. // It is expected that most, if not all, of the text processed by this // module will consist of ordinary English text. // If this module is ever modified to produce version 1.1 XML output, // most invalid characters can be retained using character references. // TODO(wan): It might be nice to have a minimally invasive, human-readable // escaping scheme for invalid characters, rather than dropping them. String XmlUnitTestResultPrinter::EscapeXml(const char* str, bool is_attribute) { Message m; if (str != NULL) { for (const char* src = str; *src; ++src) { switch (*src) { case '<': m << "<"; break; case '>': m << ">"; break; case '&': m << "&"; break; case '\'': if (is_attribute) m << "'"; else m << '\''; break; case '"': if (is_attribute) m << """; else m << '"'; break; default: if (IsValidXmlCharacter(*src)) { if (is_attribute && IsNormalizableWhitespace(*src)) m << String::Format("&#x%02X;", unsigned(*src)); else m << *src; } break; } } } return m.GetString(); } // Returns the given string with all characters invalid in XML removed. // Currently invalid characters are dropped from the string. An // alternative is to replace them with certain characters such as . or ?. string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(const string& str) { string output; output.reserve(str.size()); for (string::const_iterator it = str.begin(); it != str.end(); ++it) if (IsValidXmlCharacter(*it)) output.push_back(*it); return output; } // The following routines generate an XML representation of a UnitTest // object. // // This is how Google Test concepts map to the DTD: // // <-- corresponds to a UnitTest object // <-- corresponds to a TestCase object // <-- corresponds to a TestInfo object // ... // ... // ... // <-- individual assertion failures // // // // Formats the given time in milliseconds as seconds. std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { ::std::stringstream ss; ss << ms/1000.0; return ss.str(); } // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, const char* data) { const char* segment = data; *stream << ""); if (next_segment != NULL) { stream->write( segment, static_cast(next_segment - segment)); *stream << "]]>]]>"); } else { *stream << segment; break; } } *stream << "]]>"; } // Prints an XML representation of a TestInfo object. // TODO(wan): There is also value in printing properties with the plain printer. void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, const char* test_case_name, const TestInfo& test_info) { const TestResult& result = *test_info.result(); *stream << " \n"; *stream << " "; const string location = internal::FormatCompilerIndependentFileLocation( part.file_name(), part.line_number()); const string message = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(message).c_str()); *stream << "\n"; } } if (failures == 0) *stream << " />\n"; else *stream << " \n"; } // Prints an XML representation of a TestCase object void XmlUnitTestResultPrinter::PrintXmlTestCase(FILE* out, const TestCase& test_case) { fprintf(out, " \n", FormatTimeInMillisAsSeconds(test_case.elapsed_time()).c_str()); for (int i = 0; i < test_case.total_test_count(); ++i) { ::std::stringstream stream; OutputXmlTestInfo(&stream, test_case.name(), *test_case.GetTestInfo(i)); fprintf(out, "%s", StringStreamToString(&stream).c_str()); } fprintf(out, " \n"); } // Prints an XML summary of unit_test to output stream out. void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out, const UnitTest& unit_test) { fprintf(out, "\n"); fprintf(out, "\n"); for (int i = 0; i < unit_test.total_test_case_count(); ++i) PrintXmlTestCase(out, *unit_test.GetTestCase(i)); fprintf(out, "\n"); } // Produces a string representing the test properties in a result as space // delimited XML attributes based on the property key="value" pairs. String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( const TestResult& result) { Message attributes; for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); attributes << " " << property.key() << "=" << "\"" << EscapeXmlAttribute(property.value()) << "\""; } return attributes.GetString(); } // End XmlUnitTestResultPrinter #if GTEST_CAN_STREAM_RESULTS_ // Streams test results to the given port on the given host machine. class StreamingListener : public EmptyTestEventListener { public: // Escapes '=', '&', '%', and '\n' characters in str as "%xx". static string UrlEncode(const char* str); StreamingListener(const string& host, const string& port) : sockfd_(-1), host_name_(host), port_num_(port) { MakeConnection(); Send("gtest_streaming_protocol_version=1.0\n"); } virtual ~StreamingListener() { if (sockfd_ != -1) CloseConnection(); } void OnTestProgramStart(const UnitTest& /* unit_test */) { Send("event=TestProgramStart\n"); } void OnTestProgramEnd(const UnitTest& unit_test) { // Note that Google Test current only report elapsed time for each // test iteration, not for the entire test program. Send(String::Format("event=TestProgramEnd&passed=%d\n", unit_test.Passed())); // Notify the streaming server to stop. CloseConnection(); } void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { Send(String::Format("event=TestIterationStart&iteration=%d\n", iteration)); } void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { Send(String::Format("event=TestIterationEnd&passed=%d&elapsed_time=%sms\n", unit_test.Passed(), StreamableToString(unit_test.elapsed_time()).c_str())); } void OnTestCaseStart(const TestCase& test_case) { Send(String::Format("event=TestCaseStart&name=%s\n", test_case.name())); } void OnTestCaseEnd(const TestCase& test_case) { Send(String::Format("event=TestCaseEnd&passed=%d&elapsed_time=%sms\n", test_case.Passed(), StreamableToString(test_case.elapsed_time()).c_str())); } void OnTestStart(const TestInfo& test_info) { Send(String::Format("event=TestStart&name=%s\n", test_info.name())); } void OnTestEnd(const TestInfo& test_info) { Send(String::Format( "event=TestEnd&passed=%d&elapsed_time=%sms\n", (test_info.result())->Passed(), StreamableToString((test_info.result())->elapsed_time()).c_str())); } void OnTestPartResult(const TestPartResult& test_part_result) { const char* file_name = test_part_result.file_name(); if (file_name == NULL) file_name = ""; Send(String::Format("event=TestPartResult&file=%s&line=%d&message=", UrlEncode(file_name).c_str(), test_part_result.line_number())); Send(UrlEncode(test_part_result.message()) + "\n"); } private: // Creates a client socket and connects to the server. void MakeConnection(); // Closes the socket. void CloseConnection() { GTEST_CHECK_(sockfd_ != -1) << "CloseConnection() can be called only when there is a connection."; close(sockfd_); sockfd_ = -1; } // Sends a string to the socket. void Send(const string& message) { GTEST_CHECK_(sockfd_ != -1) << "Send() can be called only when there is a connection."; const int len = static_cast(message.length()); if (write(sockfd_, message.c_str(), len) != len) { GTEST_LOG_(WARNING) << "stream_result_to: failed to stream to " << host_name_ << ":" << port_num_; } } int sockfd_; // socket file descriptor const string host_name_; const string port_num_; GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); }; // class StreamingListener // Checks if str contains '=', '&', '%' or '\n' characters. If yes, // replaces them by "%xx" where xx is their hexadecimal value. For // example, replaces "=" with "%3D". This algorithm is O(strlen(str)) // in both time and space -- important as the input str may contain an // arbitrarily long test failure message and stack trace. string StreamingListener::UrlEncode(const char* str) { string result; result.reserve(strlen(str) + 1); for (char ch = *str; ch != '\0'; ch = *++str) { switch (ch) { case '%': case '=': case '&': case '\n': result.append(String::Format("%%%02x", static_cast(ch))); break; default: result.push_back(ch); break; } } return result; } void StreamingListener::MakeConnection() { GTEST_CHECK_(sockfd_ == -1) << "MakeConnection() can't be called when there is already a connection."; addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. hints.ai_socktype = SOCK_STREAM; addrinfo* servinfo = NULL; // Use the getaddrinfo() to get a linked list of IP addresses for // the given host name. const int error_num = getaddrinfo( host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); if (error_num != 0) { GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " << gai_strerror(error_num); } // Loop through all the results and connect to the first we can. for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; cur_addr = cur_addr->ai_next) { sockfd_ = socket( cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); if (sockfd_ != -1) { // Connect the client socket to the server socket. if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { close(sockfd_); sockfd_ = -1; } } } freeaddrinfo(servinfo); // all done with this structure if (sockfd_ == -1) { GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to " << host_name_ << ":" << port_num_; } } // End of class Streaming Listener #endif // GTEST_CAN_STREAM_RESULTS__ // Class ScopedTrace // Pushes the given source file location and message onto a per-thread // trace stack maintained by Google Test. // L < UnitTest::mutex_ ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) { TraceInfo trace; trace.file = file; trace.line = line; trace.message = message.GetString(); UnitTest::GetInstance()->PushGTestTrace(trace); } // Pops the info pushed by the c'tor. // L < UnitTest::mutex_ ScopedTrace::~ScopedTrace() { UnitTest::GetInstance()->PopGTestTrace(); } // class OsStackTraceGetter // Returns the current OS stack trace as a String. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. // // L < mutex_ // We use "L < mutex_" to denote that the function may acquire mutex_. String OsStackTraceGetter::CurrentStackTrace(int, int) { return String(""); } // L < mutex_ void OsStackTraceGetter::UponLeavingGTest() { } const char* const OsStackTraceGetter::kElidedFramesMarker = "... " GTEST_NAME_ " internal frames ..."; } // namespace internal // class TestEventListeners TestEventListeners::TestEventListeners() : repeater_(new internal::TestEventRepeater()), default_result_printer_(NULL), default_xml_generator_(NULL) { } TestEventListeners::~TestEventListeners() { delete repeater_; } // Returns the standard listener responsible for the default console // output. Can be removed from the listeners list to shut down default // console output. Note that removing this object from the listener list // with Release transfers its ownership to the user. void TestEventListeners::Append(TestEventListener* listener) { repeater_->Append(listener); } // Removes the given event listener from the list and returns it. It then // becomes the caller's responsibility to delete the listener. Returns // NULL if the listener is not found in the list. TestEventListener* TestEventListeners::Release(TestEventListener* listener) { if (listener == default_result_printer_) default_result_printer_ = NULL; else if (listener == default_xml_generator_) default_xml_generator_ = NULL; return repeater_->Release(listener); } // Returns repeater that broadcasts the TestEventListener events to all // subscribers. TestEventListener* TestEventListeners::repeater() { return repeater_; } // Sets the default_result_printer attribute to the provided listener. // The listener is also added to the listener list and previous // default_result_printer is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { if (default_result_printer_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_result_printer_); default_result_printer_ = listener; if (listener != NULL) Append(listener); } } // Sets the default_xml_generator attribute to the provided listener. The // listener is also added to the listener list and previous // default_xml_generator is removed from it and deleted. The listener can // also be NULL in which case it will not be added to the list. Does // nothing if the previous and the current listener objects are the same. void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { if (default_xml_generator_ != listener) { // It is an error to pass this method a listener that is already in the // list. delete Release(default_xml_generator_); default_xml_generator_ = listener; if (listener != NULL) Append(listener); } } // Controls whether events will be forwarded by the repeater to the // listeners in the list. bool TestEventListeners::EventForwardingEnabled() const { return repeater_->forwarding_enabled(); } void TestEventListeners::SuppressEventForwarding() { repeater_->set_forwarding_enabled(false); } // class UnitTest // Gets the singleton UnitTest object. The first time this method is // called, a UnitTest object is constructed and returned. Consecutive // calls will return the same object. // // We don't protect this under mutex_ as a user is not supposed to // call this before main() starts, from which point on the return // value will never change. UnitTest * UnitTest::GetInstance() { // When compiled with MSVC 7.1 in optimized mode, destroying the // UnitTest object upon exiting the program messes up the exit code, // causing successful tests to appear failed. We have to use a // different implementation in this case to bypass the compiler bug. // This implementation makes the compiler happy, at the cost of // leaking the UnitTest object. // CodeGear C++Builder insists on a public destructor for the // default implementation. Use this implementation to keep good OO // design with private destructor. #if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) static UnitTest* const instance = new UnitTest; return instance; #else static UnitTest instance; return &instance; #endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) } // Gets the number of successful test cases. int UnitTest::successful_test_case_count() const { return impl()->successful_test_case_count(); } // Gets the number of failed test cases. int UnitTest::failed_test_case_count() const { return impl()->failed_test_case_count(); } // Gets the number of all test cases. int UnitTest::total_test_case_count() const { return impl()->total_test_case_count(); } // Gets the number of all test cases that contain at least one test // that should run. int UnitTest::test_case_to_run_count() const { return impl()->test_case_to_run_count(); } // Gets the number of successful tests. int UnitTest::successful_test_count() const { return impl()->successful_test_count(); } // Gets the number of failed tests. int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } // Gets the number of disabled tests. int UnitTest::disabled_test_count() const { return impl()->disabled_test_count(); } // Gets the number of all tests. int UnitTest::total_test_count() const { return impl()->total_test_count(); } // Gets the number of tests that should run. int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } // Gets the elapsed time, in milliseconds. internal::TimeInMillis UnitTest::elapsed_time() const { return impl()->elapsed_time(); } // Returns true iff the unit test passed (i.e. all test cases passed). bool UnitTest::Passed() const { return impl()->Passed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool UnitTest::Failed() const { return impl()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* UnitTest::GetTestCase(int i) const { return impl()->GetTestCase(i); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* UnitTest::GetMutableTestCase(int i) { return impl()->GetMutableTestCase(i); } // Returns the list of event listeners that can be used to track events // inside Google Test. TestEventListeners& UnitTest::listeners() { return *impl()->listeners(); } // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in the // order they were registered. After all tests in the program have // finished, all global test environments will be torn-down in the // *reverse* order they were registered. // // The UnitTest object takes ownership of the given environment. // // We don't protect this under mutex_, as we only support calling it // from the main thread. Environment* UnitTest::AddEnvironment(Environment* env) { if (env == NULL) { return NULL; } impl_->environments().push_back(env); return env; } // Adds a TestPartResult to the current TestResult object. All Google Test // assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call // this to report their results. The user code should use the // assertion macros instead of calling this directly. // L < mutex_ void UnitTest::AddTestPartResult(TestPartResult::Type result_type, const char* file_name, int line_number, const internal::String& message, const internal::String& os_stack_trace) { Message msg; msg << message; internal::MutexLock lock(&mutex_); if (impl_->gtest_trace_stack().size() > 0) { msg << "\n" << GTEST_NAME_ << " trace:"; for (int i = static_cast(impl_->gtest_trace_stack().size()); i > 0; --i) { const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) << " " << trace.message; } } if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { msg << internal::kStackTraceMarker << os_stack_trace; } const TestPartResult result = TestPartResult(result_type, file_name, line_number, msg.GetString().c_str()); impl_->GetTestPartResultReporterForCurrentThread()-> ReportTestPartResult(result); if (result_type != TestPartResult::kSuccess) { // gtest_break_on_failure takes precedence over // gtest_throw_on_failure. This allows a user to set the latter // in the code (perhaps in order to use Google Test assertions // with another testing framework) and specify the former on the // command line for debugging. if (GTEST_FLAG(break_on_failure)) { #if GTEST_OS_WINDOWS // Using DebugBreak on Windows allows gtest to still break into a debugger // when a failure happens and both the --gtest_break_on_failure and // the --gtest_catch_exceptions flags are specified. DebugBreak(); #else // Dereference NULL through a volatile pointer to prevent the compiler // from removing. We use this rather than abort() or __builtin_trap() for // portability: Symbian doesn't implement abort() well, and some debuggers // don't correctly trap abort(). *static_cast(NULL) = 1; #endif // GTEST_OS_WINDOWS } else if (GTEST_FLAG(throw_on_failure)) { #if GTEST_HAS_EXCEPTIONS throw GoogleTestFailureException(result); #else // We cannot call abort() as it generates a pop-up in debug mode // that cannot be suppressed in VC 7.1 or below. exit(1); #endif } } } // Creates and adds a property to the current TestResult. If a property matching // the supplied value already exists, updates its value instead. void UnitTest::RecordPropertyForCurrentTest(const char* key, const char* value) { const TestProperty test_property(key, value); impl_->current_test_result()->RecordProperty(test_property); } // Runs all tests in this UnitTest object and prints the result. // Returns 0 if successful, or 1 otherwise. // // We don't protect this under mutex_, as we only support calling it // from the main thread. int UnitTest::Run() { // Captures the value of GTEST_FLAG(catch_exceptions). This value will be // used for the duration of the program. impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); #if GTEST_HAS_SEH const bool in_death_test_child_process = internal::GTEST_FLAG(internal_run_death_test).length() > 0; // Either the user wants Google Test to catch exceptions thrown by the // tests or this is executing in the context of death test child // process. In either case the user does not want to see pop-up dialogs // about crashes - they are expected. if (impl()->catch_exceptions() || in_death_test_child_process) { # if !GTEST_OS_WINDOWS_MOBILE // SetErrorMode doesn't exist on CE. SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); # endif // !GTEST_OS_WINDOWS_MOBILE # if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE // Death test children can be terminated with _abort(). On Windows, // _abort() can show a dialog with a warning message. This forces the // abort message to go to stderr instead. _set_error_mode(_OUT_TO_STDERR); # endif # if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE // In the debug version, Visual Studio pops up a separate dialog // offering a choice to debug the aborted program. We need to suppress // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement // executed. Google Test will notify the user of any unexpected // failure via stderr. // // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. // Users of prior VC versions shall suffer the agony and pain of // clicking through the countless debug dialogs. // TODO(vladl@google.com): find a way to suppress the abort dialog() in the // debug mode when compiled with VC 7.1 or lower. if (!GTEST_FLAG(break_on_failure)) _set_abort_behavior( 0x0, // Clear the following flags: _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. # endif } #endif // GTEST_HAS_SEH return internal::HandleExceptionsInMethodIfSupported( impl(), &internal::UnitTestImpl::RunAllTests, "auxiliary test code (environments or event listeners)") ? 0 : 1; } // Returns the working directory when the first TEST() or TEST_F() was // executed. const char* UnitTest::original_working_dir() const { return impl_->original_working_dir_.c_str(); } // Returns the TestCase object for the test that's currently running, // or NULL if no test is running. // L < mutex_ const TestCase* UnitTest::current_test_case() const { internal::MutexLock lock(&mutex_); return impl_->current_test_case(); } // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. // L < mutex_ const TestInfo* UnitTest::current_test_info() const { internal::MutexLock lock(&mutex_); return impl_->current_test_info(); } // Returns the random seed used at the start of the current test run. int UnitTest::random_seed() const { return impl_->random_seed(); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // L < mutex_ internal::ParameterizedTestCaseRegistry& UnitTest::parameterized_test_registry() { return impl_->parameterized_test_registry(); } #endif // GTEST_HAS_PARAM_TEST // Creates an empty UnitTest. UnitTest::UnitTest() { impl_ = new internal::UnitTestImpl(this); } // Destructor of UnitTest. UnitTest::~UnitTest() { delete impl_; } // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. // L < mutex_ void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().push_back(trace); } // Pops a trace from the per-thread Google Test trace stack. // L < mutex_ void UnitTest::PopGTestTrace() { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().pop_back(); } namespace internal { UnitTestImpl::UnitTestImpl(UnitTest* parent) : parent_(parent), #ifdef _MSC_VER # pragma warning(push) // Saves the current warning state. # pragma warning(disable:4355) // Temporarily disables warning 4355 // (using this in initializer). default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), # pragma warning(pop) // Restores the warning state again. #else default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), #endif // _MSC_VER global_test_part_result_repoter_( &default_global_test_part_result_reporter_), per_thread_test_part_result_reporter_( &default_per_thread_test_part_result_reporter_), #if GTEST_HAS_PARAM_TEST parameterized_test_registry_(), parameterized_tests_registered_(false), #endif // GTEST_HAS_PARAM_TEST last_death_test_case_(-1), current_test_case_(NULL), current_test_info_(NULL), ad_hoc_test_result_(), os_stack_trace_getter_(NULL), post_flag_parse_init_performed_(false), random_seed_(0), // Will be overridden by the flag before first use. random_(0), // Will be reseeded before first use. elapsed_time_(0), #if GTEST_HAS_DEATH_TEST internal_run_death_test_flag_(NULL), death_test_factory_(new DefaultDeathTestFactory), #endif // Will be overridden by the flag before first use. catch_exceptions_(false) { listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter); } UnitTestImpl::~UnitTestImpl() { // Deletes every TestCase. ForEach(test_cases_, internal::Delete); // Deletes every Environment. ForEach(environments_, internal::Delete); delete os_stack_trace_getter_; } #if GTEST_HAS_DEATH_TEST // Disables event forwarding if the control is currently in a death test // subprocess. Must not be called before InitGoogleTest. void UnitTestImpl::SuppressTestEventsIfInSubprocess() { if (internal_run_death_test_flag_.get() != NULL) listeners()->SuppressEventForwarding(); } #endif // GTEST_HAS_DEATH_TEST // Initializes event listeners performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureXmlOutput() { const String& output_format = UnitTestOptions::GetOutputFormat(); if (output_format == "xml") { listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter( UnitTestOptions::GetAbsolutePathToOutputFile().c_str())); } else if (output_format != "") { printf("WARNING: unrecognized output format \"%s\" ignored.\n", output_format.c_str()); fflush(stdout); } } #if GTEST_CAN_STREAM_RESULTS_ // Initializes event listeners for streaming test results in String form. // Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureStreamingOutput() { const string& target = GTEST_FLAG(stream_result_to); if (!target.empty()) { const size_t pos = target.find(':'); if (pos != string::npos) { listeners()->Append(new StreamingListener(target.substr(0, pos), target.substr(pos+1))); } else { printf("WARNING: unrecognized streaming target \"%s\" ignored.\n", target.c_str()); fflush(stdout); } } } #endif // GTEST_CAN_STREAM_RESULTS_ // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void UnitTestImpl::PostFlagParsingInit() { // Ensures that this function does not execute more than once. if (!post_flag_parse_init_performed_) { post_flag_parse_init_performed_ = true; #if GTEST_HAS_DEATH_TEST InitDeathTestSubprocessControlInfo(); SuppressTestEventsIfInSubprocess(); #endif // GTEST_HAS_DEATH_TEST // Registers parameterized tests. This makes parameterized tests // available to the UnitTest reflection API without running // RUN_ALL_TESTS. RegisterParameterizedTests(); // Configures listeners for XML output. This makes it possible for users // to shut down the default XML output before invoking RUN_ALL_TESTS. ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Configures listeners for streaming test results to the specified server. ConfigureStreamingOutput(); #endif // GTEST_CAN_STREAM_RESULTS_ } } // A predicate that checks the name of a TestCase against a known // value. // // This is used for implementation of the UnitTest class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // // TestCaseNameIs is copyable. class TestCaseNameIs { public: // Constructor. explicit TestCaseNameIs(const String& name) : name_(name) {} // Returns true iff the name of test_case matches name_. bool operator()(const TestCase* test_case) const { return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; } private: String name_; }; // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. It's the CALLER'S // RESPONSIBILITY to ensure that this function is only called WHEN THE // TESTS ARE NOT SHUFFLED. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test case's type parameter, or NULL if // this is not a typed or a type-parameterized test case. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc) { // Can we find a TestCase with the given name? const std::vector::const_iterator test_case = std::find_if(test_cases_.begin(), test_cases_.end(), TestCaseNameIs(test_case_name)); if (test_case != test_cases_.end()) return *test_case; // No. Let's create one. TestCase* const new_test_case = new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); // Is this a death test case? if (internal::UnitTestOptions::MatchesFilter(String(test_case_name), kDeathTestCaseFilter)) { // Yes. Inserts the test case after the last death test case // defined so far. This only works when the test cases haven't // been shuffled. Otherwise we may end up running a death test // after a non-death test. ++last_death_test_case_; test_cases_.insert(test_cases_.begin() + last_death_test_case_, new_test_case); } else { // No. Appends to the end of the list. test_cases_.push_back(new_test_case); } test_case_indices_.push_back(static_cast(test_case_indices_.size())); return new_test_case; } // Helpers for setting up / tearing down the given environment. They // are for use in the ForEach() function. static void SetUpEnvironment(Environment* env) { env->SetUp(); } static void TearDownEnvironment(Environment* env) { env->TearDown(); } // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, the test is considered to be failed, but the // rest of the tests will still be run. // // When parameterized tests are enabled, it expands and registers // parameterized tests first in RegisterParameterizedTests(). // All other functions called from RunAllTests() may safely assume that // parameterized tests are ready to be counted and run. bool UnitTestImpl::RunAllTests() { // Makes sure InitGoogleTest() was called. if (!GTestIsInitialized()) { printf("%s", "\nThis test program did NOT call ::testing::InitGoogleTest " "before calling RUN_ALL_TESTS(). Please fix it.\n"); return false; } // Do not run any test if the --help flag was specified. if (g_help_flag) return true; // Repeats the call to the post-flag parsing initialization in case the // user didn't call InitGoogleTest. PostFlagParsingInit(); // Even if sharding is not on, test runners may want to use the // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding // protocol. internal::WriteToShardStatusFileIfNeeded(); // True iff we are in a subprocess for running a thread-safe-style // death test. bool in_subprocess_for_death_test = false; #if GTEST_HAS_DEATH_TEST in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); #endif // GTEST_HAS_DEATH_TEST const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, in_subprocess_for_death_test); // Compares the full test names with the filter to decide which // tests to run. const bool has_tests_to_run = FilterTests(should_shard ? HONOR_SHARDING_PROTOCOL : IGNORE_SHARDING_PROTOCOL) > 0; // Lists the tests and exits if the --gtest_list_tests flag was specified. if (GTEST_FLAG(list_tests)) { // This must be called *after* FilterTests() has been called. ListTestsMatchingFilter(); return true; } random_seed_ = GTEST_FLAG(shuffle) ? GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; // True iff at least one test has failed. bool failed = false; TestEventListener* repeater = listeners()->repeater(); repeater->OnTestProgramStart(*parent_); // How many times to repeat the tests? We don't want to repeat them // when we are inside the subprocess of a death test. const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); // Repeats forever if the repeat count is negative. const bool forever = repeat < 0; for (int i = 0; forever || i != repeat; i++) { // We want to preserve failures generated by ad-hoc test // assertions executed before RUN_ALL_TESTS(). ClearNonAdHocTestResult(); const TimeInMillis start = GetTimeInMillis(); // Shuffles test cases and tests if requested. if (has_tests_to_run && GTEST_FLAG(shuffle)) { random()->Reseed(random_seed_); // This should be done before calling OnTestIterationStart(), // such that a test event listener can see the actual test order // in the event. ShuffleTests(); } // Tells the unit test event listeners that the tests are about to start. repeater->OnTestIterationStart(*parent_, i); // Runs each test case if there is at least one test to run. if (has_tests_to_run) { // Sets up all environments beforehand. repeater->OnEnvironmentsSetUpStart(*parent_); ForEach(environments_, SetUpEnvironment); repeater->OnEnvironmentsSetUpEnd(*parent_); // Runs the tests only if there was no fatal failure during global // set-up. if (!Test::HasFatalFailure()) { for (int test_index = 0; test_index < total_test_case_count(); test_index++) { GetMutableTestCase(test_index)->Run(); } } // Tears down all environments in reverse order afterwards. repeater->OnEnvironmentsTearDownStart(*parent_); std::for_each(environments_.rbegin(), environments_.rend(), TearDownEnvironment); repeater->OnEnvironmentsTearDownEnd(*parent_); } elapsed_time_ = GetTimeInMillis() - start; // Tells the unit test event listener that the tests have just finished. repeater->OnTestIterationEnd(*parent_, i); // Gets the result and clears it. if (!Passed()) { failed = true; } // Restores the original test order after the iteration. This // allows the user to quickly repro a failure that happens in the // N-th iteration without repeating the first (N - 1) iterations. // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in // case the user somehow changes the value of the flag somewhere // (it's always safe to unshuffle the tests). UnshuffleTests(); if (GTEST_FLAG(shuffle)) { // Picks a new random seed for each iteration. random_seed_ = GetNextRandomSeed(random_seed_); } } repeater->OnTestProgramEnd(*parent_); return !failed; } // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded() { const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); if (test_shard_file != NULL) { FILE* const file = posix::FOpen(test_shard_file, "w"); if (file == NULL) { ColoredPrintf(COLOR_RED, "Could not write to the test shard status file \"%s\" " "specified by the %s environment variable.\n", test_shard_file, kTestShardStatusFile); fflush(stdout); exit(EXIT_FAILURE); } fclose(file); } } // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (i.e., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. bool ShouldShard(const char* total_shards_env, const char* shard_index_env, bool in_subprocess_for_death_test) { if (in_subprocess_for_death_test) { return false; } const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); if (total_shards == -1 && shard_index == -1) { return false; } else if (total_shards == -1 && shard_index != -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestShardIndex << " = " << shard_index << ", but have left " << kTestTotalShards << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { const Message msg = Message() << "Invalid environment variables: you have " << kTestTotalShards << " = " << total_shards << ", but have left " << kTestShardIndex << " unset.\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { const Message msg = Message() << "Invalid environment variables: we require 0 <= " << kTestShardIndex << " < " << kTestTotalShards << ", but you have " << kTestShardIndex << "=" << shard_index << ", " << kTestTotalShards << "=" << total_shards << ".\n"; ColoredPrintf(COLOR_RED, msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } return total_shards > 1; } // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error // and aborts. Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { const char* str_val = posix::GetEnv(var); if (str_val == NULL) { return default_val; } Int32 result; if (!ParseInt32(Message() << "The value of environment variable " << var, str_val, &result)) { exit(EXIT_FAILURE); } return result; } // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { return (test_id % total_shards) == shard_index; } // Compares the name of each test with the user-specified filter to // decide whether the test should be run, then records the result in // each TestCase and TestInfo object. // If shard_tests == true, further filters tests based on sharding // variables in the environment - see // http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide. // Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestTotalShards, -1) : -1; const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? Int32FromEnvOrDie(kTestShardIndex, -1) : -1; // num_runnable_tests are the number of tests that will // run across all shards (i.e., match filter and are not disabled). // num_selected_tests are the number of tests to be run on // this shard. int num_runnable_tests = 0; int num_selected_tests = 0; for (size_t i = 0; i < test_cases_.size(); i++) { TestCase* const test_case = test_cases_[i]; const String &test_case_name = test_case->name(); test_case->set_should_run(false); for (size_t j = 0; j < test_case->test_info_list().size(); j++) { TestInfo* const test_info = test_case->test_info_list()[j]; const String test_name(test_info->name()); // A test is disabled if test case name or test name matches // kDisableTestFilter. const bool is_disabled = internal::UnitTestOptions::MatchesFilter(test_case_name, kDisableTestFilter) || internal::UnitTestOptions::MatchesFilter(test_name, kDisableTestFilter); test_info->is_disabled_ = is_disabled; const bool matches_filter = internal::UnitTestOptions::FilterMatchesTest(test_case_name, test_name); test_info->matches_filter_ = matches_filter; const bool is_runnable = (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && matches_filter; const bool is_selected = is_runnable && (shard_tests == IGNORE_SHARDING_PROTOCOL || ShouldRunTestOnShard(total_shards, shard_index, num_runnable_tests)); num_runnable_tests += is_runnable; num_selected_tests += is_selected; test_info->should_run_ = is_selected; test_case->set_should_run(test_case->should_run() || is_selected); } } return num_selected_tests; } // Prints the names of the tests matching the user-specified filter flag. void UnitTestImpl::ListTestsMatchingFilter() { for (size_t i = 0; i < test_cases_.size(); i++) { const TestCase* const test_case = test_cases_[i]; bool printed_test_case_name = false; for (size_t j = 0; j < test_case->test_info_list().size(); j++) { const TestInfo* const test_info = test_case->test_info_list()[j]; if (test_info->matches_filter_) { if (!printed_test_case_name) { printed_test_case_name = true; printf("%s.\n", test_case->name()); } printf(" %s\n", test_info->name()); } } } fflush(stdout); } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter are // the same; otherwise, deletes the old getter and makes the input the // current getter. void UnitTestImpl::set_os_stack_trace_getter( OsStackTraceGetterInterface* getter) { if (os_stack_trace_getter_ != getter) { delete os_stack_trace_getter_; os_stack_trace_getter_ = getter; } } // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { if (os_stack_trace_getter_ == NULL) { os_stack_trace_getter_ = new OsStackTraceGetter; } return os_stack_trace_getter_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* UnitTestImpl::current_test_result() { return current_test_info_ ? &(current_test_info_->result_) : &ad_hoc_test_result_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void UnitTestImpl::ShuffleTests() { // Shuffles the death test cases. ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); // Shuffles the non-death test cases. ShuffleRange(random(), last_death_test_case_ + 1, static_cast(test_cases_.size()), &test_case_indices_); // Shuffles the tests inside each test case. for (size_t i = 0; i < test_cases_.size(); i++) { test_cases_[i]->ShuffleTests(random()); } } // Restores the test cases and tests to their order before the first shuffle. void UnitTestImpl::UnshuffleTests() { for (size_t i = 0; i < test_cases_.size(); i++) { // Unshuffles the tests in each test case. test_cases_[i]->UnshuffleTests(); // Resets the index of each test case. test_case_indices_[i] = static_cast(i); } } // Returns the current OS stack trace as a String. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. String GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, int skip_count) { // We pass skip_count + 1 to skip this wrapper function in addition // to what the user really wants to skip. return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); } // Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to // suppress unreachable code warnings. namespace { class ClassUniqueToAlwaysTrue {}; } bool IsTrue(bool condition) { return condition; } bool AlwaysTrue() { #if GTEST_HAS_EXCEPTIONS // This condition is always false so AlwaysTrue() never actually throws, // but it makes the compiler think that it may throw. if (IsTrue(false)) throw ClassUniqueToAlwaysTrue(); #endif // GTEST_HAS_EXCEPTIONS return true; } // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged // and returns false. None of pstr, *pstr, and prefix can be NULL. bool SkipPrefix(const char* prefix, const char** pstr) { const size_t prefix_len = strlen(prefix); if (strncmp(*pstr, prefix, prefix_len) == 0) { *pstr += prefix_len; return true; } return false; } // Parses a string as a command line flag. The string should have // the format "--flag=value". When def_optional is true, the "=value" // part can be omitted. // // Returns the value of the flag, or NULL if the parsing failed. const char* ParseFlagValue(const char* str, const char* flag, bool def_optional) { // str and flag must not be NULL. if (str == NULL || flag == NULL) return NULL; // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. const String flag_str = String::Format("--%s%s", GTEST_FLAG_PREFIX_, flag); const size_t flag_len = flag_str.length(); if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; // Skips the flag name. const char* flag_end = str + flag_len; // When def_optional is true, it's OK to not have a "=value" part. if (def_optional && (flag_end[0] == '\0')) { return flag_end; } // If def_optional is true and there are more characters after the // flag name, or if def_optional is false, there must be a '=' after // the flag name. if (flag_end[0] != '=') return NULL; // Returns the string after "=". return flag_end + 1; } // Parses a string for a bool flag, in the form of either // "--flag=value" or "--flag". // // In the former case, the value is taken as true as long as it does // not start with '0', 'f', or 'F'. // // In the latter case, the value is taken as true. // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseBoolFlag(const char* str, const char* flag, bool* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, true); // Aborts if the parsing failed. if (value_str == NULL) return false; // Converts the string value to a bool. *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); return true; } // Parses a string for an Int32 flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. return ParseInt32(Message() << "The value of flag --" << flag, value_str, value); } // Parses a string for a string flag, in the form of // "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. bool ParseStringFlag(const char* str, const char* flag, String* value) { // Gets the value of the flag as a string. const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. if (value_str == NULL) return false; // Sets *value to the value of the flag. *value = value_str; return true; } // Determines whether a string has a prefix that Google Test uses for its // flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. // If Google Test detects that a command line flag has its prefix but is not // recognized, it will print its help message. Flags starting with // GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test // internal flags and do not trigger the help message. static bool HasGoogleTestFlagPrefix(const char* str) { return (SkipPrefix("--", &str) || SkipPrefix("-", &str) || SkipPrefix("/", &str)) && !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); } // Prints a string containing code-encoded text. The following escape // sequences can be used in the string to control the text color: // // @@ prints a single '@' character. // @R changes the color to red. // @G changes the color to green. // @Y changes the color to yellow. // @D changes to the default terminal text color. // // TODO(wan@google.com): Write tests for this once we add stdout // capturing to Google Test. static void PrintColorEncoded(const char* str) { GTestColor color = COLOR_DEFAULT; // The current color. // Conceptually, we split the string into segments divided by escape // sequences. Then we print one segment at a time. At the end of // each iteration, the str pointer advances to the beginning of the // next segment. for (;;) { const char* p = strchr(str, '@'); if (p == NULL) { ColoredPrintf(color, "%s", str); return; } ColoredPrintf(color, "%s", String(str, p - str).c_str()); const char ch = p[1]; str = p + 2; if (ch == '@') { ColoredPrintf(color, "@"); } else if (ch == 'D') { color = COLOR_DEFAULT; } else if (ch == 'R') { color = COLOR_RED; } else if (ch == 'G') { color = COLOR_GREEN; } else if (ch == 'Y') { color = COLOR_YELLOW; } else { --str; } } } static const char kColorEncodedHelpMessage[] = "This program contains tests written using " GTEST_NAME_ ". You can use the\n" "following command line flags to control its behavior:\n" "\n" "Test Selection:\n" " @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" " List the names of all tests instead of running them. The name of\n" " TEST(Foo, Bar) is \"Foo.Bar\".\n" " @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" "[@G-@YNEGATIVE_PATTERNS]@D\n" " Run only the tests whose name matches one of the positive patterns but\n" " none of the negative patterns. '?' matches any single character; '*'\n" " matches any substring; ':' separates two patterns.\n" " @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" " Run all disabled tests too.\n" "\n" "Test Execution:\n" " @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" " Run the tests repeatedly; use a negative count to repeat forever.\n" " @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" " Randomize tests' orders on every iteration.\n" " @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" " Random number seed to use for shuffling test orders (between 1 and\n" " 99999, or 0 to use a seed based on the current time).\n" "\n" "Test Output:\n" " @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" " Enable/disable colored output. The default is @Gauto@D.\n" " -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" " Don't print the elapsed time of each test.\n" " @G--" GTEST_FLAG_PREFIX_ "output=xml@Y[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" " Generate an XML report in the given directory or with the given file\n" " name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" #if GTEST_CAN_STREAM_RESULTS_ " @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" " Stream test results to the given server.\n" #endif // GTEST_CAN_STREAM_RESULTS_ "\n" "Assertion Behavior:\n" #if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" " Set the default death test style.\n" #endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS " @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" " Turn assertion failures into debugger break-points.\n" " @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" " Turn assertion failures into C++ exceptions.\n" " @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" " Do not report exceptions as test failures. Instead, allow them\n" " to crash the program or throw a pop-up (on Windows).\n" "\n" "Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " "the corresponding\n" "environment variable of a flag (all letters in upper-case). For example, to\n" "disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ "color=no@D or set\n" "the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" "\n" "For more information, please read the " GTEST_NAME_ " documentation at\n" "@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" "(not one in your own code or tests), please report it to\n" "@G<" GTEST_DEV_EMAIL_ ">@D.\n"; // Parses the command line for Google Test flags, without initializing // other parts of Google Test. The type parameter CharType can be // instantiated to either char or wchar_t. template void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { for (int i = 1; i < *argc; i++) { const String arg_string = StreamableToString(argv[i]); const char* const arg = arg_string.c_str(); using internal::ParseBoolFlag; using internal::ParseInt32Flag; using internal::ParseStringFlag; // Do we see a Google Test flag? if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, >EST_FLAG(also_run_disabled_tests)) || ParseBoolFlag(arg, kBreakOnFailureFlag, >EST_FLAG(break_on_failure)) || ParseBoolFlag(arg, kCatchExceptionsFlag, >EST_FLAG(catch_exceptions)) || ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || ParseStringFlag(arg, kDeathTestStyleFlag, >EST_FLAG(death_test_style)) || ParseBoolFlag(arg, kDeathTestUseFork, >EST_FLAG(death_test_use_fork)) || ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || ParseStringFlag(arg, kInternalRunDeathTestFlag, >EST_FLAG(internal_run_death_test)) || ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || ParseInt32Flag(arg, kStackTraceDepthFlag, >EST_FLAG(stack_trace_depth)) || ParseStringFlag(arg, kStreamResultToFlag, >EST_FLAG(stream_result_to)) || ParseBoolFlag(arg, kThrowOnFailureFlag, >EST_FLAG(throw_on_failure)) ) { // Yes. Shift the remainder of the argv list left by one. Note // that argv has (*argc + 1) elements, the last one always being // NULL. The following loop moves the trailing NULL element as // well. for (int j = i; j != *argc; j++) { argv[j] = argv[j + 1]; } // Decrements the argument count. (*argc)--; // We also need to decrement the iterator as we just removed // an element. i--; } else if (arg_string == "--help" || arg_string == "-h" || arg_string == "-?" || arg_string == "/?" || HasGoogleTestFlagPrefix(arg)) { // Both help flag and unrecognized Google Test flags (excluding // internal ones) trigger help display. g_help_flag = true; } } if (g_help_flag) { // We print the help here instead of in RUN_ALL_TESTS(), as the // latter may not be called at all if the user is using Google // Test with another testing framework. PrintColorEncoded(kColorEncodedHelpMessage); } } // Parses the command line for Google Test flags, without initializing // other parts of Google Test. void ParseGoogleTestFlagsOnly(int* argc, char** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); } // The internal implementation of InitGoogleTest(). // // The type parameter CharType can be instantiated to either char or // wchar_t. template void InitGoogleTestImpl(int* argc, CharType** argv) { g_init_gtest_count++; // We don't want to run the initialization code twice. if (g_init_gtest_count != 1) return; if (*argc <= 0) return; internal::g_executable_path = internal::StreamableToString(argv[0]); #if GTEST_HAS_DEATH_TEST g_argvs.clear(); for (int i = 0; i != *argc; i++) { g_argvs.push_back(StreamableToString(argv[i])); } #endif // GTEST_HAS_DEATH_TEST ParseGoogleTestFlagsOnly(argc, argv); GetUnitTestImpl()->PostFlagParsingInit(); } } // namespace internal // Initializes Google Test. This must be called before calling // RUN_ALL_TESTS(). In particular, it parses a command line for the // flags that Google Test recognizes. Whenever a Google Test flag is // seen, it is removed from argv, and *argc is decremented. // // No value is returned. Instead, the Google Test flag variables are // updated. // // Calling the function for the second time has no user-visible effect. void InitGoogleTest(int* argc, char** argv) { internal::InitGoogleTestImpl(argc, argv); } // This overloaded version can be used in Windows programs compiled in // UNICODE mode. void InitGoogleTest(int* argc, wchar_t** argv) { internal::InitGoogleTestImpl(argc, argv); } } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-printers.cc0000644015303500042660000002741212151455365020152 00000000000000// Copyright 2007, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Author: wan@google.com (Zhanyong Wan) // Google Test - The Google C++ Testing Framework // // This file implements a universal value printer that can print a // value of any type T: // // void ::testing::internal::UniversalPrinter::Print(value, ostream_ptr); // // It uses the << operator when possible, and prints the bytes in the // object otherwise. A user can override its behavior for a class // type Foo by defining either operator<<(::std::ostream&, const Foo&) // or void PrintTo(const Foo&, ::std::ostream*) in the namespace that // defines Foo. #include "gtest/gtest-printers.h" #include #include #include // NOLINT #include #include "gtest/internal/gtest-port.h" namespace testing { namespace { using ::std::ostream; #if GTEST_OS_WINDOWS_MOBILE // Windows CE does not define _snprintf_s. # define snprintf _snprintf #elif _MSC_VER >= 1400 // VC 8.0 and later deprecate snprintf and _snprintf. # define snprintf _snprintf_s #elif _MSC_VER # define snprintf _snprintf #endif // GTEST_OS_WINDOWS_MOBILE // Prints a segment of bytes in the given object. void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, size_t count, ostream* os) { char text[5] = ""; for (size_t i = 0; i != count; i++) { const size_t j = start + i; if (i != 0) { // Organizes the bytes into groups of 2 for easy parsing by // human. if ((j % 2) == 0) *os << ' '; else *os << '-'; } snprintf(text, sizeof(text), "%02X", obj_bytes[j]); *os << text; } } // Prints the bytes in the given value to the given ostream. void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, ostream* os) { // Tells the user how big the object is. *os << count << "-byte object <"; const size_t kThreshold = 132; const size_t kChunkSize = 64; // If the object size is bigger than kThreshold, we'll have to omit // some details by printing only the first and the last kChunkSize // bytes. // TODO(wan): let the user control the threshold using a flag. if (count < kThreshold) { PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); } else { PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); *os << " ... "; // Rounds up to 2-byte boundary. const size_t resume_pos = (count - kChunkSize + 1)/2*2; PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); } *os << ">"; } } // namespace namespace internal2 { // Delegates to PrintBytesInObjectToImpl() to print the bytes in the // given object. The delegation simplifies the implementation, which // uses the << operator and thus is easier done outside of the // ::testing::internal namespace, which contains a << operator that // sometimes conflicts with the one in STL. void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, ostream* os) { PrintBytesInObjectToImpl(obj_bytes, count, os); } } // namespace internal2 namespace internal { // Depending on the value of a char (or wchar_t), we print it in one // of three formats: // - as is if it's a printable ASCII (e.g. 'a', '2', ' '), // - as a hexidecimal escape sequence (e.g. '\x7F'), or // - as a special escape sequence (e.g. '\r', '\n'). enum CharFormat { kAsIs, kHexEscape, kSpecialEscape }; // Returns true if c is a printable ASCII character. We test the // value of c directly instead of calling isprint(), which is buggy on // Windows Mobile. inline bool IsPrintableAscii(wchar_t c) { return 0x20 <= c && c <= 0x7E; } // Prints a wide or narrow char c as a character literal without the // quotes, escaping it when necessary; returns how c was formatted. // The template argument UnsignedChar is the unsigned version of Char, // which is the type of c. template static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { switch (static_cast(c)) { case L'\0': *os << "\\0"; break; case L'\'': *os << "\\'"; break; case L'\\': *os << "\\\\"; break; case L'\a': *os << "\\a"; break; case L'\b': *os << "\\b"; break; case L'\f': *os << "\\f"; break; case L'\n': *os << "\\n"; break; case L'\r': *os << "\\r"; break; case L'\t': *os << "\\t"; break; case L'\v': *os << "\\v"; break; default: if (IsPrintableAscii(c)) { *os << static_cast(c); return kAsIs; } else { *os << String::Format("\\x%X", static_cast(c)); return kHexEscape; } } return kSpecialEscape; } // Prints a char c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsWideStringLiteralTo(wchar_t c, ostream* os) { switch (c) { case L'\'': *os << "'"; return kAsIs; case L'"': *os << "\\\""; return kSpecialEscape; default: return PrintAsCharLiteralTo(c, os); } } // Prints a char c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsNarrowStringLiteralTo(char c, ostream* os) { return PrintAsWideStringLiteralTo(static_cast(c), os); } // Prints a wide or narrow character c and its code. '\0' is printed // as "'\\0'", other unprintable characters are also properly escaped // using the standard C++ escape sequence. The template argument // UnsignedChar is the unsigned version of Char, which is the type of c. template void PrintCharAndCodeTo(Char c, ostream* os) { // First, print c as a literal in the most readable form we can find. *os << ((sizeof(c) > 1) ? "L'" : "'"); const CharFormat format = PrintAsCharLiteralTo(c, os); *os << "'"; // To aid user debugging, we also print c's code in decimal, unless // it's 0 (in which case c was printed as '\\0', making the code // obvious). if (c == 0) return; *os << " (" << String::Format("%d", c).c_str(); // For more convenience, we print c's code again in hexidecimal, // unless c was already printed in the form '\x##' or the code is in // [1, 9]. if (format == kHexEscape || (1 <= c && c <= 9)) { // Do nothing. } else { *os << String::Format(", 0x%X", static_cast(c)).c_str(); } *os << ")"; } void PrintTo(unsigned char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } void PrintTo(signed char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its code. L'\0' is printed as "L'\\0'". void PrintTo(wchar_t wc, ostream* os) { PrintCharAndCodeTo(wc, os); } // Prints the given array of characters to the ostream. // The array starts at *begin, the length is len, it may include '\0' characters // and may not be null-terminated. static void PrintCharsAsStringTo(const char* begin, size_t len, ostream* os) { *os << "\""; bool is_previous_hex = false; for (size_t index = 0; index < len; ++index) { const char cur = begin[index]; if (is_previous_hex && IsXDigit(cur)) { // Previous character is of '\x..' form and this character can be // interpreted as another hexadecimal digit in its number. Break string to // disambiguate. *os << "\" \""; } is_previous_hex = PrintAsNarrowStringLiteralTo(cur, os) == kHexEscape; } *os << "\""; } // Prints a (const) char array of 'len' elements, starting at address 'begin'. void UniversalPrintArray(const char* begin, size_t len, ostream* os) { PrintCharsAsStringTo(begin, len, os); } // Prints the given array of wide characters to the ostream. // The array starts at *begin, the length is len, it may include L'\0' // characters and may not be null-terminated. static void PrintWideCharsAsStringTo(const wchar_t* begin, size_t len, ostream* os) { *os << "L\""; bool is_previous_hex = false; for (size_t index = 0; index < len; ++index) { const wchar_t cur = begin[index]; if (is_previous_hex && isascii(cur) && IsXDigit(static_cast(cur))) { // Previous character is of '\x..' form and this character can be // interpreted as another hexadecimal digit in its number. Break string to // disambiguate. *os << "\" L\""; } is_previous_hex = PrintAsWideStringLiteralTo(cur, os) == kHexEscape; } *os << "\""; } // Prints the given C string to the ostream. void PrintTo(const char* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintCharsAsStringTo(s, strlen(s), os); } } // MSVC compiler can be configured to define whar_t as a typedef // of unsigned short. Defining an overload for const wchar_t* in that case // would cause pointers to unsigned shorts be printed as wide strings, // possibly accessing more memory than intended and causing invalid // memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when // wchar_t is implemented as a native type. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Prints the given wide C string to the ostream. void PrintTo(const wchar_t* s, ostream* os) { if (s == NULL) { *os << "NULL"; } else { *os << ImplicitCast_(s) << " pointing to "; PrintWideCharsAsStringTo(s, wcslen(s), os); } } #endif // wchar_t is native // Prints a ::string object. #if GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_STRING void PrintStringTo(const ::std::string& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); } // Prints a ::wstring object. #if GTEST_HAS_GLOBAL_WSTRING void PrintWideStringTo(const ::wstring& s, ostream* os) { PrintWideCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_GLOBAL_WSTRING #if GTEST_HAS_STD_WSTRING void PrintWideStringTo(const ::std::wstring& s, ostream* os) { PrintWideCharsAsStringTo(s.data(), s.size(), os); } #endif // GTEST_HAS_STD_WSTRING } // namespace internal } // namespace testing jellyfish-1.1.11/unit_tests/gtest/src/gtest-internal-inl.h0000644015303500042660000011654012151455365020543 00000000000000// Copyright 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Utility functions and classes used by the Google C++ testing framework. // // Author: wan@google.com (Zhanyong Wan) // // This file contains purely Google Test's internal implementation. Please // DO NOT #INCLUDE IT IN A USER PROGRAM. #ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ #define GTEST_SRC_GTEST_INTERNAL_INL_H_ // GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is // part of Google Test's implementation; otherwise it's undefined. #if !GTEST_IMPLEMENTATION_ // A user is trying to include this from his code - just say no. # error "gtest-internal-inl.h is part of Google Test's internal implementation." # error "It must not be included except by Google Test itself." #endif // GTEST_IMPLEMENTATION_ #ifndef _WIN32_WCE # include #endif // !_WIN32_WCE #include #include // For strtoll/_strtoul64/malloc/free. #include // For memmove. #include #include #include #include "gtest/internal/gtest-port.h" #if GTEST_OS_WINDOWS # include // NOLINT #endif // GTEST_OS_WINDOWS #include "gtest/gtest.h" // NOLINT #include "gtest/gtest-spi.h" namespace testing { // Declares the flags. // // We don't want the users to modify this flag in the code, but want // Google Test's own unit tests to be able to access it. Therefore we // declare it here as opposed to in gtest.h. GTEST_DECLARE_bool_(death_test_use_fork); namespace internal { // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; // Names of the flags (needed for parsing Google Test flags). const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; const char kBreakOnFailureFlag[] = "break_on_failure"; const char kCatchExceptionsFlag[] = "catch_exceptions"; const char kColorFlag[] = "color"; const char kFilterFlag[] = "filter"; const char kListTestsFlag[] = "list_tests"; const char kOutputFlag[] = "output"; const char kPrintTimeFlag[] = "print_time"; const char kRandomSeedFlag[] = "random_seed"; const char kRepeatFlag[] = "repeat"; const char kShuffleFlag[] = "shuffle"; const char kStackTraceDepthFlag[] = "stack_trace_depth"; const char kStreamResultToFlag[] = "stream_result_to"; const char kThrowOnFailureFlag[] = "throw_on_failure"; // A valid random seed must be in [1, kMaxRandomSeed]. const int kMaxRandomSeed = 99999; // g_help_flag is true iff the --help flag or an equivalent form is // specified on the command line. GTEST_API_ extern bool g_help_flag; // Returns the current time in milliseconds. GTEST_API_ TimeInMillis GetTimeInMillis(); // Returns true iff Google Test should use colors in the output. GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); // Formats the given time in milliseconds as seconds. GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); // Parses a string for an Int32 flag, in the form of "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. GTEST_API_ bool ParseInt32Flag( const char* str, const char* flag, Int32* value); // Returns a random seed in range [1, kMaxRandomSeed] based on the // given --gtest_random_seed flag value. inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { const unsigned int raw_seed = (random_seed_flag == 0) ? static_cast(GetTimeInMillis()) : static_cast(random_seed_flag); // Normalizes the actual seed to range [1, kMaxRandomSeed] such that // it's easy to type. const int normalized_seed = static_cast((raw_seed - 1U) % static_cast(kMaxRandomSeed)) + 1; return normalized_seed; } // Returns the first valid random seed after 'seed'. The behavior is // undefined if 'seed' is invalid. The seed after kMaxRandomSeed is // considered to be 1. inline int GetNextRandomSeed(int seed) { GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed) << "Invalid random seed " << seed << " - must be in [1, " << kMaxRandomSeed << "]."; const int next_seed = seed + 1; return (next_seed > kMaxRandomSeed) ? 1 : next_seed; } // This class saves the values of all Google Test flags in its c'tor, and // restores them in its d'tor. class GTestFlagSaver { public: // The c'tor. GTestFlagSaver() { also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); break_on_failure_ = GTEST_FLAG(break_on_failure); catch_exceptions_ = GTEST_FLAG(catch_exceptions); color_ = GTEST_FLAG(color); death_test_style_ = GTEST_FLAG(death_test_style); death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); filter_ = GTEST_FLAG(filter); internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); list_tests_ = GTEST_FLAG(list_tests); output_ = GTEST_FLAG(output); print_time_ = GTEST_FLAG(print_time); random_seed_ = GTEST_FLAG(random_seed); repeat_ = GTEST_FLAG(repeat); shuffle_ = GTEST_FLAG(shuffle); stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); stream_result_to_ = GTEST_FLAG(stream_result_to); throw_on_failure_ = GTEST_FLAG(throw_on_failure); } // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. ~GTestFlagSaver() { GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; GTEST_FLAG(break_on_failure) = break_on_failure_; GTEST_FLAG(catch_exceptions) = catch_exceptions_; GTEST_FLAG(color) = color_; GTEST_FLAG(death_test_style) = death_test_style_; GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; GTEST_FLAG(filter) = filter_; GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; GTEST_FLAG(list_tests) = list_tests_; GTEST_FLAG(output) = output_; GTEST_FLAG(print_time) = print_time_; GTEST_FLAG(random_seed) = random_seed_; GTEST_FLAG(repeat) = repeat_; GTEST_FLAG(shuffle) = shuffle_; GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; GTEST_FLAG(stream_result_to) = stream_result_to_; GTEST_FLAG(throw_on_failure) = throw_on_failure_; } private: // Fields for saving the original values of flags. bool also_run_disabled_tests_; bool break_on_failure_; bool catch_exceptions_; String color_; String death_test_style_; bool death_test_use_fork_; String filter_; String internal_run_death_test_; bool list_tests_; String output_; bool print_time_; bool pretty_; internal::Int32 random_seed_; internal::Int32 repeat_; bool shuffle_; internal::Int32 stack_trace_depth_; String stream_result_to_; bool throw_on_failure_; } GTEST_ATTRIBUTE_UNUSED_; // Converts a Unicode code point to a narrow string in UTF-8 encoding. // code_point parameter is of type UInt32 because wchar_t may not be // wide enough to contain a code point. // The output buffer str must containt at least 32 characters. // The function returns the address of the output buffer. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output // as '(Invalid Unicode 0xXXXXXXXX)'. GTEST_API_ char* CodePointToUtf8(UInt32 code_point, char* str); // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: // UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number // of wchar_t characters processed. -1 is used when the entire string // should be processed. // If the string contains code points that are not valid Unicode code points // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. GTEST_API_ String WideStringToUtf8(const wchar_t* str, int num_chars); // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file // if the variable is present. If a file already exists at this location, this // function will write over it. If the variable is present, but the file cannot // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded(); // Checks whether sharding is enabled by examining the relevant // environment variable values. If the variables are present, // but inconsistent (e.g., shard_index >= total_shards), prints // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. GTEST_API_ bool ShouldShard(const char* total_shards_str, const char* shard_index_str, bool in_subprocess_for_death_test); // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error and // and aborts. GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); // Given the total number of shards, the shard index, and the test id, // returns true iff the test should be run on this shard. The test id is // some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. GTEST_API_ bool ShouldRunTestOnShard( int total_shards, int shard_index, int test_id); // STL container utilities. // Returns the number of elements in the given container that satisfy // the given predicate. template inline int CountIf(const Container& c, Predicate predicate) { // Implemented as an explicit loop since std::count_if() in libCstd on // Solaris has a non-standard signature. int count = 0; for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { if (predicate(*it)) ++count; } return count; } // Applies a function/functor to each element in the container. template void ForEach(const Container& c, Functor functor) { std::for_each(c.begin(), c.end(), functor); } // Returns the i-th element of the vector, or default_value if i is not // in range [0, v.size()). template inline E GetElementOr(const std::vector& v, int i, E default_value) { return (i < 0 || i >= static_cast(v.size())) ? default_value : v[i]; } // Performs an in-place shuffle of a range of the vector's elements. // 'begin' and 'end' are element indices as an STL-style range; // i.e. [begin, end) are shuffled, where 'end' == size() means to // shuffle to the end of the vector. template void ShuffleRange(internal::Random* random, int begin, int end, std::vector* v) { const int size = static_cast(v->size()); GTEST_CHECK_(0 <= begin && begin <= size) << "Invalid shuffle range start " << begin << ": must be in range [0, " << size << "]."; GTEST_CHECK_(begin <= end && end <= size) << "Invalid shuffle range finish " << end << ": must be in range [" << begin << ", " << size << "]."; // Fisher-Yates shuffle, from // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle for (int range_width = end - begin; range_width >= 2; range_width--) { const int last_in_range = begin + range_width - 1; const int selected = begin + random->Generate(range_width); std::swap((*v)[selected], (*v)[last_in_range]); } } // Performs an in-place shuffle of the vector's elements. template inline void Shuffle(internal::Random* random, std::vector* v) { ShuffleRange(random, 0, static_cast(v->size()), v); } // A function for deleting an object. Handy for being used as a // functor. template static void Delete(T* x) { delete x; } // A predicate that checks the key of a TestProperty against a known key. // // TestPropertyKeyIs is copyable. class TestPropertyKeyIs { public: // Constructor. // // TestPropertyKeyIs has NO default constructor. explicit TestPropertyKeyIs(const char* key) : key_(key) {} // Returns true iff the test name of test property matches on key_. bool operator()(const TestProperty& test_property) const { return String(test_property.key()).Compare(key_) == 0; } private: String key_; }; // Class UnitTestOptions. // // This class contains functions for processing options the user // specifies when running the tests. It has only static members. // // In most cases, the user can specify an option using either an // environment variable or a command line flag. E.g. you can set the // test filter using either GTEST_FILTER or --gtest_filter. If both // the variable and the flag are present, the latter overrides the // former. class GTEST_API_ UnitTestOptions { public: // Functions for processing the gtest_output flag. // Returns the output format, or "" for normal printed output. static String GetOutputFormat(); // Returns the absolute path of the requested output file, or the // default (test_detail.xml in the original working directory) if // none was explicitly specified. static String GetAbsolutePathToOutputFile(); // Functions for processing the gtest_filter flag. // Returns true iff the wildcard pattern matches the string. The // first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. static bool PatternMatchesString(const char *pattern, const char *str); // Returns true iff the user-specified filter matches the test case // name and the test name. static bool FilterMatchesTest(const String &test_case_name, const String &test_name); #if GTEST_OS_WINDOWS // Function for supporting the gtest_catch_exception flag. // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise. // This function is useful as an __except condition. static int GTestShouldProcessSEH(DWORD exception_code); #endif // GTEST_OS_WINDOWS // Returns true if "name" matches the ':' separated list of glob-style // filters in "filter". static bool MatchesFilter(const String& name, const char* filter); }; // Returns the current application's name, removing directory path if that // is present. Used by UnitTestOptions::GetOutputFile. GTEST_API_ FilePath GetCurrentExecutableName(); // The role interface for getting the OS stack trace as a string. class OsStackTraceGetterInterface { public: OsStackTraceGetterInterface() {} virtual ~OsStackTraceGetterInterface() {} // Returns the current OS stack trace as a String. Parameters: // // max_depth - the maximum number of stack frames to be included // in the trace. // skip_count - the number of top frames to be skipped; doesn't count // against max_depth. virtual String CurrentStackTrace(int max_depth, int skip_count) = 0; // UponLeavingGTest() should be called immediately before Google Test calls // user code. It saves some information about the current stack that // CurrentStackTrace() will use to find and hide Google Test stack frames. virtual void UponLeavingGTest() = 0; private: GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); }; // A working implementation of the OsStackTraceGetterInterface interface. class OsStackTraceGetter : public OsStackTraceGetterInterface { public: OsStackTraceGetter() : caller_frame_(NULL) {} virtual String CurrentStackTrace(int max_depth, int skip_count); virtual void UponLeavingGTest(); // This string is inserted in place of stack frames that are part of // Google Test's implementation. static const char* const kElidedFramesMarker; private: Mutex mutex_; // protects all internal state // We save the stack frame below the frame that calls user code. // We do this because the address of the frame immediately below // the user code changes between the call to UponLeavingGTest() // and any calls to CurrentStackTrace() from within the user code. void* caller_frame_; GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); }; // Information about a Google Test trace point. struct TraceInfo { const char* file; int line; String message; }; // This is the default global test part result reporter used in UnitTestImpl. // This class should only be used by UnitTestImpl. class DefaultGlobalTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. Reports the test part // result in the current test. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); }; // This is the default per thread test part result reporter used in // UnitTestImpl. This class should only be used by UnitTestImpl. class DefaultPerThreadTestPartResultReporter : public TestPartResultReporterInterface { public: explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. The implementation just // delegates to the current global test part result reporter of *unit_test_. virtual void ReportTestPartResult(const TestPartResult& result); private: UnitTestImpl* const unit_test_; GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); }; // The private implementation of the UnitTest class. We don't protect // the methods under a mutex, as this class is not accessible by a // user and the UnitTest class that delegates work to this class does // proper locking. class GTEST_API_ UnitTestImpl { public: explicit UnitTestImpl(UnitTest* parent); virtual ~UnitTestImpl(); // There are two different ways to register your own TestPartResultReporter. // You can register your own repoter to listen either only for test results // from the current thread or for results from all threads. // By default, each per-thread test result repoter just passes a new // TestPartResult to the global test result reporter, which registers the // test part result for the currently running test. // Returns the global test part result reporter. TestPartResultReporterInterface* GetGlobalTestPartResultReporter(); // Sets the global test part result reporter. void SetGlobalTestPartResultReporter( TestPartResultReporterInterface* reporter); // Returns the test part result reporter for the current thread. TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread(); // Sets the test part result reporter for the current thread. void SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter); // Gets the number of successful test cases. int successful_test_case_count() const; // Gets the number of failed test cases. int failed_test_case_count() const; // Gets the number of all test cases. int total_test_case_count() const; // Gets the number of all test cases that contain at least one test // that should run. int test_case_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; // Gets the number of failed tests. int failed_test_count() const; // Gets the number of disabled tests. int disabled_test_count() const; // Gets the number of all tests. int total_test_count() const; // Gets the number of tests that should run. int test_to_run_count() const; // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } // Returns true iff the unit test passed (i.e. all test cases passed). bool Passed() const { return !Failed(); } // Returns true iff the unit test failed (i.e. some test case failed // or something outside of all tests failed). bool Failed() const { return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. const TestCase* GetTestCase(int i) const { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[i]; } // Gets the i-th test case among all the test cases. i can range from 0 to // total_test_case_count() - 1. If i is not in that range, returns NULL. TestCase* GetMutableTestCase(int i) { const int index = GetElementOr(test_case_indices_, i, -1); return index < 0 ? NULL : test_cases_[index]; } // Provides access to the event listener list. TestEventListeners* listeners() { return &listeners_; } // Returns the TestResult for the test that's currently running, or // the TestResult for the ad hoc test if no test is running. TestResult* current_test_result(); // Returns the TestResult for the ad hoc test. const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; } // Sets the OS stack trace getter. // // Does nothing if the input and the current OS stack trace getter // are the same; otherwise, deletes the old getter and makes the // input the current getter. void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter); // Returns the current OS stack trace getter if it is not NULL; // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* os_stack_trace_getter(); // Returns the current OS stack trace as a String. // // The maximum number of stack frames to be included is specified by // the gtest_stack_trace_depth flag. The skip_count parameter // specifies the number of top frames to be skipped, which doesn't // count against the number of frames to be included. // // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. String CurrentOsStackTraceExceptTop(int skip_count); // Finds and returns a TestCase with the given name. If one doesn't // exist, creates one and returns it. // // Arguments: // // test_case_name: name of the test case // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case TestCase* GetTestCase(const char* test_case_name, const char* type_param, Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc); // Adds a TestInfo to the unit test. // // Arguments: // // set_up_tc: pointer to the function that sets up the test case // tear_down_tc: pointer to the function that tears down the test case // test_info: the TestInfo object void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, Test::TearDownTestCaseFunc tear_down_tc, TestInfo* test_info) { // In order to support thread-safe death tests, we need to // remember the original working directory when the test program // was first invoked. We cannot do this in RUN_ALL_TESTS(), as // the user may have changed the current directory before calling // RUN_ALL_TESTS(). Therefore we capture the current directory in // AddTestInfo(), which is called to register a TEST or TEST_F // before main() is reached. if (original_working_dir_.IsEmpty()) { original_working_dir_.Set(FilePath::GetCurrentDir()); GTEST_CHECK_(!original_working_dir_.IsEmpty()) << "Failed to get the current working directory."; } GetTestCase(test_info->test_case_name(), test_info->type_param(), set_up_tc, tear_down_tc)->AddTestInfo(test_info); } #if GTEST_HAS_PARAM_TEST // Returns ParameterizedTestCaseRegistry object used to keep track of // value-parameterized tests and instantiate and register them. internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { return parameterized_test_registry_; } #endif // GTEST_HAS_PARAM_TEST // Sets the TestCase object for the test that's currently running. void set_current_test_case(TestCase* a_current_test_case) { current_test_case_ = a_current_test_case; } // Sets the TestInfo object for the test that's currently running. If // current_test_info is NULL, the assertion results will be stored in // ad_hoc_test_result_. void set_current_test_info(TestInfo* a_current_test_info) { current_test_info_ = a_current_test_info; } // Registers all parameterized tests defined using TEST_P and // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter // combination. This method can be called more then once; it has guards // protecting from registering the tests more then once. If // value-parameterized tests are disabled, RegisterParameterizedTests is // present but does nothing. void RegisterParameterizedTests(); // Runs all tests in this UnitTest object, prints the result, and // returns true if all tests are successful. If any exception is // thrown during a test, this test is considered to be failed, but // the rest of the tests will still be run. bool RunAllTests(); // Clears the results of all tests, except the ad hoc tests. void ClearNonAdHocTestResult() { ForEach(test_cases_, TestCase::ClearTestCaseResult); } // Clears the results of ad-hoc test assertions. void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); } enum ReactionToSharding { HONOR_SHARDING_PROTOCOL, IGNORE_SHARDING_PROTOCOL }; // Matches the full name of each test against the user-specified // filter to decide whether the test should run, then records the // result in each TestCase and TestInfo object. // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests // based on sharding variables in the environment. // Returns the number of tests that should run. int FilterTests(ReactionToSharding shard_tests); // Prints the names of the tests matching the user-specified filter flag. void ListTestsMatchingFilter(); const TestCase* current_test_case() const { return current_test_case_; } TestInfo* current_test_info() { return current_test_info_; } const TestInfo* current_test_info() const { return current_test_info_; } // Returns the vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector& environments() { return environments_; } // Getters for the per-thread Google Test trace stack. std::vector& gtest_trace_stack() { return *(gtest_trace_stack_.pointer()); } const std::vector& gtest_trace_stack() const { return gtest_trace_stack_.get(); } #if GTEST_HAS_DEATH_TEST void InitDeathTestSubprocessControlInfo() { internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag()); } // Returns a pointer to the parsed --gtest_internal_run_death_test // flag, or NULL if that flag was not specified. // This information is useful only in a death test child process. // Must not be called before a call to InitGoogleTest. const InternalRunDeathTestFlag* internal_run_death_test_flag() const { return internal_run_death_test_flag_.get(); } // Returns a pointer to the current death test factory. internal::DeathTestFactory* death_test_factory() { return death_test_factory_.get(); } void SuppressTestEventsIfInSubprocess(); friend class ReplaceDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST // Initializes the event listener performing XML output as specified by // UnitTestOptions. Must not be called before InitGoogleTest. void ConfigureXmlOutput(); #if GTEST_CAN_STREAM_RESULTS_ // Initializes the event listener for streaming test results to a socket. // Must not be called before InitGoogleTest. void ConfigureStreamingOutput(); #endif // Performs initialization dependent upon flag values obtained in // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest // this function is also called from RunAllTests. Since this function can be // called more than once, it has to be idempotent. void PostFlagParsingInit(); // Gets the random seed used at the start of the current test iteration. int random_seed() const { return random_seed_; } // Gets the random number generator. internal::Random* random() { return &random_; } // Shuffles all test cases, and the tests within each test case, // making sure that death tests are still run first. void ShuffleTests(); // Restores the test cases and tests to their order before the first shuffle. void UnshuffleTests(); // Returns the value of GTEST_FLAG(catch_exceptions) at the moment // UnitTest::Run() starts. bool catch_exceptions() const { return catch_exceptions_; } private: friend class ::testing::UnitTest; // Used by UnitTest::Run() to capture the state of // GTEST_FLAG(catch_exceptions) at the moment it starts. void set_catch_exceptions(bool value) { catch_exceptions_ = value; } // The UnitTest object that owns this implementation object. UnitTest* const parent_; // The working directory when the first TEST() or TEST_F() was // executed. internal::FilePath original_working_dir_; // The default test part result reporters. DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_; DefaultPerThreadTestPartResultReporter default_per_thread_test_part_result_reporter_; // Points to (but doesn't own) the global test part result reporter. TestPartResultReporterInterface* global_test_part_result_repoter_; // Protects read and write access to global_test_part_result_reporter_. internal::Mutex global_test_part_result_reporter_mutex_; // Points to (but doesn't own) the per-thread test part result reporter. internal::ThreadLocal per_thread_test_part_result_reporter_; // The vector of environments that need to be set-up/torn-down // before/after the tests are run. std::vector environments_; // The vector of TestCases in their original order. It owns the // elements in the vector. std::vector test_cases_; // Provides a level of indirection for the test case list to allow // easy shuffling and restoring the test case order. The i-th // element of this vector is the index of the i-th test case in the // shuffled order. std::vector test_case_indices_; #if GTEST_HAS_PARAM_TEST // ParameterizedTestRegistry object used to register value-parameterized // tests. internal::ParameterizedTestCaseRegistry parameterized_test_registry_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; #endif // GTEST_HAS_PARAM_TEST // Index of the last death test case registered. Initially -1. int last_death_test_case_; // This points to the TestCase for the currently running test. It // changes as Google Test goes through one test case after another. // When no test is running, this is set to NULL and Google Test // stores assertion results in ad_hoc_test_result_. Initially NULL. TestCase* current_test_case_; // This points to the TestInfo for the currently running test. It // changes as Google Test goes through one test after another. When // no test is running, this is set to NULL and Google Test stores // assertion results in ad_hoc_test_result_. Initially NULL. TestInfo* current_test_info_; // Normally, a user only writes assertions inside a TEST or TEST_F, // or inside a function called by a TEST or TEST_F. Since Google // Test keeps track of which test is current running, it can // associate such an assertion with the test it belongs to. // // If an assertion is encountered when no TEST or TEST_F is running, // Google Test attributes the assertion result to an imaginary "ad hoc" // test, and records the result in ad_hoc_test_result_. TestResult ad_hoc_test_result_; // The list of event listeners that can be used to track events inside // Google Test. TestEventListeners listeners_; // The OS stack trace getter. Will be deleted when the UnitTest // object is destructed. By default, an OsStackTraceGetter is used, // but the user can set this field to use a custom getter if that is // desired. OsStackTraceGetterInterface* os_stack_trace_getter_; // True iff PostFlagParsingInit() has been called. bool post_flag_parse_init_performed_; // The random number seed used at the beginning of the test run. int random_seed_; // Our random number generator. internal::Random random_; // How long the test took to run, in milliseconds. TimeInMillis elapsed_time_; #if GTEST_HAS_DEATH_TEST // The decomposed components of the gtest_internal_run_death_test flag, // parsed when RUN_ALL_TESTS is called. internal::scoped_ptr internal_run_death_test_flag_; internal::scoped_ptr death_test_factory_; #endif // GTEST_HAS_DEATH_TEST // A per-thread stack of traces created by the SCOPED_TRACE() macro. internal::ThreadLocal > gtest_trace_stack_; // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests() // starts. bool catch_exceptions_; GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); }; // class UnitTestImpl // Convenience function for accessing the global UnitTest // implementation object. inline UnitTestImpl* GetUnitTestImpl() { return UnitTest::GetInstance()->impl(); } #if GTEST_USES_SIMPLE_RE // Internal helper functions for implementing the simple regular // expression matcher. GTEST_API_ bool IsInSet(char ch, const char* str); GTEST_API_ bool IsAsciiDigit(char ch); GTEST_API_ bool IsAsciiPunct(char ch); GTEST_API_ bool IsRepeat(char ch); GTEST_API_ bool IsAsciiWhiteSpace(char ch); GTEST_API_ bool IsAsciiWordChar(char ch); GTEST_API_ bool IsValidEscape(char ch); GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); GTEST_API_ bool ValidateRegex(const char* regex); GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); GTEST_API_ bool MatchRepetitionAndRegexAtHead( bool escaped, char ch, char repeat, const char* regex, const char* str); GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); #endif // GTEST_USES_SIMPLE_RE // Parses the command line for Google Test flags, without initializing // other parts of Google Test. GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv); GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv); #if GTEST_HAS_DEATH_TEST // Returns the message describing the last system error, regardless of the // platform. GTEST_API_ String GetLastErrnoDescription(); # if GTEST_OS_WINDOWS // Provides leak-safe Windows kernel handle ownership. class AutoHandle { public: AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} explicit AutoHandle(HANDLE handle) : handle_(handle) {} ~AutoHandle() { Reset(); } HANDLE Get() const { return handle_; } void Reset() { Reset(INVALID_HANDLE_VALUE); } void Reset(HANDLE handle) { if (handle != handle_) { if (handle_ != INVALID_HANDLE_VALUE) ::CloseHandle(handle_); handle_ = handle; } } private: HANDLE handle_; GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); }; # endif // GTEST_OS_WINDOWS // Attempts to parse a string into a positive integer pointed to by the // number parameter. Returns true if that is possible. // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use // it here. template bool ParseNaturalNumber(const ::std::string& str, Integer* number) { // Fail fast if the given string does not begin with a digit; // this bypasses strtoXXX's "optional leading whitespace and plus // or minus sign" semantics, which are undesirable here. if (str.empty() || !IsDigit(str[0])) { return false; } errno = 0; char* end; // BiggestConvertible is the largest integer type that system-provided // string-to-number conversion routines can return. # if GTEST_OS_WINDOWS && !defined(__GNUC__) // MSVC and C++ Builder define __int64 instead of the standard long long. typedef unsigned __int64 BiggestConvertible; const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); # else typedef unsigned long long BiggestConvertible; // NOLINT const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); # endif // GTEST_OS_WINDOWS && !defined(__GNUC__) const bool parse_success = *end == '\0' && errno == 0; // TODO(vladl@google.com): Convert this to compile time assertion when it is // available. GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); const Integer result = static_cast(parsed); if (parse_success && static_cast(result) == parsed) { *number = result; return true; } return false; } #endif // GTEST_HAS_DEATH_TEST // TestResult contains some private methods that should be hidden from // Google Test user but are required for testing. This class allow our tests // to access them. // // This class is supplied only for the purpose of testing Google Test's own // constructs. Do not use it in user tests, either directly or indirectly. class TestResultAccessor { public: static void RecordProperty(TestResult* test_result, const TestProperty& property) { test_result->RecordProperty(property); } static void ClearTestPartResults(TestResult* test_result) { test_result->ClearTestPartResults(); } static const std::vector& test_part_results( const TestResult& test_result) { return test_result.test_part_results(); } }; } // namespace internal } // namespace testing #endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ jellyfish-1.1.11/unit_tests/test_offsets_key_value.cc0000644015303500042660000001631212151455365020014 00000000000000#include #include #include #include #include #include #include #include namespace { #ifndef UINT64_C #define UINT64_C(x) ((uint64_t)x) #endif using namespace jellyfish; typedef struct { uint_t key_len, val_len; } offset_test_param; class ComputeOffsetsTest : public ::testing::TestWithParam { public: Offsets offsets; ComputeOffsetsTest() : offsets(GetParam().key_len, GetParam().val_len, 15) { } ~ComputeOffsetsTest() { } }; TEST_P(ComputeOffsetsTest, CheckCoherency) { const Offsets::offset_t *it = NULL, *pit = NULL; const Offsets::offset_t *lit = NULL, *lpit = NULL; uint_t k_len = GetParam().key_len; uint_t v_len = GetParam().val_len; uint_t kv_len = k_len + v_len; uint_t lk_len = 4; uint_t lv_len = kv_len - lk_len; uint_t i = 0; // uint64_t *w, *pw; // /* Still missing: // * - testing of value masks // */ EXPECT_EQ(lk_len, this->offsets.get_reprobe_len()); EXPECT_EQ(lv_len, this->offsets.get_lval_len()); for(i = 0; true; i++) { this->offsets.get_word_offset(i, &it, &lit, NULL); if(i > 0) { this->offsets.get_word_offset(i-1, &pit, &lpit, NULL); uint_t noff = pit->key.boff + kv_len; if(noff > 64) { EXPECT_EQ(pit->key.woff + 1, it->key.woff) << i << ": Word offset should go up"; } else { EXPECT_EQ(pit->key.woff, it->key.woff) << i << ": Word offset should NOT go up"; } if(pit->key.mask2) { // key between two words EXPECT_LT((uint_t)64, pit->key.boff + k_len) << i << ": Key not between words, should not have mask2"; } else { EXPECT_GE((uint_t)64, pit->key.boff - 1 + k_len + 1) << i << ": Key between words, should have mask2"; } EXPECT_EQ((pit->key.boff + kv_len + 1 + (pit->key.mask2 ? 2 : 0)) % 64, it->key.boff) << i << ": Invalid jump of bit offset"; EXPECT_EQ((pit->key.boff + kv_len + 1 + (pit->key.mask2 ? 2 : 0)) % 64, lit->key.boff) << i << ": Invalid jump of bit offset large field"; } // if(i > 0) EXPECT_EQ((it->key.boff + k_len + (it->key.mask2 ? 2 : 0)) % 64, it->val.boff) << i << ": Invalid value offset"; EXPECT_EQ((lit->key.boff + lk_len + (lit->key.mask2 ? 2 : 0)) % 64, lit->val.boff) << i << ": Invalid value offset large field"; EXPECT_EQ(UINT64_C(1) << (it->key.boff - 1), it->key.lb_mask) << i << ": Invalid lb_mask"; EXPECT_EQ(UINT64_C(1) << (lit->key.boff - 1), lit->key.lb_mask) << i << ": Invalid lb_mask"; if(it->key.mask2) { EXPECT_EQ(64 - it->key.boff - 1, it->key.shift) << i << ": invalid key shift"; EXPECT_EQ(UINT64_C(1) << (64 - it->key.boff + 1), 1 + (it->key.mask1 >> (it->key.boff - 1))) << i << ": invalid key mask"; EXPECT_EQ(UINT64_C(1) << (it->key.boff + k_len - 64 + 2), 1 + it->key.mask2) << i << ": invalid key mask2"; EXPECT_EQ(k_len, it->key.shift + it->key.cshift); EXPECT_EQ(UINT64_C(1) << 63, it->key.sb_mask1) << i << ": invalid key key sb_mask1"; EXPECT_EQ(UINT64_C(1) << it->key.cshift, it->key.sb_mask2) << i << ": invalid key sb_mask2"; } else { EXPECT_EQ(0u, it->key.shift) << i << ": key shift should be zero, no mask"; EXPECT_EQ(UINT64_C(1) << (k_len + 1), 1 + (it->key.mask1 >> (it->key.boff - 1))) << i << ": invalid key mask " << it->key.boff; EXPECT_EQ(0u, it->key.cshift); EXPECT_EQ(0u, it->key.sb_mask1 | it->key.sb_mask2) << i << ": set bit masks should be 0"; } if(lit->key.mask2) { EXPECT_EQ(64 - lit->key.boff - 1, lit->key.shift) << i << ": invalid key shift large field"; EXPECT_EQ(UINT64_C(1) << (64 - lit->key.boff + 1), 1 + (lit->key.mask1 >> (lit->key.boff - 1))) << i << ": invalid key mask large field"; EXPECT_EQ(UINT64_C(1) << (lit->key.boff + lk_len - 64 + 2), 1 + lit->key.mask2) << i << ": invalid key mask2 large field"; EXPECT_EQ(lk_len, lit->key.shift + lit->key.cshift); EXPECT_EQ(UINT64_C(1) << 63, lit->key.sb_mask1) << i << ": invalid key key sb_mask1"; EXPECT_EQ(UINT64_C(1) << lit->key.cshift, lit->key.sb_mask2) << i << ": invalid key sb_mask2"; } else { EXPECT_EQ(0u, lit->key.shift) << i << ": key shift should be zero, no mask, large field"; EXPECT_EQ(0u, lit->key.cshift); EXPECT_EQ(UINT64_C(1) << (lk_len + 1), 1 + (lit->key.mask1 >> (lit->key.boff - 1))) << i << ": invalid key mask large field " << lit->key.boff; } if(it->val.mask2) { EXPECT_LT((uint_t)64, it->val.boff + v_len) << i << ": val not between words, should not have mask2"; EXPECT_EQ(64 - it->val.boff, it->val.shift) << i << ": invalid val shift"; EXPECT_EQ(UINT64_C(1) << (64 - it->val.boff), 1 + (it->val.mask1 >> it->val.boff)) << i << ": invalid val mask1"; EXPECT_EQ(UINT64_C(1) << (it->val.boff + v_len - 64), 1 + it->val.mask2) << i << ": invalid val mask2"; } else { EXPECT_GE((uint_t)64, it->val.boff + v_len) << i << ": val between words, should have mask2"; EXPECT_EQ(v_len, it->val.shift) << i << ": invalid val shift"; EXPECT_EQ(UINT64_C(1) << v_len, 1 + (it->val.mask1 >> it->val.boff)) << i << ": invalid val mask1"; } EXPECT_EQ(v_len, it->val.shift + it->val.cshift); if(lit->val.mask2) { EXPECT_LT((uint_t)64, lit->val.boff + lv_len) << i << ": val not between words, should not have mask2 large field"; EXPECT_EQ(64 - lit->val.boff, lit->val.shift) << i << ": invalid val shift large field"; EXPECT_EQ(UINT64_C(1) << (64 - lit->val.boff), 1 + (lit->val.mask1 >> lit->val.boff)) << i << ": invalid val mask1 large field"; EXPECT_EQ(UINT64_C(1) << (lit->val.boff + lv_len - 64), 1 + lit->val.mask2) << i << ": invalid val mask2 large field"; } else { EXPECT_GE((uint_t)64, lit->val.boff + lv_len) << i << ": val between words, should have mask2 large field " << lit->val.boff << " " << lv_len; EXPECT_EQ(lv_len, lit->val.shift) << i << ": invalid val shift large field"; EXPECT_EQ(UINT64_C(1) << lv_len, 1 + (lit->val.mask1 >> lit->val.boff)) << i << ": invalid val mask1 large field"; } EXPECT_EQ(lv_len, lit->val.shift + lit->val.cshift); uint_t noff = it->key.boff + kv_len; if(noff == 62 || noff == 63 || noff == 64) break; } } offset_test_param params[] = { {10, 10}, { 22, 5 }, {20, 5} }; INSTANTIATE_TEST_CASE_P(OffsetsTest, ComputeOffsetsTest, ::testing::ValuesIn(params)); } jellyfish-1.1.11/unit_tests/test_simple_circular_buffer.cc0000644015303500042660000000430012151455365020777 00000000000000#include #include namespace { // template // class CircularBufferTest : public ::testing::Test { }; // typedef ::testing::Types, // circular_buffer::dyn > CircularBufferTypes; // TYPED_TEST_CASE(CircularBufferTest, CircularBufferTypes); static const int capa = 16; class test_simple_circular_buffer : public jellyfish::simple_circular_buffer::pre_alloc { public: typedef jellyfish::simple_circular_buffer::pre_alloc super; explicit test_simple_circular_buffer(int* data) : super(data) { } // int next_index(int i) const { return super::next_index(i); } // int prev_index(int i) const { return super::prev_index(i); } // int front_ptr() const { return front_; } // int back_ptr() const { return back_; } }; TEST(SimpleCircularBufferTest, FillEmpty) { int ary[capa]; test_simple_circular_buffer buffer(ary); EXPECT_EQ(capa, buffer.capacity()); EXPECT_TRUE(buffer.empty()); for(int i = 0; i < buffer.capacity(); ++i) { SCOPED_TRACE(::testing::Message() << "i=" << i); EXPECT_FALSE(buffer.full()); EXPECT_EQ(i, buffer.size()); buffer.push_back(i); EXPECT_EQ(i, buffer.back()); EXPECT_FALSE(buffer.empty()); } EXPECT_TRUE(buffer.full()); for(int i = 0; i < buffer.capacity(); ++i) { SCOPED_TRACE(::testing::Message() << "i=" << i); EXPECT_FALSE(buffer.empty()); EXPECT_EQ(i, buffer.front()); EXPECT_EQ(buffer.capacity() - i, buffer.size()); buffer.pop_front(); EXPECT_FALSE(buffer.full()); } EXPECT_TRUE(buffer.empty()); EXPECT_EQ(0, buffer.size()); } TEST(SimpleCircularBufferTest, Usefull) { int ary[capa]; test_simple_circular_buffer buffer(ary); EXPECT_EQ(capa, buffer.capacity()); int i = 0; for( ; i < buffer.capacity(); ++i) { EXPECT_TRUE(buffer.push_back()); buffer.back() = i; } for( ; i < 10 * buffer.capacity(); ++i) { EXPECT_EQ(i - capa, buffer.front()); buffer.pop_front(); EXPECT_TRUE(buffer.push_back()); buffer.back() = i; } } } jellyfish-1.1.11/config.guess0000755015303500042660000012743212200542304013037 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: jellyfish-1.1.11/doc/0000755015303500042660000000000012200542320011331 500000000000000jellyfish-1.1.11/doc/jellyfish.pdf0000644015303500042660000073072612151455365013775 00000000000000%PDF-1.4 %ÐÔÅØ 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (1 Synopsis) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (2 Description) endobj 9 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 12 0 obj (2.1 Counting and merging) endobj 13 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 16 0 obj (2.2 Orientation) endobj 17 0 obj << /S /GoTo /D (subsection.2.3) >> endobj 20 0 obj (2.3 Choosing the hash size) endobj 21 0 obj << /S /GoTo /D (subsection.2.4) >> endobj 24 0 obj (2.4 Choosing the counting field size) endobj 25 0 obj << /S /GoTo /D (section.3) >> endobj 28 0 obj (3 Subcommands and options) endobj 29 0 obj << /S /GoTo /D (subsection.3.1) >> endobj 32 0 obj (3.1 count) endobj 33 0 obj << /S /GoTo /D (subsection.3.2) >> endobj 36 0 obj (3.2 stats) endobj 37 0 obj << /S /GoTo /D (subsection.3.3) >> endobj 40 0 obj (3.3 histo) endobj 41 0 obj << /S /GoTo /D (subsection.3.4) >> endobj 44 0 obj (3.4 dump) endobj 45 0 obj << /S /GoTo /D (subsection.3.5) >> endobj 48 0 obj (3.5 merge) endobj 49 0 obj << /S /GoTo /D (subsection.3.6) >> endobj 52 0 obj (3.6 query) endobj 53 0 obj << /S /GoTo /D (subsection.3.7) >> endobj 56 0 obj (3.7 qhisto) endobj 57 0 obj << /S /GoTo /D (subsection.3.8) >> endobj 60 0 obj (3.8 qdump) endobj 61 0 obj << /S /GoTo /D (subsection.3.9) >> endobj 64 0 obj (3.9 qmerge) endobj 65 0 obj << /S /GoTo /D (subsection.3.10) >> endobj 68 0 obj (3.10 cite) endobj 69 0 obj << /S /GoTo /D (section.4) >> endobj 72 0 obj (4 Version) endobj 73 0 obj << /S /GoTo /D (section.5) >> endobj 76 0 obj (5 Bugs) endobj 77 0 obj << /S /GoTo /D (section.6) >> endobj 80 0 obj (6 Copyright \046 License) endobj 81 0 obj << /S /GoTo /D (section.7) >> endobj 84 0 obj (7 Authors) endobj 85 0 obj << /S /GoTo /D [86 0 R /Fit ] >> endobj 88 0 obj << /Length 2072 /Filter /FlateDecode >> stream xÚ­XIsã¶¾ûWðHUYö%·É2¯Þ¤’z©¸r™Ì’(‹1%Ê"•‰óë_7¤(‰öØ5ñÁ„°t7zùðßÝÝ|ó^˜L8&…ÑÙÝ:“œ3§Bfµa¨ìn•}Ì?”uýôºÝ|;›knów³¹â2_mG­‡ù¶Ý} 6‚c$jP‚q)³¹ôÌA þÃ`),ù¹8,‹ªÅ./v+êý>þTíîÛusX¡Ø Ö íAŽbA$9ïg^æåâp,O$D†[Z,¹dŽ4™gÁÚ´_¶y$ã÷™·yyh«f+µÊL§¥v´Ô0\™äií»EÛŠe—f»Ñì¹0àQg’2;xv67*'÷ÎDÞn&ŒT– e2Nk¢À®?2o›u7“>ÿ<“!/% v R0|Þ›äGb}`NöR&ôÆ­è'`€“æjGÂøåu´åã±Ü-Ë–‘%2¡™ÒVÒÖm`VÛè+%ÒÖÅ >“ÎÒDÞ’fÝ~)± ¯Íö3@&2¶‰ý¦N<ãñ„-× <†ÌŸ¦Šƒ³l8§2Q‰Êvy¨ö:ü‹lâÃeø¯Í Lp}F»Ò® ôƒ#ì’I%UÓ(DÔÌEž;E[®¨ÙgLA?·˜IǺ«æp.—ŪŸS;NìŠE]RgµÝ×Xx1 tÆÈ•'>·’‰9 ìßøäIÖÓ²ïÑ:%òH7Èu&ñqhÀî±÷j›X`à Hš(ìnæa'ãÍ<ôÌ{ZÏ4¯w_{K2myæ¥e³Ý’‘ÐWWÀ¦пC˜³ÓÐ1cM4xØýŸxÏYWèS.XFV›@ÒâWÊô»¡osìöÇ~Î’¾*ýlé+8ý¥Þ4Y%AÕÖ³g¨D:ÑF—œº‰‰èMþ¹ªklÙ‘sã@·)©?5Ðìž½{CìFǪ“ÀnC-´Ž`¶«Ÿ[ÎAuy¡/f.ÌÇ *ëÕ¹üAû¿û `¢ØöI_?QðT*ˆªë‹®+ ¥~l¥4H¸[—t-…¦à4´_%¼&ãUº¯dSfÅÍj­‡c÷Y£¹Z÷þÇîEã4Wl±†ŒfÓ)‘«èIV Š?†dáÏe 6@F;bÖ:ï‘|8 pK”ŠÇå…D1NgÂy†ÿºD1VEIZº¿¤^qÉÇ׫W*Ì\¨I}à˜1øªë¹¿8ázz& ì‹®ˆ±xºå²£Þ:žÂðc}h¶Ô"Ç ‡*‘@_{\ÌKóÛ#áõDŒ„edg-bb× µ"Ðu=>Öòh9Y´ <SìYF1 ˆ }²¡ ÀójM½ÅŽ FveÌ‹UâÂ(],Ïû~BÊê4pË…ž=¹ÞÜ~5“c°L¼Àwjpý†Ê¿‹-•ÌHŠÊýâÉbÝÔuß{©(‰÷¢'#÷ôÚ/;yïFÌv¸æÂ  ³BXäNL=T¹0~5ü}g9Ýg¿¥Ër|¿¥öû8:¼½C½½7¼½cüIÌ" endstream endobj 86 0 obj << /Type /Page /Contents 88 0 R /Resources 87 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 89 0 obj << /D [86 0 R /XYZ 90.801 734.821 null] >> endobj 90 0 obj << /D [86 0 R /XYZ 91.801 696.959 null] >> endobj 2 0 obj << /D [86 0 R /XYZ 91.801 520.108 null] >> endobj 6 0 obj << /D [86 0 R /XYZ 91.801 370.137 null] >> endobj 10 0 obj << /D [86 0 R /XYZ 91.801 317.073 null] >> endobj 87 0 obj << /Font << /F15 91 0 R /F16 92 0 R /F25 93 0 R /F26 94 0 R /F27 95 0 R /F28 96 0 R /F31 97 0 R /F32 98 0 R /F8 99 0 R /F33 100 0 R /F11 101 0 R /F35 102 0 R >> /ProcSet [ /PDF /Text ] >> endobj 106 0 obj << /Length 3579 /Filter /FlateDecode >> stream xÚÍZݓ۶÷_¡—Nx͉@ =Ó‡&]g¦qß4I¦Ã“¨k‰”I*çË_ßý?t8Û÷Ö¹™#€‹Åb?~»Ð·7/¾y•d«".2“­nv«BǹÒ+gÒØ¦fu³]ý™Ø\­µR*zÛÕUseòh(‡ºm®ÖÆ©\G~øoß¿ûî§7ÿ¼yóöÇ«ßn~xñýÍ‹/ôJÁŸž(ë8Ë²Õæøâ—ßÔj c?¬TœùêžfWÖäô®V‡Õ»ÿzñ-q™>æ2˳¸(2æò¿Õáð°«ûýÕ:5it¬º»Š›ë–Ÿíy8‡ø¿»ùë¯:±ÿù3²ûÍ«|¶„¶qaíj ìÚñïöíù°½Z'ðõŠ¡=ãKÝU÷KƒAz«YVUw¬¶uÙ=ðdZ÷JG¿þª´=T=ñ«JU_ÎH쑹ÙvÕ¶‡A}Ý.öÝ×T<³Ýq Á§%Ê[Cy{ùµ,4€Lp¸ñÕÚoVÃfS‘g,‡øjåIôSÕ›¦nîXN‰™ *‡oò ‹¾ú¡:€tutxÀ}›q^Œóï똴:‰J~J8·ŽÛ¼9l¡\ÚÓPƒØ@혉d~Z4!O<Õuÿx]Щ$÷P”L‚ÏS×Þ‚˜øm •0¢ñô°Ë€\áliU eÁlÜ@¹“0u±Q‰H3åª$ÓÙë(–]éfgÔ\œçùÜ5b¢½!>Ú-|©ÑŠøÃŸ÷kÁ\R£}dÊØ¹»˜ÕWÎU³AMaqËñºâæ®ì‡’›¼-™Ñó³ieÞû¦ÅeïTe¥£*¾-³°O]%ã{W•Ûþš„«–R=÷“NÎÕÁdpnÔZa¢õ-ª~Ôûu?te³ (‰Ëbàd¦%*@=‰s—ŽÄ¿ ø«"Yê÷±|¦MÆžˆ©¿íÑ$¶ÞôU,F©ð”f¹ãWW9žÌN‹¨¤|`´ž³ˆ*8òøþ1‹i<íô9@Â$qj ?é2(gGãafàñ†žYÛ”MÛÔ›òÀ¯]uêª~©pØ_÷•µUsîA'f0,ZvLЋfd¤«~ÇE«®¯Ö›öx:TGaƒX΢û}½Á÷½Ÿè­Ø@¼°b €‡g•%ïðØðåP}¬7í]Wžö¸gð"¹Ðw¦Yô3{8%çÓÑ“ݘQ`³©þrݺ‚ 9®ù³À×ÐЗ»‹ï@z‘€Q±£‚H ìPgó4ê‡b·ÑpñÉ ¡Z`fØ€°•‡3ã™á9¿_˜ÊÃY>¦•g5š{>âÿ[ŠZè’q€B>©w³9w8«ù(Óû &žŒðÈÚð2!B—Í{ø¤ã.¼ãNÄq·fÁ×µä¹Ö‰ó ¹QjТÀ÷”O÷DoÈÀ©•t,ûZ8åN>S“x©‘¶Âë qlg×v€W6*‘M)Ãè±nê£Hœ:‚âÇÒXçqlÃÑ1¶áK/È § ¸ïêaÀàD ·!ñoëþ=FˆÜEï0þƒˆl.R³.:•]y¬ïÖ°@ÙX;û)X+¹btsžO$<ò‰/,ß-ˆÞ‡–Ÿ¸Ë9B¼€]ǧݲ§b&˜òy¿Ü/IŸX•û¾f@G ¤ªÞVät¨ƒ ~Dúo +)±UgIìã-°øÀƒÄ¢~¨‰@Â.nXO“„­£UuláAù8P-À£œÙÏ8,7mÓ‡½–‰WK´¤þ%*Ÿ\‚,'Žh±ðà Â<Ä&<ε¨Ì`5T2|W5àÂãš½ªÁ£)$`çIKØŒ@¨î½métæÂ§¬U¬’âY§Œ4ë†×%ìîšo‡hË ²Lѹv zåE+7ò@‰À¨Vã‘'Dy₳E)[D¤I Ï8sú"> PÄ]–˜€%:cM„§æGÕu¦¡yšü9¼ùÕ•i]š^r|~ô1&,2T! a¬†­} åqfÇ|àÜÔβ!Ò"zCŒ{ÍK¶GiKꥳ'PLªceF^Àfœ'v t1e @¦/П,i·ñnЀx|Æ‚‚²zL™Âù’JãÂégæK´`ËÏÑñiò8÷oƒ;÷i#Pú‘³ƒX6È!4q‹,Ä™eGlÁÙoydhÑdfÙ—‡‘䱚Žûõ¦0zæ¯C4Àªõ¥Uk»8PçfɃJT˜O¯ I¥XJ=îçùÇ_“œK„¤±˜ðò1»ld"G[p*ºñš¶­¯{Q+ð™ŽóìÂýßr$—<Ž<ÎuþÅø8rwÑôdõäèwmw™M•'ƒSÎ={¢„! Å‹äûÒa*Ð:¯¹úÓ|žˆ 6Ãu°˜")Z>Ä,Cé[Êl|…-ºPnîÁ­RÖaпÉÄEä ¹‘ybªµP/ý³ï+†p²èò¹½°¹ãç¡jî†}ðÌll²gù³ cö0„sô¤ˆíDî h–#A‡LA@*âÔ^¸É×AZ:iÕýL N] *À' بXÒú+Nõ/ùÚB¡$+XdÐgŠzœè¨[‚(—c}l,ÑÇç Q?P9‚:Þ¼{Ëäû3ÌË>VÒÏŠ É”Ð"N²bBu»MSýÎøq™Oö÷ÕZd¡Õ?¾’"„ç†zŨr֎ض«}%cÄv¢—ª×_yHééÍÌ5·á„;&ü4¶dG”Âém†3Œ¥Ôïí=•0™zçbÇi2E¡sÃV‰’‹„<ú›3G˜CzwíáÀ,”¯2avähRñ$©™{hKÌ•ôžÐ·‘´•xÁ—®E=ÙòËùÄO®áŠ“ÂŽ¦ú8pKâSªÔO>xš—!ÌCOˆ%T‹mâ¦È æ‘Jj•¤È@N+¶ÆjÙá!PŽUšC™&a¤foü~.R»eo4×§Ùl©‰5‹³G’$¾}9øVÅ’dTñÍ÷ˆšx>Jƒ Æ-==–TÚ1I4Îb!#•B¾>Q>Ì,$`ð9…±Hn—ØË8ÇáÜ3é¶©¸‹¶OȤdˆëÔØ:™¢ š" ={Rx6¶ˆA%àÄâòÂÈ~AÝ‘(Þ%CP*ªƒ}®yQ‹L„ûrކ°ÞþTR•1É}$v#¢vS$Æo¹ð*ÛQºØ©F' D¥öˆž«N¨ã #s†5 @X[÷Œ›ZfVa!%RtÇVÉ]uïÃ……³pK5ÔG¾Fs>Èh¤w•üN—®Üs±3•÷£­Ž“Ü>'Ífò—;Â>R½¤ž9Ó8ˆ©÷Œ÷­ÿ³­ÃPŸøÖ/_"DœÂw{ÞN*{ôÄd/ IoŽ£"0G¹¡ÂkÀXž¡?¤F‡ p’iˆ‘õ{G½Æ‘m+eq~ýñí ObŒP6ä=示ª‡M^Ë½æ ’à¼új>5ùtã8¯†áŸ¯ÔŽ Ú(]ªzgÑ›f¬tõæ|(I!Rå‹s8VK…¸‘º´ .•0’¡þù]‹•4Ѻ©š.‰.û=›°Ì¨w3Y?QE0ɹ㚳pð®–²…LE)?8¦CÓ5;Ó±rÏTl$;)6[*t~L9 ¼ˆfc“Í[{ïº8 È8íƒÇ\lð ÐÏ+'å™OÁÂk’·$»EÕÁîZÖGðÂå„,N]zqåXŠGô%l*ÁSb£›Ec@5ºpsØÁ]V,`7†¥ØWcg.*7û*xU κbßo*õ”LÈ&6õN~Ù2þNetçfÂ|ØFýºãøó–Ùg7fŒZ¨¾ÖçeøEWnýod`J"¿Íéù1¥ü fÊëøJ‚Ù£:Ñ=¿LzÀâ‚„¨¸p\¢MÊNµII 俬ò­ìã+‰@ùò“òè[·ø{‹„/xç”ÚAhÔrDd6]UöÕ±FÂò>U.ƒçÜp~¯,9#*Pƒ‰Œå„ û>Òn¦[³¹ñá\wã…\ÊøŸøøºÚÓ©>y¾DE§Ï¨_9ÌѱžÿAEù¥Ží5·_Ñèmwæ_¬A)®¹N ¦dü<ÿ´Ç endstream endobj 105 0 obj << /Type /Page /Contents 106 0 R /Resources 104 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 107 0 obj << /D [105 0 R /XYZ 90.801 734.821 null] >> endobj 14 0 obj << /D [105 0 R /XYZ 91.801 625.29 null] >> endobj 18 0 obj << /D [105 0 R /XYZ 91.801 519.237 null] >> endobj 22 0 obj << /D [105 0 R /XYZ 91.801 293.078 null] >> endobj 104 0 obj << /Font << /F36 108 0 R /F35 102 0 R /F8 99 0 R /F32 98 0 R /F33 100 0 R /F31 97 0 R /F11 101 0 R /F14 109 0 R /F10 110 0 R /F7 111 0 R >> /ProcSet [ /PDF /Text ] >> endobj 114 0 obj << /Length 1770 /Filter /FlateDecode >> stream xÚ­XYsÛ6~÷¯à[©ÔDàái2“8Í4ÉHN;“ä– ‹ )ʃÄ!¨2ŠbtID(wçÍ- %ÎÔóÕ“;rQÞ†H÷v (¹ÕK뤪“¾SK÷zI"ÈD50imâgä8^‰uÒdÔnj‚üi­I9I%“ÏJqߤ¥Xɵ³13c %j {ù©t/¦ð$J’Ãl ûäeÀ²–ÝÏ›t[ûôðÔ—ÆVìÙÅA¢1Å` ¨gÁ²ªEV¥ÿŠX~Œ€HX‡Õ¦Þ³?“Ê`êi€J5` %¼ºSoTùÁÃ#DYô“aºjrɵ[U¼l²á[–îɪÇ¢*ÈX 1G$Ü?ã¢_4õ®©Ç°ƒÓ½XVu™nïF°C&sfÅ®µ6kW ÉïÇdnJ÷Awõ¡{Aa1Åè{ÍêPO·V3„­ˆFĶÛÊ&c…Èß'Û² ‘.KT6Œ‰tC(ö¼ÕŌǮæúa¼¤hK>›¸·im ÇÅH3j='Ж.‘­ºÐ†“¾ÁAÛ:×þÞýI|¼sôÀ9‰ý©V‡o(;ê¥|_4@ïa{øªuÂ,DIÍ5ݧÙd|†ÞÏßóö|e£nQo< ¹jeŽÅ0;¡ulИÊÔPî×?•À¶²³H²-¶é2É´¥€Ä¨„VÈ"ß¹°N²JL¹a0 r×z!õÚ1V‹8Å#kQKÏËä1UÅJ’¯Nfº>iï óªWž:y80–âpŸŸeçV"Éù0”¡€·-è¯YÆÓÚ4DØtdWIÜÊy±’ ªï†Ûè’æ¾Åuß$_%2qˆ *'÷[²|‚zlÕ#IcFz›féŒè1úI#Êõ¸º: 13šØ€.Kk‰ï H”c>„« a?ÙœæR™)CpošŸ¿U ßšiÇÎ8Êþží=¦êL'-Œ{äQ÷òtÛwqŒí!êäã|»L·}¶K/$k¤å\a9_šÂ–Ø«ÅCj³ƹÊ&…(«_¿Rà@¿&¦N^uqÁÓaÆ{a¹hi™:]$3Ë®¶Uu‚XÀš•º½.¶¿˜ö^ôZýW϶öA4üáÎÜßÍ…«Ð٩ꀔ[»º?ÞÅ䥚íeãMëv³ÛéÊ÷Ÿa,àôÿòÙ\~àó ½ªZ‡­Àh³‚ûPD&xŸÀö8âLa¸ëOÏ/{rÇbÄcÖ]:åíCóC0\OšíÒv%9˜l“Ò¨¾õak¢(&0×iÞŽCÌ&ü®!-zrƒj £awf}Ìïa"íÚ2c”¢\w×ñVJ÷ç{³€ž<Ö>}áöÆü|Þ‰Eà  "G€í›@ )âE½‘—Þ‘C%òÑÚ¼é„öú™jÞ´´Ùn”0˜·™°ØØZr¨rSvô–QÖM–MXâ…¬õ⵨“4fèëvìu@½gxŽ[—¾é*Xµ$üýÂQµåï£:Q`†L¡j ˆàö¤„þYÖû{¡ñòHw×ùˆ†1Ü‚ÎRKg …G.\t;ÕÏoÔÛÛ²ÑI+4V¯B—ÂmÌÞœþïµ#A endstream endobj 113 0 obj << /Type /Page /Contents 114 0 R /Resources 112 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 115 0 obj << /D [113 0 R /XYZ 90.801 734.821 null] >> endobj 26 0 obj << /D [113 0 R /XYZ 91.801 657.537 null] >> endobj 30 0 obj << /D [113 0 R /XYZ 91.801 629.44 null] >> endobj 112 0 obj << /Font << /F36 108 0 R /F8 99 0 R /F33 100 0 R /F32 98 0 R /F7 111 0 R /F11 101 0 R /F31 97 0 R /F37 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 119 0 obj << /Length 1604 /Filter /FlateDecode >> stream xÚÍXmsÓ8þÞ_áou –%ËvnæJ9 wÓ”/À7qQǶÜ^ÿý­´ò[âRÚáfn°^V»û¬vWO8™¼xÄ“D™¯œ„’اN„„‡3_:Ÿ]F‚™G}ßwk•ªzæ”3î2»x~qòúìÇß?žžÏ<Ƙ #œý5{öñ|öuþîàùÁ÷êøð‡öV(B8‹ÍÁ篾³„½wŽOX;·Frãð 6sßÉóƒ¿NŒÇÔ¡”$¡v°sYÄ‚$‰ºLƒÐº ¼xpúŽGAsœ üE^eÇ3óÐý6£n§Ý<‡ÑÝŸòz­ñ¿Æö¹Ü*YõWœ./·©ZkCF·quŸÃ!Y+¹¨§vOe½ÍÓY»w¨©Ö¦ËMfgýa3O/!ü±[6 çj¡k×Þ&«¬,v6×i½>ž²~QÈïÁE~l6Ú´U ž¬ð úµcƆžß®åBK¯­˜9´X4í±"¿kG‹ŒÌ¼¶«Ö¡ ¬²X(c–>hLÁ$anQ*\]˜5 §˜‘«dq5Bg³Àèmr%·¹\H…AŽ™ îˆ0pçz\ª4GBî;â3tÄŽ¾ö>o–Úª‘yÀ·ôŸý`¶!ø$‰X$ã ¦2K8 ¡ˆµ¦(¶ÐeSh?”Å>Htsƒ>váÓ€£!`Jù‰X8Ηþš« îÓL‡Èäæ ÉT¶aÉ ô?ô—Ù*…¸áÂÍ, Ý4o²qk9øKPû³*ûÞÈ*[êµc,lÆá8Iü ÃR` {ïíã[«Êv¬ø2‡¼;Cm¶(ϳ)—’„Äð„Ž]jo_¿jf¨¶f.z¡±f+6N­uvåÛ Ý ñÃ.Eæki«}“Õ÷ÚÁ#“VMžßc) IÄ;§™Jež-ÑZblÊž›ú´›E54©Éq¸“@½è˜“x‰OÂ,‰[’Á³¤¢Ê_EJPÙ#IÉë*K•í´i1PtU¥›q[ïÊ™ï¶ÿú‡š9EÍðjæ~Û` §ýs4|õ†ñ‚Óžßhu†/ݘ÷טAµWòÆô̧]Ç!š4÷­uæ²1ÄåÚÈ*”=”‡VUeZK“OÖÍ ~Ñù$¢!ÒSíbOšF‚+)~†-¦‡‹CÔšç­î“Þ°¯Àsù Ø®½|euØ)~ZAݽäsª{—>r°C.Ü“.¸¢¬·æq…/Æ}ëÚ½OŒˆ~–,÷̺2»ÔïF\³½LÂd…Å6_Êþ¹Ã—]KGåÌ;`’?ÌD»RkP³æ2£îp°§Zñ²í¤ kÉÎð~jÜIk<–ât‘*¼PHM¢(¶:07ÚcP‘fp þëNâÚ¤U6ÑÖ)Ü>L¯L­T(\VS˜í¤¹ q‰A}B¨ÛZV¶!óAèÀý*º†oè ïðIŒ­}hò=ƶÿ¬2A¢þMÿ!ma­ÔûaÌFüË@$Þm§/j„ô>†3x%vÂàÑ”Wë |øXªù§Ö5E#~¿û÷A(<æ;PdZL•m²{9¥Hˆàô‘˜Þ¶JïAÃÜUYM%pýwC© {ìMu€ÔªqYOÑ·˜<AaÁCPö~Möu¨Kmý„Ó~Hh´[«£!Cš¤xè‚ÿF“•&Ïy ßDÎ{ÏÝúZn'Ò‰¹>A ò ;¶Fÿ÷ìøé?†Fe©¸Iu‹ì¯ññ¿žDÕA—`@šèdV×·,ÏÌp˜X̧®­? »o1FÓÛ(²Ä^=Æ.%ÐŽpüÆì^VMZÝáJ˜­È |mÆ ÚÿêøN¦Œ endstream endobj 118 0 obj << /Type /Page /Contents 119 0 R /Resources 117 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 120 0 obj << /D [118 0 R /XYZ 90.801 734.821 null] >> endobj 34 0 obj << /D [118 0 R /XYZ 91.801 696.959 null] >> endobj 38 0 obj << /D [118 0 R /XYZ 91.801 421.596 null] >> endobj 117 0 obj << /Font << /F36 108 0 R /F31 97 0 R /F8 99 0 R /F33 100 0 R /F37 116 0 R /F32 98 0 R >> /ProcSet [ /PDF /Text ] >> endobj 123 0 obj << /Length 1258 /Filter /FlateDecode >> stream xÚÕW[OãF~ϯð[–ÌÎÕö n¥²[¤®`iEØ–‡LH¨g}Ñ_ß3íÄ"¡­J$2Ÿ3ß¹““éèÝ)‹‰dD£`º$A &ALâ‚Óyp2ÄÇ‚1çõz;žP³fnïòêäÃÅùù¯Ÿ?^Ž'ŒñVzÁ‹?¦¿_|¾ßL?~›Ž¾H€áCZ‚¢( n×£ëÌáݧ#&“àÑH®NóŒƒ,¸ý9:1³ŽÁ„D(ÆI%’2²OÀ6IÃÉRe[ ÿî4é¨0"IáL#;]®JkïZ•°"az§¬RhâÔàd$©è-ê,;€&йGû¨ªt•©¹El5úPN§õå¨A{3ª¢\å›}¼ÌLDƒ÷eœ°ž(#2$…N. IŒ„vŠÆ(Id7ß„ ›ï= †AZñ«v<žp.Âû1 •Ža–Áêé+&¼\Ú²°µ£½¾Î·ØSÞØÇùìx›VKcŽ6Ö¹hy¿&kU؃nóz3¦IX•C*'O Eh8W‹´Îª#ý5à°¿ÚèoH²}\¤eÕ,óbVvý¸T…²Ëj©¬ÆR¥scƒ>¥ì½¤­Qö1ÝÌw´Me©oµÚܺ½3Êæõ€[ùÂÆÁ CL@Ž:‡Vöí­ɳb¿ÖËÝöžÁº)öÔC"(­t^WÛºr õqg­‹¨g k¹ ›S+ú ì`7ÆB„iV;;M]Ë­ðEŽìÎaU¨¹Þ;è Ê‘ÄñNkÜúÖpŽìw5ß…:î¶Á±ö,Ò¬T}¨1Ý1}ôÊ£WélšSÄbßSÝ f°KµM‹´Ê‹6lÏ»£,|3ëÎ<|–ëÁðh§ÃÄä –•;)Ä#oÓûzµ©">`:ÌT*ýìÊ7?TÝi[S›sâqU-w Æ÷g» FÂÞ£þ§4« DcokÏkbH€ïDýÊ»]ouo¿ìs„¨ oå³¶Û·ÆAŸ±»ÆBç°ò”1D²ãiî=u&ìû&"„Ië[Y«ÍÝ€o %‚7b‡ô¤ÎiOJ”IÒ^]z®ìÁ½l`®Ê„êÄúÕ¼„cU¾7›& › ǦP.CÑrtú:6µg Ñéj£§·­€Ÿ†¨ä¼U½WYÖ'éFXZªAjýOG|éó5«Áb­T®þV½Ã$¾Èߟ8ñRŠ¡.âF0S›»¦‹Ïüš;GX8Ó]ûT)ç¿%dnÃí$$ }AÖ‡æ9YLvZà;ö»OÑÚ¨O§‰DJ›&p~ö¢¼˜Èþ5½k•NÌIvŽö/r}hF1\Å@3ÊPÌxÚ´ÏÝCã$<”Š¡BèÙ¹iéªêg˜tˆìq£/qÎY§unšVòhìíTaC;ÀŸº |‚U6ï6c—ÂlÖùÁÂÔDDäaÏ_jB¸`èµd{©ÏêuW—sûíÕjs-.àvþŠÆƒ+–»Dû°Ë 3s¯ÈK5H ¼'ª‚£ßZï_^+íaý1ðö+þ‡Û’ª ð›“X¡ârI·}A"†I(œ•´;…b¸ËÀÇ —‰$„¢EüÈ®OÍÛYQ§Å“ݡҼŠC ³·Yÿ5¶BÝ endstream endobj 122 0 obj << /Type /Page /Contents 123 0 R /Resources 121 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 124 0 obj << /D [122 0 R /XYZ 90.801 734.821 null] >> endobj 42 0 obj << /D [122 0 R /XYZ 91.801 631.268 null] >> endobj 46 0 obj << /D [122 0 R /XYZ 91.801 377.767 null] >> endobj 121 0 obj << /Font << /F36 108 0 R /F33 100 0 R /F8 99 0 R /F31 97 0 R /F37 116 0 R /F32 98 0 R >> /ProcSet [ /PDF /Text ] >> endobj 127 0 obj << /Length 1313 /Filter /FlateDecode >> stream xÚµXKsœ8¾Ï¯à¶°e$@€«rXÛëZ§6ñ¦<ÎÅñ‡˜1¸üï·¥X3޳IÊeêî¯_Ÿz|²\¼9÷¹•„3n-×VBIìQ+b! Bf-sëÆö w\êyžýЋæÉqõBßöõæÕõÉéåû÷|8»r\ß÷mXÉE`_þ³¼¸üpåÜ.ß-þ\.Ôòà‡î­PÂ9·²íâæÖ³rx÷ÎòˆŸÄÖ£:¹µ«gÏ*­«ÅÇʼnBL-JIJ€29I>†LY¨!‚7çñÈOÏr)hŽ<ݦwâØqƒ ´¿8Ô m—%¬ž>{4h7èö_:ySﺢ®Ú[|ÌWÇ»´ÛHCJ·‚‡º?î…ÖM½EM)ndõv—fȵ–´KWi+^P„¡BnoÒvC7¦ž}ÑáV#Ò¼ÅC÷îV4-n£]¹Ûmnµ]Zåi“ãvQíúN+¯r<ñؘH…v&ãR÷—Êa‘Ýi[u…"»‰_ê¾{dòJgîÊñøì…^.Öi_v¸ñÕ‘Ë^àcQíÏÁ/=ÂàþÞˆ‡¾hD.÷Ž1ù¾?Ê> HâE`8!¯1¹§G.x—0Û]f×ÝÆm»¼hŸ×OâŸG^ÉžÀYD2(Ö:-[!qÌÀpµ‰ƒÇFf`dió䮊î¹u’ØÿäÄþ(&²^E© *ÕHTUÁ¥C-JÅê]Q­ëò¶•¹M»–uõJÈaðcQ¡T4’ 8 x0À+—⹓ ”²x8v:x8LáDœx Óx¨T@Xv3ˆB£ìuˆLÜ/QÛ7 Å!á~2 ‘†ÓKÒyn% r9X¹Þš*ÖÇ&Š7ÆÕ(w3ªâ…É z¹)tŸmE{Ð ŠLCúÉØùê@§Ï@ÏΖ)ÃIŽNiÜM<Ê䱈D±¹z¢ÇlW$òïäqTv€È¡‡‹ênŽ·N_;ÝI©î¥ê®I·¸]¯ñSÑ/žC,¶³¬oD•‰vNñÿ`=ìNð쇉¯4Ù,k™ÎÇ™ñ9‰BSúoóº_Íu´6èpìïÚÇ[V÷•|œ÷iÛ$šÆEO¦‘ÈÅ!"ŠI€,¦e:j‡ân3ÇD Ãðu^ §þ’ªôåÝã-h<âÆ£`Þ#L®›“§îåÑJ–öˆR¸'èÈjm\Z÷Тs<ȸAx.ÙCžÛ•È>쳺úMcnï‹Ý87¦Ú<‚œðÍ MÖÑ/ãëÉÚöLØ8¯™¢QÍ”t:cÊr†uñ#Ó«Kõ`¥¿ƒˆ]Ú¤]ÝìÃ61#ÂbÙº ‰cM_DYŽšNsº’q)÷=js è8ÃQ¤9R퇱M %Á®ÏÕÛUÓã—Øa‰zÙ æïáÿÿõš)_ endstream endobj 126 0 obj << /Type /Page /Contents 127 0 R /Resources 125 0 R /MediaBox [0 0 612 792] /Parent 103 0 R >> endobj 128 0 obj << /D [126 0 R /XYZ 90.801 734.821 null] >> endobj 50 0 obj << /D [126 0 R /XYZ 91.801 696.959 null] >> endobj 54 0 obj << /D [126 0 R /XYZ 91.801 467.497 null] >> endobj 58 0 obj << /D [126 0 R /XYZ 91.801 259.898 null] >> endobj 125 0 obj << /Font << /F36 108 0 R /F31 97 0 R /F8 99 0 R /F33 100 0 R /F37 116 0 R /F32 98 0 R >> /ProcSet [ /PDF /Text ] >> endobj 131 0 obj << /Length 1050 /Filter /FlateDecode >> stream xÚíW[oÛ6~÷¯Ð[¥.âx)1ØÌÍŠ-Xêqú’æAŽéX‰l9º$Í~}y%¹ò’¶ƒ›¢Îå;ç|ü$Oç“ïßæqÀfÞ|åqˆ¼SQìÍ—Þ¥OB!ôï7¢¼Aˆ!¡Ü'v÷übúfvvöó»“ó $„øre³÷óßfï΃«ùéä—ùä~‚<(?¨KƒcÌ»ÞL.¯ ·”÷N=O¼Gm¹ñ"œèkèåÞùäÉTC&=È1ÃÄc œ3ƒ9üý(”ð8öüöÕ—(Ãë¢Ùªe­@ÉHq/R‚@ĨL¥Cü¸,šE.Œ]Ò3‹@qkuRl_Õ¦Ú¢©w^Gþ]€|À—3w³zmVN|kúƒÙ•0åÞ£úʱl#tæq¿öá0BåBnbj‹¿pÅ7» ÿ|å `9îUŽþ²tâß…ûÙº2»¡*Ú",ìsge~[êVù *KrÀ8ÙÃ_,m’U“ç2Q âÈUq"ê4ËÝÑrÃTÖgH‚¿_—“V—´Â|Õß,ËOZß:YÖ±öT¹/§¶Î_í{™QœÂ¾Ê8ßS!#›°¯*c´KwúeB’tDžßduª²õ üœÏ7KºÓsò•zÞòiᆼȵø4Â'(sB95V:ãª(7iýÂ÷)fH±Ñûýÿ}ªgÚTÙØÙ?Š·ÝY訊ôÄCÄD~lQâ>ïbÙgyÚ\¦8¶™ä&4ñåóDGfýVß]”MZ>™Ìõ­ØÇJ$|„Û›Ÿ“¨/ endstream endobj 130 0 obj << /Type /Page /Contents 131 0 R /Resources 129 0 R /MediaBox [0 0 612 792] /Parent 133 0 R >> endobj 132 0 obj << /D [130 0 R /XYZ 90.801 734.821 null] >> endobj 62 0 obj << /D [130 0 R /XYZ 91.801 551.567 null] >> endobj 66 0 obj << /D [130 0 R /XYZ 91.801 321.976 null] >> endobj 129 0 obj << /Font << /F36 108 0 R /F33 100 0 R /F37 116 0 R /F8 99 0 R /F31 97 0 R /F32 98 0 R >> /ProcSet [ /PDF /Text ] >> endobj 136 0 obj << /Length 1425 /Filter /FlateDecode >> stream xÚ­ËrÛ6ð®¯à©CÍD‚¯ôÙc'NÇ•ätÏãïË£«åèÏ·øq+â,t80ræû¾µÎF_¿;Öö>Zs£ÐzÒ”™%E¨aÇJ­Åè×Ñ…Ö‚[\2WúÕ0ÂüÐgQ䓴೿Œ#i«²Jе˜^‡=ýk „‚Ï—qèÚ·ã‰”ÒæŒ3亮]lñ+íëqWe—GÂˆè ‘‡ :äT?8Æ,’ãÕ.š]Eä\ö”ÆHÊS;9<0’EW.ˆ×4¿«t<ñ¸ZV{ÐÉ íL•c@îÔKë}Ÿ9¾lÙ÷qEVäEMv­ÆØJåâ2NS•&© QƹY$‘”*ëä^¥GÚ«Òá'6`ê$D`M8à„nkøš©Ë½‚ø•ÞÓªŽW©An P4¨ÔöàbW’&%9}3•I\ÇM]d`Á mQ`ãKÇ‹ b" ^w½ ƒt}ÈÏkÙ“sMñ|¥Ï…Ì‘!s ¶ gXä™:STç§ S¾ÑAÉÑÚZ•™Ú$&Y]ô®L•‰×7Çs’mL$<Ά’x" /À¤²‰•oRù²8Œ]nËd·ÇfPàÙ?Ñç6Y«¼2npÝ× P‹­b^xÎ XØ#ôJ,Á?´&=20Ü{)Ž Æƒ.ŽPÀÔ²€Êß$i78S×þ—ë81åêz} Nȼ jEìZ¾w±°\ ˜^ƒ¨ò–KW’¾ŒË”V¿$ù®ÚåfàÌÐíWÃxþx×dI¼®X“m˜Ú4':’ùNg*ˆäžÏ¼Ð7õhrí$z}‰’3ÏíÕ$¦±€¼?”Å®Œ3B»EnK¥SÛšêþâRa«{ Q¯!5q ¹[Õe²jjE[IM_pÙ´(‰*£ŠßŒ¹læ`C×äeÈê=-°.ŒjÐÙu¥qŸ¡e'…¦«IÜ~÷`*WÐ ¸o@â*MÖ¶®ÒöSü ¨öØ4\é2£u']ò@ í¡ óP¦s î‹Ó§ ˜j ã6Z8ödžzXg}«ÜÓ‘Öµ £¿gèݶKÄ5áL”JCq@U°e¥é!´ £@ 4´:lHÊ:_—;´Èçؘœ )Žs‡V-^ë‹”æûUI« šJm›íß„ýín-K’5»{4Ø1çÜžÍ''˜F8ŸÝ-BÁYõ¾Ð²Pd{N) ˆ$;¤‰6(Î%º/°ëÖ‡°£#à§«9n]~€c0 f7·7ËGCTÒ÷úfywµX¥|ž0rú=Þvfs·¼¹|¸Í)X÷óûÏ‹+FQ\(“&I$UbºJ@ྡ20i„¹H¥€ˆmaF­‘²Quœ¤Õ`:<¢fÔ ¤]/Ó ­÷1ZEEŒ5³VæÂahbÚXCF˜BòÙÒ— ¶©œó\δFàúÄ-8-ò-1­@jp^›¹ƒÝl»«Õ2¿Rj ¯Kh¿²kÑûº>¼NŸžžØ.oXQî¦)h5èïÀ,½óö~6Â9LOGžÎðÀÌðYi[VÿzKîMF´©7ÏÍ~È“®ò»¬v¥é;šõ˜>_°¼Ó3û’vf˜¾{u¼1ÐÅCNæèyÙþþ·!ŒLøÞ•Ýűw]××3ÏáÔP¹ïÂ+*|åö‚ Nûl ‚çg ^úõ³å ­¯õn÷^ ½W¼ {¯àÓìo2wŠ+ endstream endobj 135 0 obj << /Type /Page /Contents 136 0 R /Resources 134 0 R /MediaBox [0 0 612 792] /Parent 133 0 R >> endobj 137 0 obj << /D [135 0 R /XYZ 90.801 734.821 null] >> endobj 70 0 obj << /D [135 0 R /XYZ 91.801 696.959 null] >> endobj 74 0 obj << /D [135 0 R /XYZ 91.801 648.225 null] >> endobj 78 0 obj << /D [135 0 R /XYZ 91.801 561.024 null] >> endobj 82 0 obj << /D [135 0 R /XYZ 91.801 402.923 null] >> endobj 134 0 obj << /Font << /F36 108 0 R /F31 97 0 R /F8 99 0 R /F14 109 0 R /F32 98 0 R /F33 100 0 R /F35 102 0 R >> /ProcSet [ /PDF /Text ] >> endobj 138 0 obj [755.6 674.4 703.9 1044.7 1059.4 355.6 385 591.1 591.1 591.1 591.1 591.1 948.9 532.2 665 826.7 826.7 591.1 1022.8 1140.5 885.5 296.7 386.1 620.6 944.4 868.5 944.4 885.5 355.6 473.3 473.3 591.1 885.5 355.6 414.4 355.6 591.1 591.1 591.1 591.1 591.1 591.1 591.1 591.1 591.1 591.1 591.1 355.6 355.6 386.1 885.5 591.1 591.1 885.5 865.5 816.7 826.7 875.5 756.7 727.2 895.3 896.1 471.7 610.6 895 697.8 1072.8 896.1 855 787.2 855 859.4 650 796.1 880.8 865.5 1160 865.5 865.5 708.9 356.1 620.6 356.1 591.1 355.6 355.6 591.1 532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.6 532.2 767.8 560.6] endobj 139 0 obj [569.5] endobj 140 0 obj [361.3 1013.7 706.2 563.9 588.9 523.6 530.4] endobj 141 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500] endobj 142 0 obj [277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8] endobj 143 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 144 0 obj [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8] endobj 145 0 obj [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1] endobj 146 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4] endobj 147 0 obj [562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9] endobj 148 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500] endobj 149 0 obj [535.1] endobj 150 0 obj [577.2 603.4 905.1 918.2 314.8 341.1 524.7 524.7 524.7 524.7 524.7 850.9 472.2 550.9 734.6 734.6 524.7 906.2 1011.1 787 262.3 314.8 527.8 839.5 786.1 839.5 787 314.8 419.8 419.8 524.7 787 314.8 367.3 314.8 524.7 524.7 524.7 524.7 524.7 524.7 524.7 524.7 524.7 524.7 524.7 314.8 314.8 314.8 787 524.7 524.7 787 763 722.5 734.6 775 696.3 670.1 794.1 763 395.7 538.9 789.2 643.8 920.4 763 787 696.3 787 748.8 577.2 734.6 763 763 1025.3 763 763 629.6 314.8 527.8 314.8 524.7 314.8 314.8 524.7 472.2 472.2 524.7 472.2 314.8 472.2 524.7 314.8 314.8 472.2 262.3 839.5 577.2 524.7 524.7 472.2 432.9 419.8 341.1 550.9 472.2 682.1 473.8 498.5] endobj 151 0 obj [892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2] endobj 152 0 obj [342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3] endobj 153 0 obj [272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] endobj 154 0 obj [499.3 499.3 748.9 748.9 249.6 275.8 458.6 458.6 458.6 458.6 458.6 693.3 406.4 458.6 667.6 719.8 458.6 837.2 941.7 719.8 249.6 249.6 458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6 484.7 484.7] endobj 155 0 obj << /Length1 1857 /Length2 13545 /Length3 0 /Length 14692 /Filter /FlateDecode >> stream xÚõPžËÒ† Á]ƒÃ‹»»»Kpwxqwwww—àî`ÁÝÝÝ-@‚ÖÚ²²¿ÿ¯:§¨‚çêîé¹{¦{ #RP¦2±3ŠÛÙ:Ó1Ñ3rDä„5˜ŒŒ,ôŒŒÌ°dd*ÎÖÀÿØaÉÔ€ŽNv¶ÜDˆ8 ?l¢†Îrv¶ik €‰›‰ƒ›‘ÀÌÈÈõŸ@;Gn€¨¡«… @Ž mg t‚%±³÷p´03wþØç?ŸJc*íßËB6@G cC[€œ¡³9ÐæcGcCk€²±ÐÙãRPòš;;Ûs30¸¹¹ÑÚ8ÑÛ9šñSÑÜ,œÍJ@' £+ÐðWÉyCà¿K£‡%¨˜[8ýË¡lgêìfè|¬-Œ¶NK\lM€Ž€ÝÊR²€/ö@ÛËþ+€ðïÃ0Ñ3ý7Ý¿Wÿ•ÈÂöïÅ†ÆÆv6ö†¶¶fS k à‹¸,½³»3-ÀÐÖä¯@Ck'»õ†®†Ö†FK7ˆ ) ?*üw}NÆŽöÎNôNÖÕÈðWšc³5±³±Ú:;Áþ¥OÔÂhüqî ÿ¾\+[;7[¯ÿ©…­‰é_e˜¸Ø3¨ÚZ8¸¥Dÿóa‚ýÇft°122r°s€ »±9Ã_¨xØÿv2ýeþ¨ÁÇËÞÎ`úQÐÇÂøñÖËÉÐpvtúxýéø_‚eb˜X;Œ€f¶°ÿdÿ0MÿÅ÷ïháÐfüh?&ã_?ÿýÒýè0;[kÂÿ¾bY)5u1 š—ü_§°°;À‹Ž@ÇÌÆ`bbgp||øüožÿžÀªÿÛª`hñoud”²5µpý«ˆÓûO!®ÿî Ê àw·ûèg €òŸö×adc4þøÅôÿyþ^òÿ¯÷ÿÊòÿÚþÿW‘¸‹µõß~Êüÿø m,¬=þñÑÏ.γ!g÷1!¶ÿ7Tø¯¶³6ù¿>)gà ²5³þï1Z8‰[¸M,œÍÿÕDÿ¹…äÖ¶@;'‹¿#ãÿñ}Ìœ±ÕÇ£âôqW»€#õ¿[ŠÙÛ™ü5{Ì÷nèèhèûqõÄðbúR ûß½ ` ·µsþXø(Î`jçûײsDþ2ýMìÍõ_âd0¨þC>µÿ×Ç:ÈÀ`ôqŒÿK¬¬ô1ÁÿDÿU'ƒÉÈ`þÌÓðÃiú2²ÌþÀìæÿìõ¡ØÜÃÞüã-û'âÃfñ~·ú?”[ÿÒmþØûCè©þÒb÷~µÿ?”9üÊÿÀNàÇi:ÿª\þÀU®à‡*·ùC•ûø¡ÊãüPåù7þO£»8:~<¢òGý‡ÿ~±@w 1ìÊ¢1O°eCð·ßuB¸nt“|sdêéTt^+Žß]ž¡R¨j³·„RFú×÷Ä(ïW _½ÎÚ› Â:’;Ÿ½_ô”f:a—§?NŸ 5àÃàÑ©z¿:x«X}jí–&ËwpáDT(DûíÖ/áÞ8P±6ºx xXË.÷R1K£­P:OV`”³€E éL‡MzíŽ4ÿ0‡š7õN(@ësÃR⥵Íû¸à¹Q¥ÂìÔƒMŠ­……ÿéu|†ÜKø8UsÉ«ìkôßR.GDÜðjp₌6±¯–cp9_–¿l7iOž›q–£µšñ”<€œ‚°Ú+„¬LÂ4©†d¤L?ÏÂïñ•_9QÔ„æ{/AÏù¥j7µwb7SÌѤ ÁÚnWŽ/ûË#$C¥áŒ„,DŠ)È&ɪü—ϳÊ>bJ#N1MÅ^Úïô_ÑY~² óþêl£³ÉÝçΉ©0ùl¤ÐtœtuñZÒo>¢Ý\‡~4¬ßž7íÌüÆ’ÔÂqL+ÅŒ)ŒxQ™Ã9,¾Å¸€nã„§ ¦>­ød¢qN„73 €8÷šÓuQ!°¦x‰zÎzTŠ’ŒÓ‹¤Ï°÷ÓŸžÀÈØç¼Ìå¶;ánUÅq)MÒÒ¶ÉÐc6lž[?ô[dMƒn¶¾cN\ø|à,ËëKN¨žRå&kÈe†ªÝë`¾£èŸ9™ÿ¹ÇÒµf†*äJשÞA‰øuºv(„ä%xكߚòø ¡%ã§ yà(žÅûKLº°á9“w{†^Þ÷¬Ü_m®ÎZVšFÚr®iÖùMÓUf¥ð;PÇ:CöZÑ!–W-QJh1çô‘Ëð”þ&ù©¸h+—‰ZgÉ£ «Uäˆs½ž·ge·V¡EO®|=üBÎ'lâkèärI¡UŽ®E~âÊÜ¢LçóÔ7ꙃpk6¸n8qqaõý'¦e¢·°bfêæs\Èù ÜhNnøŽ€[kÕJ¨¶`©Â;m·J0œÝqcr­#ƒRì™ò¼®Í:x'I ø×4ŠÏmÔN‡Ç³Ó*&\ó†ÛÅQÈ!«Ú±ã† ¤©f L/¦HP:Ç)PŒ'0†JSz(”™/²˜–($cD6n›Ì$¶cŽ;¤ÞQï3*¨²PÉIºÓ^•¥ïO¬ô)nh-UûkÞ ¿™…OÍÖ›Ü~Yõˆ×åÂÁÈW•šZòÄšÄ[Ó°ŸWâ÷™Æy=Þ£P?n^^¤aÏÀ¡Ñ*+î#2í,|®"§(³­ÆÖ1hÐUŒ â>FÜÝhïc·Æ¶e4â µÑýv}C{ưZV¢£IÊŽ£M *I2Ø-Wðåœaª^ôeG¶v·KçžzGð·' EéWòéö¯Á×Ìië‘Ýd4”)w™Vþ X¢[o Ã`)V”¨#‰±qVéÈöµˆÎz'Â?žÂ°vêu$|O5ÑôÊÇ›Þ0 ŸÑŒÉz|)щVa¥]—œ‘|Ò‡¸Ý§·½öòÙCQk&&“Pä‚3`~“+Òý°<¢ˆ Ì#oàhBiGIuÖÚz×qÄ÷ófK‘+mc#n ¤îªEêÆ?_=å­‹žLn¤í”ýijI“œp>Úõ½{ ôá,o$‡Ø±ï—9ɧÊ-mÁUŸãâÅ Ø©1jZ€e÷¡îá€+}¯³{;4F9ÌU¢•X¯¦uaíW“0z: 4ÜQãнH| ”ßW>Âr™½ÏÍ¢–¶µRÄèa¸ðë¢-Þ¿É¿„ÿ¸·â?¶ÈùÖ·rŽ ‚Žæ^}fÔîÒ'€û5t¦>q@›q¥Öî”ãÙ“òr dŒà׉ A0_8Èkl]>x5ÕBà©,"Ùjò©^6¦Œ<'uÜy ‡Pl]wZ#ØÚlþÓèw«D]MªEpÇ•{NŠ«þ­mɼüNÐþX¨o~ý-T(ް»-³±y#‹µ`%…Ÿ´|³DŽÒ`£TéÁÄ¢D:wXò |?þƒ¦ö—%T=ˆ¼h»O¸×Øö‰84“¨XtÐ#ßYüV_b¸±8 1XÉ-èG^yÅ}÷91ã™ìNh@ªJ,þÍ¿(Yë_Õ{öüxU¾fcË5ΔñDöë ÿ£\9 ´êbáü‘³%4ˀ܆Ǯç×àCÚ­ëVÁÃ'%ta þŸûÓg%Wçk®ájâ :BæVõvé-5ÛÈÙœà„`àWWÔ݃øòR8Š®¥\¬`žï¬K¿l¶œTø¢9§[FºC+¹Pï¼Wª”f÷Ë›”Å_˜Ó¢Ú_‹±Ö¾©ßŽ÷µ}=¿ê÷{Jà¯*¼[>ÁÑ:¢Ç·üÂ-¹FœþÓí3‹råuß›¢«Q—KwQ-`íc·Ó£¨†¯Êáó}÷7˜~fÂõ-ÅeBñòø™ÐÖêͱ—˜æÐ*ôØO–y_×X}Sâìàh¾#à·€ ‡ o©ôºƒ³säg ñ;ëÌQs jµ…Åú6ieÉæmTñ²¿£5 ý¿Q“ÖÚÚ¹ï°Èïû~ª‘vij÷F¿†¤›ªò`³¾EÅ4äb+BZ¶ÿL| nLˆ„4ë #4KÛ²Û\G "ÃWÅAïùfQRÞ¹N9Ÿ`¾?n_Êkì®*,¥ì4mg|ÿ‚¥=ž8©¯#«î<Æ;ÂÀÓßL|¨„Wm³ÑW“—EUóPŽž%«ã8¬Îß;7“h—\2â±·±B%<y­Ó%¸jp=%-`spXI¾ãdÕ[œÝEêžÍkÁ3|áâ€ß+në™öª)ÍB­Ô"jÒ7 s\µ^‰£¾êt ÌÂÊÝÇ[éXŽ,p†—5›…å¶5’† ’íèwˆÃIr<²dÓëçúT!¯¤Ö(tTÍÄØ¾·m ;ß™ªCÓLqv^ôK%XÇdl‹Úãu VwÖá)*û ¡ûRTAÐpkŠ5âæáá-‰^àuªêû™×º{ÜðMî"¤ËåÒim©}yIæ[ÿóä¿ødTZ¤k¢b؈%RÞ XâSM;Y®±ÿ'’â!ßæx¸´È±/‡Ÿ€`³ a†+ÊL™·SÀ0ÀaŸ8œ ‚“ž1ÖÉiˆG“[íÉ \:[ûÀˆõ 5ûë„K*! N‹gœ^h ×…y¯{L]¹ø(¢˜WZu»²ªAÍçƒbœ Ê¨wLæpÞ”%ûõ± Å‚>£,h¾è-'Ð]ȯPú¤ãûÀ-$ÑÿLP·¨Ä0,ž Æåu *À«ÄñÏÖúÄZ¸¼l¾’GžàwçÙD-õ Ï6fÈ—<žª¤!ˆ'¶9i¡ã˜†ÿœ«œÉ|õJ}3 –7Ïä Šœ„‘pÆîw²³‹vÓœâÄø³˜êÖÀ˜áf¼š›ØûÏßUµ+çì•êK1p¡hŠœ0¼ðdîÖ严°‹wÕÈ—¾Âæ»|ÛâM…[ÄÌ:íº´û~sõ‚Ž@Ê2Dkñ#êHMŽ—•˜Õeƒb¸z{e²6 ﱨGgomè_Ÿxq9äø³g90F¦m›q§‘[f*ܘY7‘—BzLŒ.E}µ©j¡ÌXK XŽ_7$ÈAìåƒúÈRðWxª¿9'"€¦qƒFcٟŸ¢?öù¸Éeb 0€xÁ”LUù1Ò•§íYiíÅ òF">¼yz,ZÏS½¿7Ö®ïe Цö‚z6Tmìf3.¡W˜‹AŒÁÒ|¨üsöŽ<“¶¹±yQê]ݯ‹?ÂäÛõ]!—çîKÈ"yŒª¬rÜòŠ­]í¾õ8D¨ûŠ4>Úhbÿä;îÑ›=Á2ò¿åÙBëŽkm%ݿћËç§Õ̦Ç^O.ÍÌ#M–øÙnÙEKrùY•|R¹ª‚é47º2]¹z¬Kg¯­ï92ãlcœÆœ“> h¤´I áÕ‚f`|ä® ýÊDd|±€çáŒ@¢¿«®È¿xp@‹D¨)« ¼ñjè ÖÎÖ­$[øæ/³,Hê½"ª^5wÇ  ß©7ÂBÍ(s¿pÒÿº>ØJå3÷©FúDÎŒx–”í‰óF¿Ë¬RĉY¤™ƒV&'i!Wz²srŠ*ÿ0%œuþ q‰´Ï®£2µ½CŠPÃ8GáײoD+ èÚð6p_¯d€õc„.™ÊÿË×UC @¿!‚žÇkŒ^~å,9ÚVZÄ=ôÑP%Ya7/¯ÛnŸ•@òä§µ7KÁ*o<«‡Ï~¬Eâoç¡N>Ô¯?–e¾Z–fü4¶×õóÍàäíÜ‹ïMgi)²l?`Î $Kå⟼&õô×ëëã·‘ý!+¿ÇõË#⬱;ô`¸D9E¨úB%J/0±²Èõ-§Ö”Ué¹â*vF£½}Ú„I_ÉZkÜ…ÊagÛ ð„ö€xÍb¾§|¾•u¤€±"::èIÅ =wÞD¶˜Öw¯¨Ë;o×?n:å»hšÅçý½]º¿²J”Hk­kAFwdÖ¸÷×)åo¡ÖP<}Î1á´äI;‹äçð!ré¸û¾O ¿SHÆâ”hÚŒUw*ñUTv@)s©[^ÄdôLÖÈšzˆoß”£èe*òȽ9ÂÜ$^±—³žrI·Õ"fä º–߬mfÙ˜u¤Bý¶Ó¢;ÖA&ºÏ‹‰Ã Y¨úaóá@å9Ž¥9 Áçw˜8Êeš<©Åx°¶G'°P ìÈœÐF”ÈÉ>czôb†Wh¨§É©­Ôùˆ”O<NŒå˜u—›’Óë,/^ýÜæÕaè?÷_kÒ(Ĩ`O´›ºü±#¡ÿ¶éŸÿ²hs„ÿPßy.oMD9·’“z¥ôêÐA— å ¥÷R€°È! yo4ìm‹Ëíïê0Ðô8e˜ÒŸ=¨Í’¯úËV9ªN•ð¼èÚ–ÃÉÆý¯ê®2%0ØÃkÕîƒ$`Rv!Qp±=ë( ;peÒÆ»Ü#4ÊÝA”€´c{ÃÒ-pâóa']ò´Úµ]Ýl«Ÿ}ÊM²Wç›úo–¿ÇÒ•–Zx¯ö·ãí ÐŽ ­•½˜YfP½ëø{›2E´ñ}vèlÊ’$2yH˜ÚäðKUX‡wÆðùØ·<¼Y&í„Èà?¶v…V(Nhð8=<•Ï\FQ®’§4<ßrmNVXÜ—î",dˆbª\¢¦M¢Wø±Dê5~Z JWóS7ñØXc“FŠoœ9¶Z?c<›ù §ÜÑi®¼!Ó¾CÕ†áOà¿ôT‘ÒlÝf´ãt[÷æzÆ-åÕd@P¶[˜‡o-LO¨ÑÜ4+ýÄÏUþkz€¼î8aJÄ]´„á¶m‹H¸ÊƒÔž8z’É0‹í—Op=MgiàD¦êS)™€0éAÝ(KWRnŸ’à>³b-ú‰¾® ê³ÂÛºv:ÚÌ{šPVÕ›ŒŠ³³¿Cnz7%fŠ‚)<¼1r@?ÕÅ{èR_¤VûG Wí¼ºH«|m¦­¯ÛœÏYsJ'1ª±ðÛ³ñ˜FÂ;ºÀT?ÑQWL"amËÐa-;Ö,¾ÔfA·Yζè= Ú•²N´¡énUÖ¨Åï$jÉd÷jE©šgM"K@ÀPú‡š ÒΛ‡ÞñZõ{«Y‘ïv¦AƒsôñÎt¸wÄ´×¾´qš¢Òïbx[ÊM¤µlŒÛÖ;Ñ • i‘8ðõŸ’ažJ†ëwCsø / ¯EKÉÈK§£îƒÙ"‚oÑIrö“¼Úq1ŒSe¯À!0-•Ó»8šr%íB«ßfS¥1ïèA3˜É†!ÝĈzõF‹×u][+Ã0Ô{/~Øo玿ÎWn¼k¸¹[‘Õ äã…¿ôªz"ެK]JÔŠJ"Ö^²“²:Ë~kF®•6m†ý&u)/…%²˜íÐlH/“B;X Ïï/’èkÍA‘kcšGÞd7Ê4°SÎrhñ6RŽrà‚߀`Ó»”ŸòÍËdâ ?Ÿc\úhQÌcâ* ±ô€ò›FìCTÜÙ¸={|Z®jØîÖMò‘e„v°Û‘^ºdÜ­\mc³îo¨‰ ”Ë=»O09é—WaSê0îiíwiÑÏ­ÃJüÚØÅ 8âäD7¹´´pž ±lÛ§¾p¢ˆ:Ð& v‘ÿÞ@Òf‘ƒ¿Ûq‚ìw^d@›ªèmSç9ºL|nAáÁHÖ­wa܃*‚_(V|Ñæóô-Q( –QuH´ÊIÚ#™B8²j¯ƒC ’ƒ¹¹x–ÀS"¨R—B $VÒä¸.Uë\Ÿ™;]¬;‹¸ÊØc¤œl\PÙW¸ÃŒ.^» 0ì”®t÷ðmçÄv±o.ôFè`»ªÃ~'Õ¦rz•7áÍ!‰­Þ>Q­”›§äœF È0ëV<“D=€Dv¦ï3e?Â9_,ø¡Š>¾ÉRÍgX¤×á狌%²§ûús¿ÌŸy“ØT¤lO?|O\šsæõÇëø³×]÷Wmcd¦ hŒ!SP‘ˆvÔ¯îêc©ÕTñÂa˜Ñ2F‰œìžðã/EõòpÜmF ÁAÍâØ,ë¹_sõ)9s¹¹ Ü=Ô´Hqóž!Á7"ÍÄç[ŽÖ³oŒ$µ«Ñ§Ë nˆìü7²àˆA(Ymn‘0xÖ~ð+‚¯‰†¨ó€ŸÜÐ0äšVçzóò¦>¼âS[„ØìA“f¢ÿðR]Ì©¦Ö! BfB ›°ñ­â4dc©Ø?ë´RàG˜í¡.T?„~7æ êÈÆõÿLQÎ3i¶>!ïôHšähU¿=—óãRñ'(ES‚ãž?+^ÅPºÌh•^åÓ÷£ ñÒd]AO1\üP»‚´|Õc“šgh.MaG6eU0Îõv†N‚¦P]ß]ÄÒ”b)ùícûôíÌYƒèƒKrÒˆ¹™›3†'C—7\î%fÝØ]ÏÑ„+gêãÔûÈvè¤Ô )u<È:“98ä˜6±ˆÔMIU °þêD^9tBŸK r‡D–•¦EϬY)Ý삲HxTôo3”r¬Ê[«\t.ŠÛNÅmz5V‚.‹ §¬MÅÓÊMN¥!ˆ‚ŒÌ”æ¶bºƒN´à° ÷›AªE LìoçÎP…’aHÛ ¿o,è·A£Ô™¡Ýc~æ³ro–/}Õ±µœ†4…@>H0» ËM]]ÊX½“?ì¦AÚtÐ5ô'܉¨ôtaÌ!º½TµŠ£Ä=f7_qÐpà¾!ÂͲK@®¦HY4›ÛOñ¡ß =̤œç@v'h]P4²¼AQWÂæpôýÖåÃKý(…}×~jjajI­ØrÒÂU3>y8½6ma.Î."f‚ ùƒ 7û¯”×ÉG ülr,c…¹&Ì“¡1ÄÇhµT—¦8ü2¡¹‘Ã×,VÝggñÈÀ‹\ ŸA£cœÜ®)¨º†:§m2áêûc;žYGkeS,„¨·‹¯w¾ZÁ¶ò-ÿR ~*eÞk”5e µ`Dâ!ó€å‰œ]”fñQ)°ñG8F P±áûÍÐ, ‚íår*kŠt9¬†7ÕòÜ¿;Íù8ZÝ™Ü2 Á2 úü8ãÛq)GÚÀ!(úÌ¡þöàmƒÇ_—ºü„ˆWè}α¼Ð§£.c¹(ÐÒ– «/Ì™sAØý˜Y¦MÞ93B†x#wà×÷‚¢df¶;¤ä!Ë~Ut3¦´I–öýG L`n*¶­)®µ‹7çx—Lp» êäkÃ2êò¦Ù¾½ìñw(a÷…Ñž¥]dn6’ÑŠ 8yZƒtt ïÀºÅ#ýZBDRD‡‚$2#P=ŽæãbM|b‡¡§EñsÌ¥Š±))í°×<ö§#?ÔêÎÚe~gÛåÎÀ\ „zŸ[;é‚h¾}/eJðÉMÊùX¦™k‘¢YE®D4ñFP¦Æ NâÚê–@ú Z|<Éêo0ªêU6¢©öZììA*OjË09v Júvª/_¹~ K.^,l«òÄK§iùÌ1@½–ðyÔðs€²«¼²ÌõÏS-u¶&¹vÇÙŽà]wëÖÂó™p8g¥n5ßOHpA¯ê›°¶}WÁ€ 6/ Ä¥”Áõ ü1²Ž8jNTòK¾ ’–†)’8ͦ_÷gž-êÕbÎF?U+Ê^6wÖLÊü:_ñ–W¢A:&´•C‡ù͉×ÔJš°i„à–éÉQ¬ä¡)¼å)D´fF½Ñº"1BmÄØ3Êž •Gˆ·ö$á/M%±àßXÞ_ÌA_<ºëüx^ðºU›¹ÏBž®keµb)å%ºÉ‘ä¼2æš0üf¦WAMó}W€Õ#Úþ¤Gz8a— ÕhS§Í‚Çñ•pÙ¥‚¹Kׄ=îËø,l[!ñ1ªIy”-1|¾ÜC„å’„´¯î÷èe{ÏÅ(Ùù@N™5Ó¨ t6WPiÁz²‹Û)ãÈwö9SA:cä¦ú’]³aÈK̖˱,AMè¯X[»<ì+õÔŸH±Ú™q Lí/óiçc&÷‹À}'dRî$0£Söù`Øâ¼7ȪRÛ€®ïc¼më Ace³^PÛHØJë’áÒøš©o{Õ÷;ñ9ûQäG…O³x[6º®*ÊwÚ‹ØÛ×B!|¬†J4›Ö@JÕBݶ)&ݵ4×2ÑÄî¬P0Õd 5ÆŠ‰k/*­Çvî[‚˜à$pVl‚©ÏæBa¸ñÏ2¢™\õU=ÚŦ*Hœ;P•´ì9¤ª®ÚïË$9ˆžAàz_C‰Ä‘Í\° îûÛ ©–_„kä… ½;ÌNd Bì4qà-ªOa‚'4D «Úf:£‡“‚Ç ²3«žÄëÈšÉÞš‰¶­¤ég‚“ø¾îõRSb ªX»Y=óõ{HÞ}u‡µoõoÁßVRTi1š œ=n t" »ØQÏ\DûŒ6~Í€L>îÝÖ4«ïI ÿÞùF9%Q´(ÞJ ­A¯·>ùÍU¯§#Æ3R½3õ;ìô×Lí†%¯×±Ì'òçÚ!Q^Ù®óH »¼Vl RU„èÙü66Y’³wh½ÜŽ àÒ¥qª#|§nH°üÖTUø·3/ù_ÈKàï`œ…²"8Uדz-Z–qÈÏÛý |2/׃ÖÞ¥ÂÓ„"eœÉBîdYØò›Þ¯@Bx`Øw‡ŒÕO'œ*(¿En’xì_;ØvÖ¤œ¾é\ÒÎÓàµrdž\O„¬X³š ‘¿?°‹5^ïô¯'³tMÌÿTØñ×ÜÐCc Ó‰ôãVŸµ?’€=ã^-){¯‰B~#Û¼÷+é#ã›Y²Æ²¹q‘ÙÀÓá»Îja«bîZm²2U«Ø·^i¶ÔwWâ 6LÈ`™tŠUõêåÆ|9!>¥Ä<Іº¥qø²!Áîý>aµàÇJë·üÝ-ê}’ð 5ŽÄÓâ´Ö9H¥ >@ÝÒ;‡¼›×Ý„¾¾Móªôb{‚³ôvõ›=¦hwÜQÅ[~ås™~—╼Ë"2;ì…ÛbI³vÛ(IXÝîѫÛ*ù$aš ¨)úW #MC'ý cû–fŽL°•à˜ˆÂ19kßhù5­3(•7Áb†jÿõd§ùÎ,REÜɺã!_dX '¢jyªSâÒk‹¦âkú º³*=¾a»SÑå!¥ÖèãöÍ'jÙ›u:ZÚõ%ÕúÞ,Ѱ¶ìÎù½KеÝj'NäÕ¥Iè3è}бyÍé¬À/dŸÎ-ð3CÎÔœjž¦* -Žß6",a’SøŸNžh* Göyʳ¢DÍSVNì“Vªmrg§h3ˆ}Ì2 Tä1$[#ùå ‹JèçΞ4ùVû'rb TgùšiêðVéo2'DC^Vþ¶*jçæ}ÄË“÷¹;°tÅÄ‚3©WeÊ÷زOŒ´´,SÝ÷—™F°zw°zÅí 2þ¦|òìµòLú³ãã%C¥ß©Òo$/£(ƒÒL¼´ÄçDElÁB‚öóÖYДÍÖŒh,û3‡¦ÁvŸd»¢~Sµiie|Q沞íÓC–,ú]Ù!Š(±Y[WJ¦œ°šx¾bd‰pqÞ§g¥ <…F÷Ž6Í‘Òç]”vÅÉüÖwZQ›'ÂÊî`(‘ ÝÓáššëÚ4i+7#7"Ü{ZQªÊGv)_”îÔlSQ&¥¹k›yß”¿qN“—¤»«>àÇ0¹½y°¡_dA™#ðcOæñǹ*¤o­¼-Ä«Ø:X¥ì9È4Gõ1x›†ë‚>¦šnÃÌ áÕꜙNµŠo ÎøXÒÐHïƒø0÷+¡Ã1ó%ˆÙ4­£óí s )úl#[æöA+®|Ã΂0V-æò·>‚Žgd«¸´˜ƒH†WBZLm @Þ;XË5LŸÑõˆX– C]ýœD6ç9M—ÉÁ³“k$»B(}Í)ª­á)ÇžÁl¹Ó–¡öÚaÜõš•5 ئó”øåӨɛX«ÒcÚ¬Òº‘Š®¿–íó‰}ñâ÷˜Íaa¾q¡Á/¼~怰–¿ã‘ü—˜Qc v‡ðP˜óÌ9,Ow5ÅDŒo"p2€øÖp®<Ø {ÆÞÖŠùî¬oµ ?¶7(Ë5ã@ÈØ?FÛeZ´E/*<YOx@Y’Þ9Œ.2wpžb¦òúc×@ºGU_ÓÅõ}Ô}fº©iÿiõ ”SWtƒëÍZÿŠ›0ÒñóÊg&O#eX¿6"™3yÕÉZìßÜLtõCçô bPEø˜8ð˜`§ìç|8©LnÚÖ>ŠÍg{v)&Ñòû˜â@”Ä:?áÙç -æ^ç!âÅ}¥%<ßø¶~ÞÉ“s>s•ZS×Þ±Pꇥ_Z®Zh¸›óe9ÏSâW†ièci™Kɑڤ¸E5¡¤ÆNR©-Cgr/¦í{k¾’R÷*«š§VÀ |¬¶'÷.&wñ²]3¦ˆþê¦)Æ-tÚñ*ËŠ£ F`£È\”¥ãp½Éø÷>8 [‰ª¦Æ´ôAwvp”bií#ÒÒm=G³±´+UãQ>_HÂÈÔø=€H´8B2i·SçÍØj.ðÔÐ ¸ò 4Ú .ˆ%ñ¾ïÔGm£gTïàÐ!t/)‚kf[ÕÉ3Ø ÃnÞ?¾€ß3É*¦”?šífXâÃ^ËÅ端­Ê§ŒñÒãH}QtÀ_¼&m˜×´›šYF¾iR¸™´ü2ñªø,éÈnJXÒÚÃDP2j‘VØbÑ̈›)ü½ANáz´MP GÆôþÄÆé#ÎxèÌÙ «`¯I§”©³pg࢙SE¤ž…ò³wCa‚âkº‹`nÂ3TŽkW¨D?äz¨Nƒt{Ç£²€V Ê*ÚkqÀú ÓˆþÃ\øÚ“O´›8õ,ç:"·ÆÃ¢ÇMpÁ)Jˆ*´àJ\ps —y'?F—ù+Ì7c¤±à« ÒCrW»æ)ÿ¼TþÕ¥G} >÷vA™õº0†{Sõ Ý!“"‡—kÏ„Œ$Á{³Òí‹*Àq³Ø›%ö(>GåZŒ†sÿ®/ò0’ñˆ5&Öqõ¹`þ9ñ’Xr]ªŸŒø`6Ð%9–°})îÝlN¼4§Êýf^ÔÜW-*íqJ g]€š{¬?·*>‹"|¹I «ÊÓ¡&WÃ×-?Ô9ØQóÍ(âWâY¯©<Ë© ¥ÓN^y¸³ÍKw¾’S·½J„@l AZêËk‹\ýþf]Á±™Eû *#T·RØmÓÎÊᥚ>•¥QP¯‚P³I¯pkÝ”jERŒõ)ò[qBǪݳšç•Y}‘¨2Z^|$X1g¬,…"¢z(w!K°¿ŽP´—&ààÅ«¾íïàWH¾Ý®bxp¹qªÙi ¤¸!?^I“Ö¬¾‡³Íõ=]ü^dð÷P¨[ÛO3hRO]ro_ß+‘¤Íw ;-_t´©3Ôún$®kàãK’ú-ØÂ½šÜý¨Ñ(§ôEš6èÎÍÓRÛò<Ö—$Ísµ«’ž¡Ñ¬Mz`óz„»•hÏ#‰5ÄZ¹Ó•oâÖ¯4\q˜l„c?1¢—EF!¾,Ã@Óõ{e‡#B¯TyšLSä».Õ"®þÕ=DŽ|özZÜS šaÞfÂ&šþÊn`ᥡܶtcq Œ#-Æ{+*T/t«Aò2»4àrbVBÁ½tÀˆÐUy€ÿĶÀö²׃¨D`°ð>Zh'–2[¸„õ>UA3££¢ùàbÊâè^EšÙ› Î¹KŽqYƒ;ã·Îõ§2ý®û©ÊÔŒÝýÖ%n¨ùÄÖÚj™tÖ¿Ö‰ ¹r國 ÝÁîm½˜]„ø 8y«¾ŒNf2û—TLÐQçÀË&»Ï©–nçb£@ ‡‰÷ÿZðŒ7soM½S×óõ¬-JÞµ@ÔÞ†6ƒÍ”„ŽA¬üÄ mï<ã@Y>—Ú= íýåòš~7ì'E_yØd‡½ÄÊIŽ2œÍ–ƒ~£+Œ _W¼ù¦þ¥õUóÛKÕ–wN‚É3|†§Jº !ËëÃJ{ý{®c[àˆ!tZé;lj Á{—2!¤Ä¢0©l[Àd°^ª¹Îw·1å>T”‹oü^åׂà Ë»Àðô-ª E¬8í=«»Î1ÊêZvÞæÂù¦ÿý§sýªO ~ÖF~Ñ´úüfsŸ}úJ¥ï–k$],'ï¿æ ÒÁ‡íoôÖ'c›ÁBè½à¥M„Âf¸Ò¶õ5ÅÈýMøÃ¢Ä¸iÊÙ‚7wô%ó¡’p)ùÖoE&þã¦vÛ]A8©ê›vmSÿéÐϽGWŠÐ_v»Ï<.b: }"BU‚Þw{ïA‚5n(—v ø3±bÜK誾&‘ŸkÂ~6ŽkŠ>´¨”6ˆŒV¶¢™@Ü9Ó»öä…‘x¹þÞT&ä]^Õèc½ñH\6›DË+™Q'? Õ4O¯â—ÄŸÁ8Nh‹-‚ЏvÔåäÇÂM¦ñ-èuâI²å·LûЫËì2Êfgá7œ¥¤¯Ò¸ªô!wm7K ©h˰"(“??UOÉ>9¹ð‰ý¦S,# ×f†*À '·øìÉk:ÀðÝ¢2‰ a1É„Tf…Æxz–þ <[Sjà Þp2£0׿Q"?Úô©ãÐÍý×*ò:é¬Wƒk †ÜÉa¢ä°½é3‡Øæ/KfDÍ!ͼ^Eè¥7®!Ø#ðµ'³îSQü°]u¾#Lã¡awRÈÍo:8 âDÃZß LðJª‘Ôî›hââÀËyGŒ˜{‚`ìS[¢Jmaç‘´÷{D¬?•FÅc¡ñý²S’'V9Pdû¤ ý-ˆq7ðù<tÏfà@b¨iߨ;r4¡3ÝoÅzâãý^Ò•FEôJtï*Gt;ð«ø9é0›‹å:í„rÀð ºÙ“Å·SÙþ8Ê•¿û@´CS¹— ò£Ô¨k~Ë_¿]k Ê™I 7´lkÊb›“++r–Âz³û¬Ê¨AEµ+EÜ&¯Öµdœ¤ L;X2`ÏE«Î#£²b;Yíâ`1 ‰^Ü> endobj 157 0 obj << /Length1 2012 /Length2 12811 /Length3 0 /Length 14046 /Filter /FlateDecode >> stream xÚ·TØ-Š î.;»{p‡à 4NCpw  .A‚»»‚{€A‚[p÷GfæÎ̽ÿ¯õÞb-`WíªS»NÕi ¡PÕ`7w0Ë8@\XØYÙ’Jºì66NV66$Mk;ðìH4Ú`'gkˆÀ¿’N`Ë‹M äòBTr€ä]íìœvv^66ÿˆN)›µ9@‰ ï;#ÑH:8z:Y[Z¹¼œóŸ_ôf v~~^æ?Ââö`'k3 r±Û¿œh²h8˜Yƒ]<ÿ+½•‹‹£èîîÎ ²wfup²a`¸[»XÔÁÎ`'7°9à·d€2Èü—4V$€¦•µóŸ  wðb°³6Cœ_B\!æ`'ÀËé7ŠG0äO²âŸfÀ_Ͱ³²ÿî¯è߉¬!ƒÌÌìAOkˆ%ÀÂÚ P‘Qduñpa€ 濉 ;g‡—xÈÚdúBø£t@F\ zQø—>g3'kGgVgk»ß¿Ó¼´Yb.é`o†¸8#ý®OÊÚ löÒwOà_—k qp‡xÿYXCÌ-~Ë0wujA¬ß¹‚ßHýÅy1!ýc³»¸ÙØØxyøàw°‡™ð÷šžŽà?œì¿Í/|½/2À¾Öà—HÞÎ 70ÀÅÉìëýoÇ#$vv€¹µ™ Àli Aú'û‹lñ'~¹'k€>ÛËø±Ø~ýý›áË„™;@ì<ÿ¡ÿqÅ@EI99I9¦¿$ÿí”pðx³psX8¸Ùììœü^n6€ïçù»ÿQÿ‡UdýWulÿd|±pðÿ)â¥{ÿâö×dÐÿµ6 €ÿ>AÙáežÁúÆß€›Íìåûÿóüòÿ7û¿³ü_Çÿ+’qµ³ûÃOÿ'áÿãÙ[ÛyþÅx™gW——ÝPrxÙÈÿRuÀ.´„ƒùÿúÞ¸€^6Dbi÷w­e¬=ÀæªÖ.fVÑná%¹5¬êàlýûÁ°°³±ýïeçÌl_ç—»úÃ~Y©ÿ>Rbæ`þ{÷8¸y '''ÛË€qps¼Ù_–ÔìñÇl€¬——À‹8_€…ƒÒïåáÅ›þD< Ä?ˆ”üñ€R#Þ¦â?ˆTùñq€ÿ ¦ö߈ÿ%'èoÄù’dïø2N¿ßŠ¿9/VÓÐKn³¿ÑïÍÿÙ@ðßð¥À?¯çohaýó7tûWÄo¿ƒ«Ó¿2¾P,ÿ¹@«Á—~Yÿ ¾”j÷/øR«ý?ý¥VÈ?G½H‡¼\ê¿ü/Å;ü ¹^‚þËýR›ã?îm/²vø—ú—%à»Á—Zÿ¥„ý¥VçŽÿÀnàôBw~y|þ x9âŸÖ½,+ÐÅÊ ü¯f½èqqwøWÀ‹$×õú%Âó_ð¥~¯êi•ØéÏèÿša3W'§—÷ýWæeÀÿƒÿø0ƒ=ÀfH sf‚!6µ!í7ÕâÄî,[ãÂßh¶tRX¼œ:\ïÐ’ª2ƒV®Ä“†¾`,mHÓ_Š-’?z´Ô#„·~Tk»÷y0ŽWŸÚjCšŸÄëŸÈ?¯ûJúš„ESlÛçñv -l t—4Õ<ì÷>Yº¯¥?FÃæ¶Ô¶«xJ§Y>hEÍÐäšfÍP»°"2bx Ï\^}ÃÊžx&—gBòýõ³À[ï'GÌí¬×r¹&‡s7!5¡)ì%Öè­·Än²<þwïâÂXù°¨B R£¹&‘tÐ;®Š®¡Ò‘‰µ‚=ã@ÉRô©°X3µu‰¡=;ìN¬œ:Þ¢éGvãÏHÎj;x^Q3™NÁ¢ý¶.‡ªái½ vd!—ô¢ð»á»Éßyæ óú¿òûMÓÕ'<û‹ÅÏs˜æºè÷xƒÝ@z¨§ŽÛì\7XÓQf•, ×ž68VÞÞ&ÉéøÒ̉‰7#.zfgŒáÜS¢¦Út]ŠÜãi¡áY¼6×eús¬×„ß•Ô1¦ÿJu}0®ZÙÕiŽAQØÕª$f6hzPj|!·µGu&ʨȗ ©™®»{i“¥xÜK‹qìgùŽßÕ†\;~°×–šÌìB9ÚÜÚkâ®™Gk)Þg7‚”R"úô ,!=¡÷<óéÜ ?fÒë ¿1y=`Êvä²A3tû;½-ÿø^à{ÎY4žjI.ïíÙÀG¸¹­ç– uCÔ†Lþ>8=½ R{3|‡ðš¸À¡ 7öaÊPa~´Äý­C”«B6ÂG E” §Wós¯’ÚUúžý—Çc2*ºÑ¡a¡Cè‡é·ÉSz,j‚Q€f:)ÁR©„Å|ÐÁÃwêýôèÅ!­ãØy¯ú¦»Ò¨O°?RLR’.ó×E«„yõÎ|K2—â ™¼À¡Úúiï‰àíX:W7ºrâP/$jKé±T%÷T¦Íè,*$;6T¡å57æúiº^œÌ©Ô±ãÆ—SÜ’ø2hy¹òƒwà¢÷–¦»¾"0 ·2”jËà›ms~å¬!à³ýŠlõËîÞ® wG‚· JßjjºRî@é8É-ÒO£Ë6˜´6ÃK³y”¼WâØ4åvªTŒ=øL°Y—?x÷³¢sÌïç“YÖw%“×Å?#±),øET÷«|eòK®*Dàæ·S±“S¶¹>¶“òya´™ä án m1 Q„D˜åü*Ê¡µDªü0±Vü^ñã'Ëf³à‡0M̄çpÜ´ÇÙ§[oߎg±C9Õ$•üºø*¢Wv4º":3Æ·®ªm¿Oe–R½˜J/Žài%ŽO¼å/t¶’î6Ö¥ï÷Œ S¾IE ç'*ÚÁ7çžÊ[Ñå*…kãÆ¦ˆ=Aѕ̀¯–&“¿Š)ëlÂ0˜Ÿ1ÔÍÅ!hM&«¯ÌxX°clž%xKÒÀ"Bâ8Ä{•Ô¬Øz_?0¯÷i@Ò¯nÀîòö²ü=V›y{þ˜0ð`IÁŒ3€Ô±äû!MmœéŸSÛЙ¤öÁnî@¶²¡q•ŠBÚóÓÚvÙ)ê´|}’¿øüëm·k Óäìbf°©*WµÅ“Š£®q„‹€;Y?V]ZÈ*GrÅ=µƒüôžKU;ÑÝÊ´Ë_î–ÓZÚ7$¨A½Àþ—×u’:î 5é·X}é.oìÐ>G/u ÎíËë¶Àbñ¸í†öVKÁgtíÍ;úï2šŠY³æ$Ù\I´ò®IuЖný`ŸzíÎBÉÄUG½R 2Ý’Ÿ*LU S`Ôi—ެrye<Ä"ß‘8€lJ:þ9üó¹žyìI‰Uxr\mTlŸˆ‡òaIÞŠãF¬3laV‹¬bÀ‚J•Èyö7‡ßrгˆº¡åOä™ ì‘ÆÉIä ïy†¿ØbÇÌÙòSÂ+£L¤¦{ô;N»V<îÞâèfBÂ+•n¾£èªP’«ˆÓŒï}œÅ¿§ü²Pègº¨`§¬øPôQr›ÿuÃꃿ1&c˜!é§ë Ü[ù1ëÌáw#©öò…:€EGN„'£Æ-4šïU¤µ¬6;¨ Ú¾6ÌMÃKOØHqv‡My_ý]úÅFÞ!WE•öqaSÿ1¿£ãeù×’AoD…¸O à5Q¼œ‹ê}]M’•æJ;)y?)t~C†=ºÞi;Û [æóTDyŸÅåû丙0}a• #!áÌ]ØNR N"Äù¼û:­ÀÌé_›ž<½ìÜ›%…ßöó›úsäÇ‚/š¨£f5e¿âƒi<¥ ”ê15øåæOÔ>´Ïf9Y\È=ps‡'Qm,¸áꇾ¨gÀÝÁSØÔ(0"©÷ƒ´¤U(éÞ3óÑ~æ¡ö›S?¥,'!¹u°ç='ºü»úŠÏ˹šÕ¼„Ç Bu¤ÚÍEÚˆÀû‹zŽ IDÖ!,`t1ÕÅgÓXŸò+*G8Jž.…hŠäªº#«^¦h…ÙzafÓ׾χ 4øŠó *èË•ë?ôÊ3õZqU,õàç'ÿìè3Wõ²ÏhM[;<‘VºŸµr‡ßPVø§‚Xn»î]kº]™pìêÍ/7¹öš½JÌÃ?âÝhÊÃë À•»=„nG‹êD*ßD)á2¶¢V+ÃY)Zœ[ÈÌ‹D‘?C&:`ŒƒÆ(r–P×%ö] /½‚ :ð3àÊWÕiN\ù»xJwÅÉx³PßeÜýÁÜt1†gþõzݪcdŽƒÐ1ß¿7:U‰ªÆB†ÐÇ?Ò±ÀEš0ÃÅ,Zºæ”õ-Є&Ü¡K_Ì…tS ‰ÀÄNçÌÑå°d4¿ X X’¹étWRÑŒ«’r–OQ#n­¿ë öFx}Ø¡¹ÒÙtÁQ©M_©ì¼:s†îßI#¼h}öƒšä;óÚ¹Höv8ѹÞBÊ"¥\ÖDÚ z ¹Œc\£XkŒ—N¾†¾ñ¸t cê¬ÂŒ]õÍrÜÚ5«]ŽÚ ´Í Mv±j=ûQ›—)ÇPeNÀŠ“½BSHKÿ€3åÓïs_•àýU2o·§BxÄeG&àýöOH2‰¼D#‰dú™Gœmï‹U7Žº u¶æŠw}mê õjhœ¿ÀÈ…UÑõóe¬Ò³M÷Bq6Ê<ñ/š8|íçÅÙõA·¦ xQ Ÿò`GõþÑÆ!ôÿuþŒ2¨èœ‘e¡·×úÁ”ÆŠ‹˜˜Dœo?;׿‚ùö©ïº¨(Áˆ“ÂX³¶¤È¤§+!¹É±ÑÙ#È•X%Aõ(ªîÄÒ üE—ÔÊm!‹ByÅÏ”6ºpmºÎ°JNDóûÒUõ¿²f(w)~1Z0eP@k‰GÆO à0‹rbuoxð&ŸòPw=ƒ(Îß GlP bß?"% ¹àG™æ5?®ÊvÕ-QäT¯ J LL×6f©¯œ„;ÆD々D×ü1BØZû ¼•¬9Ü%êoiuü Jm ì ZRLvËí¢ƒòw©¶IÂÉa¿¢YzìíaªÚ—åô+Ó7e@°­nbÓŸ­÷Ýw¦=©ÍÓŸa¾Œ‡aÐ8¯úeÀ‚o#o¾ÒÇ/" l8ZóE§°—–¼Cs¶6d³ç>!ŠÕ ôçÚ•ß}umóí.tʶNk¿·h»ÇlÏ]ê<(}-dÒrÃ"zti(Èr~€/ë«AMòA¹^s@ùÞhëJwìžñX•â%³Ÿ²âØ[ÏA†Óò±Ï÷ ãJ=¾„䄈§hºŠñ4\;W ÖƒÀzR©ôN޶a{ã´öÉ­)s0e¸‚ƒ ›¹iˆ¨õáóhöŠ—¬Ñh¹m½÷Nï˜ÀbZÃÓŠ! X¾iÞ”(iÄ,pV·&ûaÔjèÚ™ k<Ïÿý]¿qƒsƧ~Zü¬]RfK±§5tÍéÔ¨ÓS Mý™ 'áƒ%FAvÁJmž’ïüâAÎl)ÛA+“ÙN®æ"«§‚×Ö-âÄÆG‘¸H2ÆSif¶—Ê3Q7䓼;·ï¸³ éI?Ò6©©Qyn§¼ŸŽÊvÖ+ dÜ.µ~é"wØ!ÑxÀé[ÖÏ`†Úðø`I"Ïà.Q&$ÙÚIÖ{¢·.Ñ<‘3LÒ@ufe2U€P8JižþC83;~çzï:KÉ­ßä…RfKŽhf0z—~5¼/ÝIf¸ ·Î††váÒËHÖ†š1´ßŠ Ôþ¿¨rÿ10 ò²ÁÊú©錆F^«?GߢZS—wÈJjŽˆ¨õ*‚ùÚŠ÷˜O)kbŸäµ×.¿ÀÆhݚ͓½“Ûe†êE ªHB¢i€ÇYÛ†ñu[áˆbos_6²gYXéÇàê‹ nô)u1 ·Åšä©o™ùp7âà÷+¿ù §º=Š*X®¶Ç쩸˶h ÕÏM‡]JߘŒè˜SÑŽxŒ?t¼­æÇ†Ž‡€‘Séû£6;u¾ÓO‡òá^ÈSÎaïg7߯ÍÙà¿.^©óóÊPô~'n¥>mEÍ%६!¯¸ìIbcô©/q ´:®Ÿ„ŒaZsÒoRAV÷N• .6^^Ï^Ķ·`Å­gÝè™1®“¡#\—{‡XØ Vy:¤Œ1_[Bón}Î ž}ÉÒMt'€‹§Ž7Pî*ï€âé¼Aùâ±Ç&o]…‹´¸g¡Ótùy+¿å´K®Ì™çÙvÝÖå)í±÷¹»š>“Þ{ù„¼wÍHL-kbÈÇöæU%ˆ´Å{äbuYÒ*­WõoѪø¾¤ß(‡â~ÎRÀx/@lØ—/AQú_Y4@÷ýñÝwqÖ+Ûno!ÕÁ/)¢[Ô@Ó¼ 3õúÀ°5H;Å+Æà³ô\~¾÷äKÊè®ÆšYûéì(ä´GŒpà|e#Ú"×7>—·!LÏsl% ”ÈÈÐqæø'e_x*µÜ/U(¥¿ßû“NžœËÄö õ“ç OéS†z°á@an<"§]êy{}è½X!g !@9ä kÔ{]ß3f ¢±4Gõkó3ÝØUЙ);ÐÊñ ;ƒ¾Ê‹VÎ Ë»b~˜Y¿Þ±i|Ø©X3ÛøÖ Ç´“È™òÃõ ½fÙÎAîT†ËÔÁÅÖ1ksŠÄÞ Äõÿ¢Ílm@-XXîB¢©ÞMƒ£Ä×#õË¿yR1Ûù­w¤T=òM°”7¨ÄÀF°‰R€a>œM76¦ ’Lçøq ôìjÉXš}Î íaø$-¶ÄEÙU(¤¿?Tî ÇÀK3ßš¶` äxÓhIWQäk*4*‘„uå3 øv=¹²Ë®[Æ{¾”÷*s»€ ›ŽY$Øî€ä³Þ»wbÕ&x‘8’QÕGÌh<„‹>gZ„»µú%Þ7Í£[ÛÞÆu$ï_†Û.«]¿›þ2uIº|#4.“¶^‚•Íe¡¼ Ãâärvæœ7 >Æn ’®ä¾¥+”‰ì3„Úu“Û|²âNÀAÕ6,à32Ùγ’ûK`ÆÖéÔïM”tLýÅÌiº[Ed•)óýtÒ ÀµAŒ·¡bM©?Hñ›ºéîÈ9GL Äy%cýt™Œ·S;Õ©d7ŵû\ ßK­˜£vÖS¼žc Xg t]…ûáuaº‰_”ZM|Pæôvê°°Vù}uv#Íù¡%"ÔÙ ‘–.­ÕXOܼJçÎùÝÏqŽ£E‚›8h4/٪ÀµrÎôxÙ㣧E‡±Æ3å‚È=«¥É‘ìÒãàDÙà¹îQ\ÎeL‹®´/TMæahè6X«Íx7ÛÎN­›çÞÚ¡8$0AF¨.Žˆs&íAöiy]™oE ÞÈ}œ`98ª×;ƒVº"Z ÏV€¹G|šN"Q\ÓôƧ )Ûov1£ÊB¡ÄÚÖ£{äÕcßÐ @þÆy·Pçgh‹¤þ™¥À¿iéM®æÀ9y1rñA¯h«¼”õ•áS!~žE#®Ã( ×'ÃB_·Ôn)ŒóGà°þj¸W?ÚW ¾è8øícQ[2ó®ùT¸ÁyÇÔê™ùîÝ"é/|P²³úÓØhõEžb¼ºú9(QÐ{æX:t[×Aó•,×ó]'ž¼ím/ÿìŠʘ®.Ô³z¶ÞHy,À {à7žvƒH[q¶Ð ù:J‘X™¿NÖO˜ 4ÞÊÞ}k£¯GzFê‚þöìÄ_jÕ<1¸MºþÒ1Mƒ¬à'´4⑺îê R¦:U3Ã盄ÜR'ë}©h}r‹ÔÒïQ2ß9Ò59Š;õ4:ƒ¢©]`º’‘¾nsÀXBh/h¯ó9üç>_àö]|„!÷[» ¥Dd¥/2}b£†›ËvÒÙW#mqûÒ]ÐMå±aU ‹¡rè ÎÜqcª¿£e¯¡½bícyý!TÁTÀ¾Ég£l^-º,ÉHÇpÙ@¿ë[+Nöý‘µo'´ê>h”°‚=ÏÛ>Sä§E®ä}ïpBô*¨Å•‹¦½¤pãh.žõ´a —¢ ‚rÉ©ush’•¢, €é Œuê1þ¡$®­xo¬Þû‡òË´wKMž7|`ødïpæÞ[tÉ-×6Àkò1"5Ì"™Ÿš€"—·½ú¨¶ß¸Ÿ&r]iÃTæ4S IÖšÊk mÉ9…ÈÖ³O|„5iAÎûF7G°¬ð|WK›„1Þw_Ó—Vyk+Sh˜Ô1ˆ8¯„®Ì Úö;ŠÝqÕÊi°/³Â<¹$bý›¤X­µ6ê@ÐÐ{¶&.ÍytAf1$ÇÔðî:$`sXXÖ»Á>KgðE£8ÒG¥“¤óL¸õïÎ\ŸãF¯<óë[“ëS™ß†xgÍ’CWå¸D¢cËGØ™QÈæ/ï–O¼WÌËx­¶î¤.Ö„«Pj‡sé²6ÉŸ…ãŠB÷¾€çp(*{Úÿ[»®Ùw{!{•ùW1k•Áþª¯\úñSâMê ÍÆ‘ÇÑù‚m("˜ØÒõ•WÎT²B/‚†Î÷ˆ ¦¥ÖaÅ×c`qáGsÍè{hŒ»X­"•âôŠá3z…Å­W¦Cu,Ê (ξ[è‡þÄ×£Çl¬rµt%ò'mˆvŸ9B©§Ñr_~8 ƒqžvUôô!‘ôiêNo-&Ö7)kô«¨#§eÄHK¸ä¹›M3Sp&>a·D}÷±ÃFLz¼êÍ6eYó‘‹ÂÍÙ‚l»pºzwO%h/ŠTvëMâo~ë¯Å½,ñF¨ñì"¸€|æýêvT‡¼Ê×IØ'„tÞ>5P5sgã%¡bÝü†ØnD¸áÏYŸÛ‡í€=Q„kÓè°…3y5™úB‚¨äÓ‰˜GÎÞ dwL=2ë<Ö¡`Ð¿Ä žE}†,÷`Ñ4Kz¸Ý1\ò̓һ:m à¶_!–~S>"€Yfùîe`‰²hÄX&,”C;Æ +»ÉÕøÊlås{4|Õp§- hsîbËÌ’YuWÎæ‘¯þ̶n‘ÿºCƒ&eÁTæÞ•¦l±2 <­.Õ¯øyB³Ö#¯Ôe£AêÔXgãîôΩ¸Îpƒ¡ñËGÿUp;•·2¯G? “Îd…×#×9\'6»ô­¸‘°)Š˜–ÀiDßÀšŽF6u`æ®Þ,É¢MP"äK·Ø^PJgµxJ8yÒ6ža?] xjê|”ò§½;×Èz‰²‘„uk ”ZN‹'^'’ØÅOÂÉWsû¸‡˜*én¦¹û‹zÀ/cVÎ%«Ý••¥Õ¢à}“Š3n$»¬É…†r;ŠÅÈñX‡×'E+;å~ºq•¸ Ûmâzžå.8»ôvŽZ*RgKý¾•ÖÍ››âM^.êŽè›)#öÌûM&⸄6sÜWwÙ»IXS8 Îô¢„)¯GÐ vmã,ö²dŸêZ Uéņ1pU.~QÕ×”,´YÓï¦ÅÑJ,}{ˆ-~" †ù¾Ê‹],@.Ó›¨rI¤ìp«µzIx`,„S©uÅûëýYMت¹os|AÂÁÅŠ?¦r?RúY’¡•Ž®Ëò!-«•VXetÚ½qšA¿‡Àc(†Q^ÙJAd>Ӊά!¤3FqÁ¹æ §ûzÆ8&Ë$}$JâtJ6Y؃ëèሾòH§E›¸æp†V­‰xâ‘eÝÍ®(ß›âMFù–j 'Å5Bû¬RÔ¢×'ŽBú¶œ‚¶»_§pç*jÁÏ5‰)ڴʆŠ9-UÚûaƒx=‹&š®·a¯ ÉNkùÛ¸™å§•ƒŠJ~kĺÞ6ö,âý›Âv‚Ȫ#sC·7{“Yí‡66À›}bØM¹ŽF˜\º£€ÏáPö¢bB 0|™Š• ûúP¸K5’ßN‰Å«ÍÌ<9ÄùMæT„]8Å P9šóÒ:”™’Nš…ªb=L/i¦ûÉŽÚ|+®á~•ÌHà}»`îk ±u‹91ˆ0Îñ#㩆úÊm Qê¡Ýá0³]U|O¾L{ãD ·aöòk¯1aP ª='ºç¥@›¾Ÿõнs.«Ö]OO¼§ÁxßC’Qô9‡ç•`–è0ñØW-~á`Æ LM–˜&ðe %FÅž.û|ªÂƳ©;æíº®|ƒ£òE²YåÁ…J‹ŽD–7—cῨº,Ù”¿Û›¬Ú¨7 ×gèÆe_—Ö„ bîDÀhKî‹Ò/rÕÝë°õx•ŸªÒ{nï.z[8c¾ÔÒùseH‹ ê0Ó…Ö3ÜÕŒdÞL˼“%$‹Ø¶»BºÌº;r¼ò©ë­|E\‹Žè²?N# –&!…D䦫0´æ[çC¼“ê—Ý1‹îáŒå1¥GtÕܤ¯ÙßMž£ªp$Ô–Oõ¸‹â › ü–œBö‹ÏËò'b(ùæÞã@KG&[A€ÓäéXC<|Ûh¼7)pL9ÒÂÁy“·ï‹®djÿ4&©Ä›ã35ŽÇ÷Ì!ňﳞ7¢ÖV¾Æ6‚›¢¹Poª™É>?å¿ýB„7Ú’Ï$¸ë‘HZh¨¥Ó0…u¬ dšBÌ~ ¦‰é§=ïaœNí J7˜¬Ç¢Î}m3eo'%J’A+Æg÷…ahˆùùW:–©ÉüÐ sZKkˆ` kcYñ/5V‰‘ý`'²Û&§£sŒÚµSø„† ³§?N+£¤V–}¨P^™¨©±ºÎ?9õzsŒ!€ÜÏŒHe¾ UIw4cqfÍÓ?Pooq!·gý–\Df"£1¯¦e¼ä[B u¯î0H høQþ¾€!̨–K«·¦ÊÖ»çõZnøÈK{öDmñ@ÉÝÅP¾Ñ_tÏÍÄÞ‘¾bÀª¼R#.­…À™hvKOcYàÓ#¦«K媟æH Å|M&Q:aæ‰ ¯¼Ö÷1xñq˜Šü¹õr}1Œë8&GÁùŒ–5ZdÌ9ŒÌ)¼ýæq;§©GÐ4Ÿh:‚2ìO¡„¿„5&ãá…¨‘á•|³ˆ¡Â§n Ù@ô$‰Y2ŠÓí,$Epºêh¢ü%ÕTýs„&ª¡+fZ6 WÖìTP$¶þ¬RqwI>‡¡X½¼ô¾PP³^«ÀiÄ»²„Ð-ýúÇþ©"Š:=Ÿa6ºz% C•Q¨_Õæ[ yï\D[UØ[ž•þÍûS¢ñL¦P«ž•ž&ŠY”ˆ¥\&¾_¡²‚ö^‡¨5u3¸¯Ý™ÐÌK†ya¦UDÎ?F( DÝÎ)o¸=ud°û—¾·aÇš5hì‘‚-X1‘Dx×ÒÊ$”²÷\Q–,å]˜™­LFÑTꥬ(CÔrÌ«ªë¢õºËà-¶liÑ*pØi„…N¶è9} ¤³³åÅ/¢G³.ÒfLùfªïóíŒk\ø37þ‡hü¹¥ò ç1ùl¥§Â´ 8å°˜Ù®:»ƒçƒC0£a÷ÈÌ1R… )[[é]…*›c÷HA¹z ÄK¼ñS)8-÷ O¾úó­AÍÌ#ÓÄYch“˶ª-D? _ ‘y“OΊúéÓ rr‰m ¥'•Ú¸S4ù¸vpÕyÛlñ_ÖÄ1…ÊuÑì…·4¿Q…a}¼•üÄ*‰ÉRÝ'ï·KÕ?p¾{&VÍØ›¯¾Šƒ8>øÁå‚í¸i êÅÔTJ°GI0Ŷ‚ϹžPçÆd¨¢«}0µ p ~…ÞÙáD©«ÈGƒ—Ê>´7ÌÉü³4˽Öõj€Fփ榉3/† 1± Bdk| Ö5;ÊP””`ˆBr¬7æ*ª‰)‰é¬|V~L,‰Þl']8¦r0\…„§®­™êR©÷UÕ¼ý¥~þ‘úºR2É£ðÑæå¯ë§®òÒ@ã<•&³}ª$Í’SXC29åË’±ëw&‚wØb$ïêÅ:ÈU–7,è7÷K<š…Ë7¯A•cVé³À³5\óÛ×¥Ùò—ñ —¿s§EÙ¬˜G¡ûí˜h‚|²¬—K\œñî90ÇŸìE©ª²êbÀ͈pwÚ[Ÿøbj ºz:Ë rbûáµØý‚"&FGˆ¢± :ÓN‚Nt6P©~'B?¿T%ÿ¦(u(ÑÅR䉷3¹î6?æã7—6A ÁÖ­”ˆÓA8ž¡/l'}OS¥ˆam_)gè·Ú£‰½¾©NÝÉŨ•P¢×’¢û=ß»ˆÌDdz￞Ï,HeyÏk7þk(•&zO’ñÇÓe×&‚ÖÏÐíïØV¿ ž#7×/ª *°3 RƼ§d²r¶Ì…Õýqì'{ÁØü‰*ZÑ,_CÂÚ¸eæ«E\ÓZ§´0Žk7ë¡$ÅÐòŸVJˆ z¶o¾Ñ hF˜ÅsÚaâѨ¨ç9HøcNj¼Nÿ0sŽIaL¤2dAÝ;ÂNC$¢F¯ÉGYéd½þ”ãv>Òã|e™²¢ K,¢Å3ÕåZôƒpã±&T¯¤ÇÌo‘uÎÛ×TÏ£n*h {6dÔ¨?Ñ}Ò¨ÛküEóSå#ç×ïÓÜ Fê(žŽ´Ÿ™•¾<Ѽ¬¼…™A´ÄøÕE0{#ÌýÇ!T1<–óDž >}h.ÅüH´”ÞÉw ®ðÏ+rèÚL¦8 v'Žá&_(L¢`6ßBl”Y$ëaœˆ¶ªiˆÈ„æý˜è0ú ïWµ“Uè0 ¢“„ÊH·Ã°ŽûqÌ•°ÔÌ­ ^±{|`›BË÷y®‚ÈzÙÆ*^ +í'+Ì´dÅ·HÒïÔ3[ØwºImd¬Xˆp\0 Ñ©"&{ñxòÉT"ÏÀ(öRÞÏÞÄI—,K’­XDR’:²µˆ„†JylÝS6jˆ¸æß_Q÷»¡åã· ãHËÞÀq&è|Ø=Â?»$›78J:ÓŽñ  ®úŒñæ‡bî@¼ÏÚÓu«ÅÁXÓʯ@búÔùÈ‚Àg'ƒ15y` N‚&%ÍÁÀýÔ—îp6/%L‰ê¯f)³åäñ¥ÙWîò2ç”Zûƺè‹&@êI'€î4äëÒεƻ:sx†öñs‹Õµ|k†õE¾Îo—_ãê:Û#2OáR™güØVÞS¬·YçTãÆêy[l+îèµ ée,ÓhȨ¤ÜÌÒ¼êeBÿ2J—|ïédå¡eÚ¢/±Ü’[«còyÅÈž´¥ê:~,ÁöŽúdbËB÷]¢ã?zR1c‰cNI<å5y¬½¾?V³ÑññDÓnŸÞ}WZF±tZE‘Áò¦*`¶{3ëbëˆ5h9È#‚ÍÑçöçÕ7j;¥+ÉLKV…ÈObë(6õJ=…Ÿ*Ÿ²8ó¸âÁZà!‚ÛGG`Eò¦,D)—¸Š6ˆkBôÁ¶®püxÀi„¢`(œvþ_{˜µÄðù­ÜEþåL£ó³EÂÆr‚6J­œ¢„G܃U¶ÓZØ2ð­ÃTêñ>yö‚ m‰!ÎJ(§pÔ¸Ú žÕG¢F›,j@6T¥õÏÚöè<:¥ÙÈmb¦ gÚ}¦®Sþ­X¡kü î¯‚¡K>iÈÒ†Ý{ñøøý³öuiy\|s¿F›¨ŠÞŠ|¼¿d¹ÿ ™±‘Þ;0h8O=¡²ÛM;ÍpŸå*±Ü`ý<8%â¢ùåk‡ia¨ ‚l xÌÒÛD‹¨Ñs¦ ®äS¦ƒÞL7 fVdâ¥|šëGѶzÙ\°g<-A5YŸh 6=ì»Ó›ÃB] dmà:|Z6­qœôC)”Ì0gµ «×=¾~O¬Ýzër>$¤$“,&c’¿g(ë."Ëqyµ+ä5=gÊÄ2R“ Y8)Ÿéô ¬¤,ç.¨°Dw_I,åÊÕ¸d6 &)êѪlÈ™2OÒW2ú ûŸ"«/Þæ&ýئ¡¢S$ð;¼¥ð9T3‡!¨á©îpÿ¾™Ô[‚x>ľƒ|Ä»H¨lmÛLá†ÙZ¼…Á3Ÿ°â¶,*šDFeý%æ³"×GG0¼õ×ScRï÷²¦ÊZˆ¨³q}˜x²(2¨pÐr)4“?|¥ˆ½Ö¾w2Fìïº}ÃÖºD*ç\t÷³n#¨‘AìÜ #3“‚”=#q´oËœlV’e–V½íÓ›šukç`%µÀ誗³KÎUŽá^W”ƒ_Õpj­í¹“@À*É9Jä) NeMo+JݺöŽÂ¶]'¢š·l@,Ä×2t2'­™d† è©P30m7¶„èÚjšÓÃ\0ýs²Í®­oI¿õŽÆ+c·Å’5åÕÂÅÙvʼb¼EKZðßœcv>³³§Lbõ0ˆH¹jYCÏjÂKõð•c©ø:J&묙„Vͺà¯Èõý³Íóý:—2!9sõוl&d`v?ñ£6”k]ýð0Ñ'q¢ìM9üN–çî»Hâh‹h&ú2–iõ¯ÈæÚŽò Ðì*ÌÙa¢©­ÍÅ|ùЇ;Ô%¤Ò¡{ο¬wÆ û…\5S¡Ò>òÀ÷1¥xËpŸÅ|ž«,Y»ðȤû‘ºs:zåz’õ‰NéûTî=Å.v¯}3°´0—€÷ý…)¢x¿÷Oßð ªØæ›A‘‘Ãf«/—ª.&nåñ‡.âèšùS‡ëáUH‘N‹!”¡`»ªó¤q^ÕP góC©'§iýà®9ß…]TQ`” uY6õg½“Ôa’‘À¶2ÁeôÄã)ÊnFÙU´'ëàééà=β£hcƒYI-†{ì '´“ˆú_æeâ·ç103ÔÒõ¶1¹Ì+ÕÝ>(3¦<éZÑ›îNÊÖŠ|ÞKîêPXˆŠcá‘é×êŸ%Àª-(Žþ _Âà”þ¼>QìÙyâ%M;–¶“žöó”…\FR÷3CFÎû3˜1ï‰áò#;T~ö±.Ô÷¨ðr‡‹-Š“ÇƒžðËTÎëvÐ}§bÂûW¢Åžff¾ŒƒŸ]\Þ^ýÚ@Q%)³/[bºpšŒÊÑÌx|ùçÓLêµ`H£ pŒò@žlÚ”B4N¨'Qû Œù{ðéÊHå'vñô±·½ d'>—aé«~xJ«ª´rpJTK—~ËØ+%“׷û?LR ¼XáìUÖ mß·Ÿ¾èß{Š~zôîV)ývÏîù¦ï­œ?EO‡ÇÌîT•êº}ÔT_aÁaž­¯¾òk{5q­<‡"ކb+;=]¬ ÌÏ vÝž2Wèâz}aYô4ßmµP`¶“ˆ4;¢ÊP~þòÞðÞ»ÏòR. b÷m«ð•ìÀhwa‘5þ)sìüׂ7ñès7DL©}ᢙÚ.h½OÁÍ”G”?V¯>Í‹´ ßJ?YÏQë$¬aC,l¨`ôæ…\˜9\Ÿzâ÷8ሴ8Ôë{¸jæ{&¡9œ5Æ"6ûR8ÆÁcëê¹ßZ.×é×j|‹,["¹±]‡ƒÏÊÁö ¦Í%Õ$É”CÓ|¶Zõ±§:þºÀ2*ѶÜÓ¹ž‰jbqÇMæ£4fM¡:YÞ‡M…Ü„@\ƒ(bÌÇ'î†R?Uá`-È€8(Y9ž×}˜²®¾Ð&—s³ˆe€¼«]nzÃL¿N÷ãk/ýžZÜõHÁk Š"ˆøFkTÕ`èAhÍ©¯ï Ì]ê»`Y ¼C—ìÉEýTBÀÝ­_ÆU­*G]8Lüµ”g¾ò†ÈVTV}yÓÚ:j7¡ÊK7"‹Ž@F½©ZÔsÚ!5Zã ¢}Ì»^™Dó±~¦»ô‹\ö)Óo1K(©"!Q7:”£y’(cÝœiŸÂå*(¬jʪ¥ùŽ.â:i¯Ô)“ЃS!aAõ<زåþ¬9îJ 4˸ øÂëø-©©<,¯P¾3²%ÇŸ-ôe«H•Äçêí4GºÎå³áç¸+ŸGû¡MÑÑJâ1‚Ú¸;ŒÅxïI){ñmÞÔg«œ ÍúIꨤ+?ïVѰJÒt¢ÚË",NÀ5Œ€|ÊŸ^ÉäûÙöP-g}Rç‘\÷ݶËGFòzG_cÂÆ“ŒßгèÎ7Qé. + ãgíáXxEøOdùµã<áD›¾ÑH8£< ÂCe]… #µï“šªÊ‹Ç+¿ÿ¨Ä;)Ÿ%?1Sk2­`¤rF³(8@ùß‘úД±ÏkTLÿ=t\¯!˜Ö J¸çxÅrªq*> endobj 159 0 obj << /Length1 1470 /Length2 6897 /Length3 0 /Length 7877 /Filter /FlateDecode >> stream xÚw4\]Û6Ñ‚D¯ÑF”eFï½E] 3Æ £w¢·Ñ;ÑE'z z¢†D ¢¾Ižö>ïÿ¯õ}ë¬5g_wÛûºË^gؘµõxä H+¨2áÊÃÇ (hʉ@ ^ˆŸ€Mæ ‡þ)&`{E¹Àñÿ0P@AÁ®h™"Øm§‰DÔÜà>Ÿ°8Ÿˆ8àÄþ2D¢ÄŠ`w É PC" .l H'/ÌÖνÍ_K‡5'€OLL„û·;@Ί‚YƒM°«Ô½£5ÐCZà®^ÿ Á!içêê$zxxð‚]x‘([iNn€ÌÕ  u¢Ü¡À/Â-°#ôf¼l};˜Ër=¤« p˜5á‚öpC@ (zs€žªà±ñ‡±ÆÜ€?sàãåû;ÜŸÞ¿Á¿ÁÖÖHG'0 †°ØÀàPÀce ^WOWnùe†» Ñþ`w0 ¶Bü>9 ,§£ þIÏÅsruáuÁQþ ƒÎ²¢€tt„"\]~O†‚Z£Óîü£²¤ÂçO`C@l~‘€¸9 0g7¨ªâŸ&hÁ?2[¨+@‰‹ Î¨§µðWx}/'èo%ß/1šŸÒ `ƒ&õƒÙ@Ñ/°;àŠrƒúùü§â߈€Y»¬ ¶0Á?ÑÑb¨Í]|Ì` B÷ôëù{eŽn/÷úÇüw}J†54¸þ`ü·N^é ðáðð ||bBôÂïßaþNÀ_äKµÁ°?ú'¢* ûƒ:yñpÿ³-8þNÀ¿wÐB¢{ àø§õÍ@B kôßÿy~»üÿúþW”ÿ­õÿû@Ênpøo5Çoýÿ£;Âà^ [ÙÍ=šHôp þÛÔúÇ(Ë#áÿÖ©º‚ÑÃ!‡°…ÿD˜‹2Ì ц¹ZÛýÑAÕC@µ‘.°_W €‡ú/zܬÐ׉ ºR¿UPô4ý{K%„5òkìø…„` ìE€.< |øÐó zþnltE»Ðäü6HÁ¯z €r¿D¿‘˜þ‰€Vÿ 1ÐúoÄÇ'¢þ¢ã¸ü]ÃÖÚ …BñïnBSù ÿ¾1 PO¨5ÁÜ ÒZ"ÄþMÈÛ³j9:ž/£R“l_ S9y|æPmnDx/9«2ž-¡Nä^¾ë&YXSâ8–ýÄôÓg»¹/¼%Q§õÒ÷êé Ýñ/­³cTý ¶åjûðéyôe7|:û> rÀjÆìPcËqv%ÒÎ#?óèUñ¬í+›ù¢³Q%¬NxU:ÁkcT<Å–k•9Msו‡áöC²}Oâ©ã“I²ì7Lj/¸üvb }L–ùŸŸO{/–ëó»tÒ²ÒšÐ0`“ ³ûÈMV£þèSR§]dÃ`1Ó(ÝF v¬a,}ÿaå=Í·§A ¥ÄkãaqÖ:«lòï¾Áõ²ÛiÈrjEŠ'~ò=Í'pÑißüIå]¼'$]U(Cõj^‡tã@"NTù½_+…N¦/z·ßÊ&ž´¶"Á’°ÐÌUÒ½qK0—©™Ðø3gò`ey錙Z¼W…µŸøÈo:-$ê˜?ÑaΖ¬Ëg.²'ÖÏeÿ4cð#éâf€¢³•¥‘݀Ɇ‡AÅÂÝÍmC²9aV»'l®ÕƒödK«Â UtþuvÔ×ç’±ÙB9Â>÷—|+ÄÊáEÞÿ¨ü1…†10F2Oj¥¥H$+ƒqaI=;PB2 !—f»jæ¬õóÜSã=*¼NùiB¯ô™Ö8zMÿÄ¢_JÍ>«fÄòåa3á0'q<¯±Œ>—¼wü°…[CþÉïháTÀRWÆHv{¾7U¯1ö§:/“äNxy;·w‚aÂBca»÷ý"º„¾Òsù°Gƒ¼(æ‹"UÃÙj Rÿ™SE^:ýRí,éÜOêH­èMïzÂ$‡R…À–yEÕ/oôÇ ] z"Å'Þó…ØaeE¾Å ¸VRT^ö‘I'i»`ÕÒ}©½} -ve˜pòªî>PŸ#ElíDàXŽ ~ÔI %ä½ónã«å"S(‘ÒÎ]¹Åùu:FfƒD¤·érëÜ=P"Õ¡UÏÕÏmíË™#Ò‡ýi½:wo ÖRR‡’ÍÁ³·&r4Å"ÍÂá¦YgM»µ&DœnýIúf ‡:hÐYÀW+Õ9‰) 5>ÉªÚ ù‹LÄÙ æ—Õ ‹)‡S[qúƒU=E ¹ò‰Ûbwí"ö°e‹°H“È(¨­†Ô ‚(„½=ð“Ÿ/öÓÛ';©É2û@Yæ”=0\d[P+©¸ªÉzNÆÈ#“¾õåëBÄÙv™üçB”ªÞSÞ#’¤7lÉ?÷í[š$]ÖV(Ä8÷Leº÷˜T>O‰%HàN× j0y †õ‚éœAA>Ùþµ÷Ƙ-j»}aëK1ûð'©ž KuOB´"ËÎä~¿eÙV`€Ytã°¨q>.òIª¬ÒÿIë=£úü!K‚,wb½›g¢tÉ4•žrWXø÷8—™1­0&Õ ™öÁÙE•ü*%,·ƒIL>•q2¼ª%nL|dBú½•hHØ¡zg¬GBÀƒÀî4¶‰ÏèÒ²´à~ÊȘõ–iŠVáUV‡ÿf³œHLÃê¼Sãud®±•:}lNM(ûèù$©‹J5mCÂ8@1]Ðm‡G<ËiîìãÛ'|Ÿ¼Ø¯)%‡´¾«N)aó"[‘_Û>³Ä½hШçcÿ6ñƒï@i_¶–S¿ÊR~é̆­‘}ò¡8Ü‚¢ãÜca–äÄN^Ü_D“ÈsØAS‰‘Ï_í8uÃñI|Í Tï´mR_r¨$HTjÉ8¤Ýÿêë= ×¶C¥ƒr¾qd ¤|ö¨SF¹hTh8޲Š0dyÚeHħôHJú@i\9í-‹.d°qióz£O‹»H©ßÛFƒS`ˆÒÓ–:Žÿ‹'Sµ’1ù'¶f-£ô¬¤7r{g¹Í²†::_Éîv¶Ýܰ¢îBDnE9æy`ª suðÖÒͧz÷Š~ä¼\#]®¦ÉãF4Š=±*º •OøÌ)(z’óÁûù{iÕìGŠaÑÕl#ܹp åæƒ¡–Ø¥"¢(ìçG¶l2ùAŸoMzË8CdÊW²xØùž¨×Á éÒ‚Õ·8Æ÷ƒ¨v&¯…¢qœº"¸7pÕÞ,G-¢„-£’w§Ò¦»F!c6§ñb¯È, ŸÌI”¿–ݺ……eδ²0í(Y7ÜÎÀ02t_±òE [ÅQ}7NQ?,®,›Ç'–’òU«çC¯ W2I9I=žà/Lc›OC¬u×kTõõLTò¿°{!P‘Œ®–߯>¦[¢y-~þDô„9|êuùœ‡™"-n”jb¾¦ž&Å»58!¡ß_Úº6Çhôj—ìȱ‹£Óž*|a¾‹Aúq¼¹Lˆþ<™7¡C9Ö¿CÛÜ¢1JD©sé.ðY<˜ÿVùÖ"*õ‘^4‘%s‚^ã„P_£jVú} f‹ž» HBŠrÎ&0®hå߃|¢ÎŒ¹s€ cWx€‹O/¹ÿZ%‹`ô 0±¯Cºå°ú~åüiSúŠ©ýv!·’Ñi}/øë-÷ÚÝ„ÄÊØ5¼p¹\»¤ëþ§W«tƒ¥quºp[Ì¡ã[v±iÔàÉþøòšŽ¶·06r|ê«ÎüfGË ÝÑ3Å­ÉpòÇ‚íá¤F¯ïÆÕG‘Êö R¬ÖZ÷,Ú)|Ï.â\W¶öUJáéÀúy¶&Trç±Ü=NÝHÀS†¼d-º2deŸ%)=ØØ%ï›ÃÇ%ä²c{còÁ˜ëÅš¡ÄÇk Ú}··£ûéG_H2†±&úmU‰=Å^ß§Cy¼ë£¶#/Ó¥©Š¢Êk\òW·‹ËÔݲÚílYq‰Ñ̦˜Ixî0£1¶ûµÿ8º#5{}ŸŠ©ŸŒmÎý±óœ>W2%öV‹;IbÆuÜêÔ¹vDíh6në1Wœ6™#–Ûž×ö4Y4–µ|ÂáÄï}]USJ{ŠEáv¨& ¡Ýš(£SMn|Ö¡Áíû伆8·žˆÓ å d¬…?¶&Œ¿ÍB“ž°Hʶ¸a±ƒT~ñâÆ“\)½øãÒ±œpˆq0¸ú•ä2‘°‡—]Š)k«M÷¾Û›Â,çà“ ¶§3 ˆ(B³™¾ÁÒ+§Œe–R÷3ÍÌêéRíÄ'~âù»Ô}¶÷îн~i¯;gÂí™ÑÐ;†UÕŽ‘äP>²üÜå7`ر „l5* fR\SGµ‡Oèè;{BkÛlFî¯Ó–=@hÄ(@qÕ„ÄØ½¢æC Ôéï¯_×ÓM]¶ª¶ €Ì²›–îYh—´ —Q©/Ç]O©@~ÔÊò•¼Ê™¹Ê%ÿSo6b ¡LBqãâ²§ÌüáŒyB2¤ßÈ#¢¦Wãx aï@;lÈšœ¸J¥×R Këϰר ê·³$5ý‚"ØîH¼ Y)8fGAëë¤ã93ˆÊ·6 ùÀÛ«ú¯Æƒº¦\·E˜ Ÿ!êTâx4Nˆâ”âiÆÖ(?À»¾^·æyVÉk­2tý¸ä³`‰#MôF;í%'ëÕ·lió¥¯>o«ðÏžª©™úæW'RÛ+Ut\MŸjT‡xöyË·6âŽvKÚס†Þ—o£P%&sAõå7]Ž}2ž:½ÞÑZߊI§•$ Ó-eŽs ^½F±›É¼¨v?´îËWVësä†ß2W:ÈH‘éî›GHfuò¯­Á^dÝûô.¸ø@f[Ý=*Ž_òR.Q#¢ÃS[ò`=ذ۴\®ßÕBî$y|SÂÈ•Yde¬„4pŸz}ǸšÉáPPa‹Ub !ÕV¼¦œ¢Ž¸w"y÷“+þ§ÝÆJ• ¤ýäBø*ÞTÖ°Xз+Å›*;,ᾤvàÄNV q߬oÅJ\ ‡×§\«I2‡‰#ÿž}zýTÊîªæÚ{ªï˜Q‡èOòhŸðúû{FƒêË|Õ¶É /äút5^ñ“LŠü•Ø •æz„ñÚ$*·£{\Þ+Ü1û(ÂLÕÆkzÔÚ´qº\2¼É™3¾-½kè0šg«á²|—h“ÉôàÁØï±´½­ŽMôø¥G|˜ ²Í8ì:Þ›ZÔv({Y”Ÿ/õ(ø(‚Ääìĸô–±ú›a„eãRÁ5\{Õ÷‡|;éŒLËm:>(ß]×¥ŠÝÖ–ö™A?Í·J&vÎ$ö,;äGzç²OÉ„Ù//B{ïûÜ=§Ì&äºÉØ K"Úö_XµÇH>,Jì·ÛrÝÒV8Ñ_BrixFª&%ÈžÓ_c04ÍãD_Œ.!ÃÏi²o…6ñâe‡ƒYv—„¯Rç™ÓYÃižNœÏ§Í^ZîÞ ZA] ‘døÄ»Lù˜§àö.äÝÏÏ’;qœ| Åö7o€Ñmä¤g¬0!=é$Ú‚{ó΋Z8S{C²_µ¦Ó»§ùäM%Tie†’ÕϾϽ,= õ&˜UŒki“r[wf‚gUâüÜR‰#w,ïºCI@f2VCþU½æ,‡Ø2Up¢ÖpNã.„ÓË$?€Òoæ8<#ž³ÓÍ8äš³'h€Œ¼{^p½µ"90ùŠzúISZý «:Ø¥á‹sýjaÂ?ª4rUôˆkËÌ4.üç笺vnmt1W/›LSdزäÖ§Ýþa„¡Ïà¹Áãâ` ·z§Þå[‚ÝQ¦E°±¾ï~¤ -õ ¦oi3€}šÚvA&t*7 g-ÊÃ\K»7J¤é¢KxÅ´phN^yÃßmZ—‚R[w²±Zö(ƒöM¥߇•˜‹ïl(w&ˆÞשÑLx@ãÌ€IÕµ”\䢄&¿¨Sa±ë¡ÑšóÛ¬e¤]¤enú¦•P`šbR =ú ïËZˆÝ¼JoŒ”¢ÏÐæFŸÊ†YzëãWÔæâ)»ƒZÃ4ñdìâ(z·ê²*ÆÑÍù"xb½ò!Mù¡Ì©— † œ8ÕÚÎÖZ$Õ“W¶Èø‘­Üªo«\”JËýºS"ð}87˪`•äãvÎO^Ü£$ÓRØÃA‰v%­˜Žµ© Ý!"éyì}뜖=ž(ÿz’zÞæb×áé—ReR{‚VüŽÀ’5·Ú´[ÒÙxdþoV-Æ)X9»¾+Ð. ¦äå6ZÞh öÉÑýA½ÑwÅœÎRÇ’!ç=f’º›R‘Çb£[«r /ˆät œǺT`¡S{Þ¦š±Óßš½®ájt7úéc&ÌÙÃÙrR7:°QŠ9½Ô‹&ë`ª|?V'¾ŒcWãy^m`jÌH¶Þ§Ö÷°EP_ã‹´ýQÖ¿/V[xÜî!Í,­ ¸&ãÈÜæuf š]Šl‹T÷m"=Òåc>–îe¼¬ÇdßHØÅÃohT?/r(ÿ¼üÖÿÊ.{y(´?S¡:½¾ö™àƒälWÄrOÄùeø j”Ê>n"¡§Û£éÌtøš~ÛN:Zò–ÅÎf¯Ø\ΆB¨3:–!nxŽË˜NÃ^瘮•FNðñ“ðQ™vÔ+6ä¼<ÏwãIm{@6u8Uöp¿–²”ó=£ÀÂ×pñ•>EÐÓžmÞjAŒ7Äáe3]9Òî$q{Ë3‚¦àÙ¢&VB¼¶™ œþ¨]¸&§T§×HÅ!•v…íÄfŠ.iá‡ÙW÷×$­øX|Ft eNݬî³&ÖŸTiušd´‹%ýP x°~­Ý¸£ÜugàôÅ.y× åÝ÷n÷‘‡Ž%Ñ^i/£žY­¦‘®Äù«Ó”F˾ŒÅLNŒö˜¹ÁÄ¢æÉ+Æ|D²ÿÌÒ; —¼¹úÇ0|½ÏC'jRè»$Ù„VûNy÷Þ .rxŠ.;ý 錰é¡QÔÙÛE¹YÞ%‰j.¿ˆŠÌ÷§_®¿(Ý•ÙÐT¾ð[Þ*ùž« G+^Ã60äB&ÀQ˜Ùáî uT‚ï ’s üýî0 «ef¯T:šºlì •—ƒÜW1„ܾ<…Ypn¨QbTØ<’Þæïž_é»ÈµBÝŒg½ÌÌÆ±*s‰y ï$¬f.ôð-ßT„4=ß´{Ýóc‡?[<ûç§,›–[ßÂqŒ÷Í0[þÅs;Æo#·#õ¦|y²{è¤ß¸)4{ÓUhŽaAllT\$:0lן¥=cœ?³§_ø1 Òf ;`ãÉ.n:"åiJ©ð…ƒ ßq©‹6®¯¦Þ'ûÈéF\³ãpöÒFy;ñmûBù¸*7HÚ—±$yµ/_f žõ¦P!º\œe°/¹¨MOq¦No§§DÊÂò2îòÁs\¯Éù~ËU½_þYK'xdq<õº¹£h˜ g”2[йÂS=–·ú)‰ŽíöèÎ3^ÇSÀd½›õ¢cœ0wéòn ¹7¡Âm#Ònø´Rî•«Q$™ùÁ{Œå)áYÁ“ÏùEYb£,ª¤`Õynó76$µt¸³e »·¬*(‰—F"ƒ'’^ºØª> endobj 161 0 obj << /Length1 1821 /Length2 11700 /Length3 0 /Length 12839 /Filter /FlateDecode >> stream xÚweTX.®Á=h,8»»w Ö@c;Á]—à4¸Ü݃;‚»Vn> ïˆG>€„±+Ø ð ±9¡P‹Cì=Á–ί™þó@kJ`åååfüó8@Ôä65¶|0v¶Ù¾f45¶¨ALÁ gÿ A+`éìlϺ¹¹1Û:1C-„èn`gK€*È äè 2ü! hl úK3 5@Ýìô/—ÄÜÙÍØx5Ø€MAvN¯‡\ìÌ@Ž€×ü5Y€’=Èî_d…ÿ¾+3ë_áþ}ú@`»?›šBlíí<Àvs°  $¥ÀììîÌ0¶3ûƒhlãy=oìj ¶16y%üY¼1@JT`üªñß LÁöÎNÌN`›?TÿózÑ’vfâ[[³ÊõI€A¦¯7ïü«ÅÖv7;¯¿±9ØÎÌü)f.ö@ ;°ƒ HVâ߬WÊß6 3€“………››r€ÜM-$Q÷°ýéüÓüªÃÇËb0•ò›ƒ^¿P¼œŒ]AgG×?ÿPXYf`Sg€ Èl‡òwôW3Èü_øu Áî=–×!d°üñùë—Á뜙Aìl<þ¦ÿÙh ¦ºŽ¨¬ Ã_¢ÿr‹‰AÜ^Ll¼&6N+7€›“àóß‘þºƒÿèÿÓªl þw}ÿˆ(kgðþKÆëýýGŠë¿çƒößëCøï Š×¹hÿ^}NÓ×?¬ÿßËðç‘ÿ×üåÿc þ·&)›?´ÿ¡ü_ c[°Ç¿9¯“íâüº% ¯»b÷¿T-п–[ bcö¿>Ygã×]µ³xw&VfŽÙÁNR`w™2ØÙÔò_óôŸv¼f°Û”!Nà?^ ×S,,ÿã{]ASë×WÆéµiº@¯ößy%íL!f¬"'ÀØÑÑØåu^'À‹õugÍ@îŽ9Èlq~=xUè0‡8¢üÑZ..PìÓŸˆû)ü¸À!vPíoĪÿ…x_™Æ#Ðä/ô‡* Ù? +ú rý\^à/«ÅÜüoÈö ÁAÎ? ÄÅññ^ë²ø|-Ìòÿ¾–öT¯Ó´ýGæ×Jíþ_+ü¾FþG^Ö×ÈN×õêtzÝé¿Ý¯Wéü·û5”³¥#èoᯠ:»ý3üëºüCö«ÿ_áþ«ß¦.ŽŽ¯O㟫ù: ÿÁ¾Ã ;ÈeqbÊdUÔz[%JìÆ´3ÆÆÖwq‰¤µ-I产 .pwÁž¹ Ú9³y·Ž}ÄVüÒ`­Ïbm¸æɇ¿XÛ on²Åè=-xä¤à¶+ßÑ¡kÄngfÿ»QuÀíRdšŽ€Ñálg6ã@Zà}cÅM¹åoDšú_Ìo`Æ¢# yxØßÀµ‰f´UˆU‹NÏ´ËR9‹Œ'¼“:¸KífãÜì[*e„o¤¢ÙË_f ¥ìÿàz+o4˜¦Þþ!IøGpÙäOkâ4¢ü¥\~?má¡ßÿ|!UnDº.×çcˆ3¯’ «â¿£l=[ psI?íM‹ƒA0Úc5‰S]EíÄÁ}B6õãD¯ÒEܶ q’¦3)÷³¿I÷3—Fn W;œ Ãá:SÔÂÚàÓPõ–dÜÏý›ÑÒÍEë‚^ïÂÒ ÂªÀJË6mÏ€ðͣᤕ+ö“ïX^_Û¼pL‰©ºóƒ±á’Ê'²í•™·©ëI v›±â–jàDð¿Ž0Ôïó‹ÄYÈO¡á»AOj(~–Y|”šËù01Ù™-wvø»­—™lÁ÷ÇêÓ7œÃ+ÝP¿k&Sú„Ö7ÜØ£Å›¬O³/„ŽLndµ£"§w;bj•{8ûÞë ¨Ä(h-r£3FïÒ+±ï5üãnò¬Û­vPüEâÌEùÍ)…¢×vqÙ©tK)ê¼]x [öŒ¹¦œŠ—ßžo1©©ñ…;%R½É1;01€ ÒÿQMÊõ\»7ò›@\ê'ÚM±“Þ'(.ñ‘ÆU¯U’ŠºC6´øc–ü†O,h–|> ‚Àì—rRØü(ßu\ox>h(DzÒÖµ;ñ#©Ô ­ò•¬…n¸þ*}¹uF Æì…I?ž Ëé­_5žÑfØAØ’HœÝi.™£Du¿Eæ‘3¾ŸñGÁ$`é}¾A˜2˜ž`¡;l·±2D‹–§Õº$Ü‚`;éB)Ó»=Å&=¸Ñ+éYö €:rMotÌøåS/VÒ²AüÍhÍvÔ„ùÇøš… ù+I¿PÝDqy_ðå*Q2„V‰Ý,˜šÔ Š“¢;ç›-ˆÞ·"rE9&?dޏ :Ú¿xÉ÷†NèÙL®ÖR ˜L@HLxj=ÖCüÒ‹çqåJü™å˜*ºè_Õ¬ ƒûÓØ‰%APÕ• p§Í)£YO ¤çñ? §šOaj¶ë8¤x—1ÊC°º»ãá‹Ï†O ¿5kø¿GYþ>j9H#:¬Ö³Ç#:ÍíXëã/>Ž;kìHú®ÞPäâ6;?÷¢ÐaD%…ã±=è¾y[y_j¸ÛÒ!2½£rBæû%Ó´¹Ž‰½™…SJÎu—iÑþÙÞŒ½Éqžæ]p -_mNoÆs!´¯ÔþÝËÊ.îúH¦!³švü6•$ZɃõ+.åWÉd¥-ÇWÛT°Ã¸+ÉJ?Y h `†o¥ÀÔZîþÄŽ4ù ƒ³K]ðe˜Ö`Š®‘x”6•æB«Tr£dCìÔ$õ .Ä(ÄüÞ¾fî[zÊ}pˆ×ÃÚfI°kËÉ8•HÕÓ ¢¨ˆh&ŒBL=f[…^I…Ž §…ÏñW§Hú7ËÖNMÉŠ!(õžQîѸJõ¹bfw€Î=0Zð„Þ9#ÄÓ¾„ʽ hØpPƒþ7æ÷¯æP“Ž-¨õ Â)ÙRá‘-•|î|*1Z %8jþˆéŠÍ ý_À2Ž\ªiZGt¯Êc+üsI„ %ê^Ñ,g"õ@b!ç<(zÅ{Ýu¦ÈT)¸m[\Ù¨pQì{î!äo€*¡µzæ3Í/ŸHhªеÅàºÅ}9)lÈ(’×å -ð–_7|Ü7¯Ñäåñ´Ü±±8ضÅpÎáö´' 0"%ïuïñ4á2E¯‘5ž»,»äé5FV’Æ/¼ |ß7<™ck›í*m.Íôéayh‹Tˆ´ªà,1à<ØÇ›­þ*¥ÑkÒÿú­|˜ kÏv5a‘³?Y$Zž`à‡ÎAnìa¶tmáSí_ã=AÆ †%Lœ;l½…Sv zWBØ|ùLƒ¾l¿q—Ålã©}1Ç1JœÑø(ÊjšnŽ$œvqÛg!7ù,躚ÓÐtÒ¥AïiÏ ÚÀ/LÄv뜖ìg²L>%hÞ¿šzÞoÓ1|ŠýäÐÙzÜ£©t„ ÛKI‹Mòítš’( ‚ýÝ?%Sg%J„ݰqQ2DëéY+ƒñ†æç)§7vi‚µGÚgøVÔÍ©˜cH"–r0¡+ž“”æ ¸cc5ùNícÎe®³p¯xGuJ1Ì-#ÊOÄcy±åßÎrÄ/-E‡Ìi[š²më¸0t ðfs–Ý\Ñ‘P·'÷s¿È[û?,—äÑܾîf5‚DT¸¦(}™bŒ}ÉxgÕÛã0”•觪@C…UŽ3VïÒˆí|¶$àOlh¶äà!ܳk?ÙÚí¤@¤$iKI-?ï1Jgäé>͘²'æf³O˜o€µ*èA ú’äê[Éɾ›ØsæEߎ0))%¤LÔ¨·,NáOç*Vj|—ðìwyóùÓÄ0[¯¥&}¶ù홸»ÜûwÛOÆ"¿ÌrÉú¢$)ƒ]]×Z•ªj—nOkYMäw*¦ô`@>î¿ÊºÐŸ­WÅü½æéyc&»ôÄÀÕsgLáq™¾lÞ<¹aº¬lì%½{óº!]N˜Ý»#3ÚÁKr}¬¹¥~Ò…fO(×”¼pCg×K°õzBÑ—äÃÓWâe“zvL¢b–¥ºyŸG*g¥Ûý©Æûä‚—º2J(û߸WWåx²*Ö¨—Èt®ÙÏŠÝ å–}‚‡zgUjRj Ív$lé©FÒ{íÁÞvÙ"6Ç B¨r÷Th~Œ'S?¡Ü ê]³ ©Ø8²Z ʉ ÏlóÚe°/ì æŸ…êF¯Ð– '‡8SB7³2Rª³Oô ótê]p诳á»K àŠÐ#[Uh¨å(ƒ¾ñ"b3%îvÚ˜^ðpVÝá£ADa%hÙº^ˆ…yìèðp½`³ú™1•È ~œ8`‰í)›pвY@KµÕì—b.RSègK‘^7l¼=–’.Å;Ê´0fd&—!·BѦ`üÎ'=Q¥hwfËU4A(Òʨi—m‘%Ń8={á­ô†¬ï&n]ඦ|ª§–4úÅ!6Áiï¸ CŠ–§«ç½É%)4.¾9èBã!CâÈ+~æ+ùðReõNÃßšd‘H®Ü¨ô éñišXrWc÷½½&Õdá%Ý <ÍÖjY! ‰ï[‚"ëªòxæ>s¡Ø™ˆ¡+·Ò“üîGšJ!ŸSÁsµ‹ÎZ–ÂF·ƒؽV©ƒ6OEÿF›öi#Ã5d¢ö)½ÙÒ Î_JJQ§ñùx]ì7ü%2ÎGþ&69 þ#m)ÂÊNŠ­¸oÕ•ÎXë'¸aÎ(™œÎCî ‰Kß`Õœ«zm¤õy¨ñèƒyI_öÏ«õÃiXnnãÀïc¨ v¢_G)ƒtxB±zd⩵ÃÝ›ÞÐÃÁìz¨ð¹)N”}â)D|¶g!Šx‚ª{n}Ùy!‘½i/W††éCZÁÔñÖT WÕx~S/ÙÏ17Æ2p jhü»”ÑØ :›ÑÁa¯}qØû!*=uË•º|ÿ$Ï÷t$ªË´KñPš;®ÅúlæÄ¿‚g ˜-˜¹6’šséàÅFŠ'U5(žMvÇ‘š«ºà1Wã4ÜZwžº;Èâ"ûÍz5¦;Ú쬔m»ý:$ÑÓ¹H>!i'~V&4ÂDåÓÍMAý)Ö¢¦³´ÄJ$.{9²¼‘ÐFg·!E:p’Åm»u¢Îæ‘ë«Úv™“ðÕãöÌ(:[&KpHÏÒݬzwYë6´Z(éÙ¡j³#ÝVý«éã‡aÃÏŒçù¥Aª3‰æ‚LD|¿&p/±Ö7Zj˦Ý?^@œ™äk'·›W`ùîiDb–?©BhóbGlI±ÚÉÑëƒeéä«+»u¿»3Ì•"‚Ññºòã³¢ÚG¿UD‡?‰%‰]²ë5‚ÁR)Ë_[—Òª Mƒ;‘$?`à$ÄFƒ¶’T'ÞÛÄöácÝvzê½_ážtˆ%3=ÜŸ¨½ä²ü"€€éÔº=ÚàÆôõtaÁ8~ÕÌr=¦VÓ¦„¹¢Rß<§]Ž™¦ÂYÞílÙÎð(^GiÑÓ‘euŽ”¢EOl%¿ÞŠÿB°mþÅ'GEºT즞;Ž-æ&Æʬ惿Ótêëÿ1`røÔ]8tÜæµ„)¹•3oŸík=<ÍİíƒõQ%þ†Ä¯Âl’Í}Î X\ißñ=¯èF;b¶¦èæ †Šy»Â Øp¸sxãXNƒa3C-sÒc7¯xN%CÚ6Ï4iìÕ¬Ä<­Í¹ŠƒžÐÌÊ…²qa_”½vYEýD'¦({òcĽ,™ßMÐ6â)Wˈ¼·ì9‘¿éÄ˜àƒ±† Qžð»">&ð¾½Txù¹½ÄŽÅd°pñ…Þ#/æTçÕŽ¨ÇùŽ\‘Æé´¼èNòx+þÐØª#Ù¢Ïé®W64œÍ§<3‘F~iæËA߃8¸¦P8DÌvY–é Ëÿˆ7¤Æîò¶c Ooïøj³Éa·Òú˜™¬/÷–Φîžc’jw…¸þ /3Ã=@mòšû}?ÉÇ )?ýùG€ÍWªtµ¥ø/§tL¬KþˆÂ4¢\«Éé•@yÚ€½žVÖ=I®ááLÑ}·»©l-Ø=C ú¥d…x•š´|Ræe ÈÓZQÐdL¥6™Ÿ‚MFä¶ZÅVYñ¡[!CŸ\W¾?J︦Éà„›`‹d3*2[©CSm|–¨à¬ÉN!Øÿœ0+Ð$‡.øk¨xP‡ ªœN×wÊ:ðæ=ÃXS_é‘ä¹kRÛ7Vhå7Õ¥E¶:™q³;©dæ~èV"¨œˆÅ¼hÁWq*5ïòÄP¦ iNÚP³Ÿ'?1‡éŠzÓ4{7µSx…ïe.õºïcuÓ: Ô½“”KrsþРŸV>è2Ž6 ža+0?XOqRoÒè,_4{¦ß´¤¼Ú-çR_qºk[ŠWÒò8S2·iÔœÙ7Á7W6„u©?Þw6 ÜùÖþДs}Ìÿ ø„ÛIdŽË”0'ÐAæ­€ý³+ÀâxÝÏs>|a]±ø>ój¥†‰1˜×•ÏtkösN=JÌ›®rˇÒMö}ÍKRžŒÆŒÊՉݥŽLãû_šwÐ7“²ºë Ò`”’Î0ÏÄÓ[©£;üiµÂÓ<èu¼ä̉¦HcOã´m"Ë/éø¼Ù=Úc´w¥p:¼‘5¢!û ©Ò…0·¹À »'05õ×T&~²>75ÝÆ²Ìf³ ¤•‡ù@Ì£ôm§GMþb½ý™Ï‹0qc%6#Tc~Rô¢QŸÒò)™mE}¬Õãc ¯‡žÑŸ•)ú&)´ ·L~ EÕGÿþ¡”Ò+/¬jæèóMÁÐZðS‚]ïfø$Ü&¦í}ΑFóÃüvyÑ´ªHÒÛÍHáxv–jØR+u?·Û ô¯ÐFέJ§ŽEx?„iƒ&ï±Õ¿†E„t_xk°{ªíÓtê߆†WÓãX±nÂÀŃL{ÄòÖ”dlö‡w²Žä¼zeDÛy±“7ûÃ:*ú³T“II£¢|§©Óî6ÆLóÓ"F¹U­ÜRnªjªÖ—ìÑcd½¤Ÿ&´×B8íDú”ãI©QÛ@2k¸±ÖXc¶.øÛüp;ëÀù"¯×gŹQ!¯n7[Ž|È ‹Õ˜Ø\7ú1Íg£Å¶Ù ;ÚBª?ìó“d‚ÆÜLUžz«âÈû¢j™/ N-v5ŽQèF¤Ü†}¬ÉÓfçZ8äõ¨&P»žßvqW<‰x¼.Šƒ}çC­Ò|ô=#K[25è#ǤãN%`6$1t&èFJ-ß7&d©´ÈûK®ò€Å7’H8ÞªÚ÷ye·­‘(Ë ©¿7Åüyp/†2)ÞÖ§žˆ€¹ ƒL >’ÖrìcäÁC¼ýA’M ½'yÁá(ÿ¹CÚ@pWHídU¬£$tiã¸üS>KŸè»Vdþ`r¿¦Ú­… œ ©Å~Xä)aûÈú;ÊÁ^#v—ã¡2m"¡ZAe!KÓ(é½V±ø/6QD¾ùéf’ãEx‚PñŠÆì,ƒ¢bv¼ÃÒo$aöŸ½1¨ë"T6-Ìš‚§òÏ[ó0Oìü}èµ®T餰ܵo‹_HhôÔžŸ)^Ý6Á&àóEx੊\ A›¨Ù^û ”tAL3Ž èãX GC;²^г$Í(Æ mªÈbÌo`WÂÄ$Z¥"{* 1ød.DÄ ’[,hæˆLÕ)t¸MØ Rí,Û)ÝØ²Yš·Oåy‹@£¸Ä·R;ï\&º¾Ü­ãÔlj݇€§-¾v¦Ñxõ&ºŠ  ¡½ €H3§uþÌ^(Öi™á¨€ItöKRsw_unà5uu>õ¦$äRñ蕾ª2»|¶ïÑl2­uý'ù8ÉwCW9e?õ; àžSîÚÈKK>rGQߡѦïù~‡î¸÷Ö”],û”áuh¡ø¦ú[}‰kv¿jZžÚ—ØÂºù=5:bÏ['Öã~ %6ß]*4‰R³ˆð²¡O^Eq†Ž© Z¶&õð¿)¹¾èÞû‘]«A*ž{g?,ì“[SÞúi? ð ¿Á™Y' Œ: )~!õÁÂi´ÍÿAÞVç<ݾ§|‰i·B+ÈXßùqryJ,îžs~¨óSqPó€ÓWdaÖo]$!b÷7=(—y‡ï¯ÈzZ3Ò*ÒÎýÙòN6[¾Ó¿ég°‚vîÿ~Kù‘aÅ.s!õ¢Ž:š^ªK>[ƒâ°æÖßÁ©ÓÔï ×*Þ)4°aS/NG•äȪcžÙã:í,ävo„áiÁ5ÖŠ¸Ù†°›ù¡¦–Çê ëítíÍ<¯ëÞ7M=)eC‘VÖè À0ŽÜe±è!‚Ägîݹ‚£;[î-«³d§z«ø•Ûþ(ÑÛt¶ˆj¤Ÿ†Æù¬Ú8 Jâd\Á’X}=´Ñè¼µ~ä礖-zl³”5èâÚ½Z6UØ\&S×"‹É´@¯ìÊÉ÷s¬®ÍgÚ‘c2ºytÕyi¶º¦ž´9%”­øÖŸ¡õ×÷ýßâ!TðœñI îÚüÆôÏòj ktí'Æ)âþŠJ¥‹çp0\/\s,ög˜Ò‹ÐÓKý’X]œó}]ëKÓÃ%¿K'Ôiä®ù„\çí‰o1…Èãx¡¸<>o‘iíêɧœæAæÙÜjcZºÙ&±nwÔÙ´;„9ü}oS»’§bîÌÊQZ®É 7Û{EåhÂûœ Ùé¤È'vÿg„uþ’³VÚYšŽ:Œ·^÷<ìZôâçOO“µò’Sz¾n8. A£DcxŠ·Çþ,‡ã¦°”†§£5Øl± 4·mÅVy]u'áwºÍ8¤µK÷žaãÌzM ÂÓ‚úÜ鋞»LfŸR|ÍG4þäŒìCؽ‡„düùßô÷™ñºú€ïq¬ž±ÄÈgsÊ~‰³ãºƒ˜GRË‹ü¶ºVÄ0B2 ­YPJi»x•¼`öó·Ö\ÎóP~ìRu™ý ^Y½¾]¹WÈ[*ð ®#eÕ…u`i"Ú£}•‚F×Z3/"‘Æ’TŸÃ*˜€ÁL÷t“BájC•š÷'°pÉôeî—Á%X=N(­5nwüì“λ顂ùïeð©OßÒÄ[Æ×ÛÎVãÀˆ¶IC=¦Ý(±gç‚h°f,q îím•øèˆæîUk¾kÏ–,Úô™¿¶¶~ïV%†Ü« @:\÷P‚©r^1èÚù.aÇ/è"ÝY«ñ°èCÍ/è8Jú¬=Íq1¹çÙó’‹É5©ïùOâj:ù¢"gYâ¢dPvFQU!D¤oX£¿›!`”Ð X5¥ƒ>ya>&¾ï¢v‰£Ä —c}6_; &¤Æ/*¬Ô˜QqÖ«™³ü¨)çÉ,ȬGÀÆu>†´çåá¹Ý\´½5«x°÷~oÇÝÜÀ­6Âp*üÄ•ÿÝÞ”b=¿‰g´9”œÉÔ´DÛݸ¯G ½4}Ho¥Hï²=#1+©ÔŒ:šSÂMU$8}‘~k¡,n¹×¼ÝÇßœÕ 8¿å‡6+ÛqÞG;Ãooß# g°•V&ÝҟѺâžÑ‚óÊfìRR÷פwÎ $e€æ²4¾Ø@ÇpLT|D¬-O»ú4Á¡C›Šôë¦Ò(V.íü‘𝣷 WªˆdæÇ¦vßSÁ›,ì Ìß¿ e/g™è†<ÓÈ®½¬=K4¦wn4B_æ~jÉ/˜ÄóvN“’I¢sê`®<Ñ3iP^ü"ý]Ü-Îå籪ݔcå=]{Àê©ÛPQ]—ÙÝ¢M¸ÉÊ.áU,œµí×kóa¼wy/¥ ë-Ú‚g÷(ÊÕ®!¿OBÿÂ-ÿá¾ú>öô³h9e&y¿ä{9ËlHHï7ÏÃG‡7¤7tû¼ÙKøü©K¸C†=V»È\½[YrY*}m´+.2TÚø¬T?Ï%ïI¸¤—Î&eÂÛçì/8QÁAË΂<_O–½Úú˜?Úÿìþžµ’0à|A+/3~¥rá8œq³$ ¦ÙžcP"]bö¥T!wµª]ã,t‡<-`ºÓÛÒÒÅ!0öÀwG´\жŽEk4ÄŒ€B ­áÞMi5Ü"üžƒÕhê9¦Ñ ­Í<\Ú yLÝ6Û&=§âÓZ]78±øÇ§Æ2£9,=}aâ®CK—»‘Ž«?±”ìã{¯ÆùíÚ–·s ¥s‡Q»˜&ÃÜ2‰œë=;9ȩ1€>ÅoCV…ˆRõ‰ ¾™)ÁaŽ2ᆹ†FcNŸRä‘K8DÛçÚÑFå•í[$xƉºLÃÅŽ±y9ÿ³ ·…uN6ÎØç~ðØ*"ÂýæÐ#rã6¿ú›"yÕu…¨ËùIAÉ1ó<ŽÆ˜ÏÙ… ÍŽ{0ªEüãz+–²~»òd(áòYR·wþ¥1ÊE¹ƒ[£ž WAµhšfb¼öÙÖù 6Ä´È7•oAIΩ‚`>Ðݱfù|¨¿ÊþZs!Íá#µ‚J«¡öq{øwen{c„¢1žæñÌsUZpq;RLmU¡=r›¾ÄóüCf˜½’°±R‡ôíï[wºœRÝ©OÖëüšBå¢ôrxlú¥àËeÖ?âŪ>ÃD)Úë½3ÁLCÏ?ÂÐ{÷ñqT[ð„Róª6[dz´m7›-RLÕ,½•ùF©vMôνÒÀù%†#3‚÷rÎýT€ã;šHœšÈ€ÄH•Àöämí7wág’›Ì›*ú±ò]©Üwé= '¿ 0mÜd¹@.-žBà;iÜmôž4iÇ´n ,zoÎèL8þ³Â E¢EŽù_Sôí}n§5;`³å‹™N¹ e›O:ª¢ðI¹ß“j®Æwo3ÓöPD“¦–ÇÃ$ö$„7S1éOá›í+%N.Æmn¥’Ÿ™m1ð:#{†~`q&òšÏ ÒKÎß+9±>Oª2:ãÊÀºüþæOà¿e§0Áyx s´?2Dì鯵+ÎðV¾—Ÿ½Úmúòãi¡½H¸´äJ+£,1ÔjtÈ¥ÑoB8‡é¢Gn"aûÉ`[¦¼¨cé&V_ÂfšîS¹7Tç)-¢W_Söc0SÒß 4WëñË•ÿ.‹ß!ì]W{õ!ûFoIX˜G o,fK¥Ö˜‘rè4Þ¡¬uJCâ&, ­ËûHÄØ6Û]êæK][é0³üHdcä&gOÑ–ÌZlÏrPtÆ0Kt ¿Mì[/®£N9ו´©$ÞþÿãêÃ/#ðhæo}mCå“`Ÿ6a¥#Câ­9¹Pì-'W¶Ž‚å¸CÑÄ­/âFmì!àêUXÆl=Ê-ÊØíä,©oùñ“Iaî´„2¼d[EWƒÒï¦ÌlÏo à&m0®IWCÞ’ëAº…%4Jæ[ON)u@ËlóÏ«é!‘S}±'0©qØÖcw ;ëv; '¿Z+2PÒ¯¬#q°ße»âšeq–º(Ë Ê›ôD^RZ™à½Ù&’U…†yì]Cck‘„+‹=Š'°È@ê­Zq¯ç)âaDf÷”žUŠÛª4bƒ~ºo¯0¿è~C&@¾é˜¸ÉžüfÇIÂî«BD®>q^ÜdÍëÁG((ú”aÅ+~{ñˆªƒ–§ Þ9 ×>òr?AÄÄ‚Žu­ƒ1Øì¯XÆë‡7/ôq˜Fí}¡¤týy'4 š=Šs>aF…,9:Mx× ªIŽ6åî!–ÜBLgaZ7!ƒ mscO¼yðGй$¹¨âünnâ+‚ì¦é+úè°£FmM™r©(žy×ì B=š¦Då7©\—»ËkÑäù%®¾„ä!6%69pæûo;ë´®XÑB¨Ùyy/Üz*™íÓpú4íδÔi`Qßsì'¯OA¼îµ‡²Z¶71quÛ‚¤l @Á:oÉFúé Pgœ€ÍBÛèõ0ÃWÎt… 8Êæ‘ÃþVÅ_ƒ`‘³1ÊÐmŃbPÉìÓ>‚¶íê6Ñ\ÑkEýSv&ß!ZÛr?Æ”Z±ïc~ííÛX(5Í=UÌ…YanbuÀ¿xè±´×æ Pr`Eò²Â@ôÙ§à¤ÂM#©än¸aœa~/ ³%GÕsäqˆH6é rôîÒwmX¶‡²Ô9L®j?BV¯r0l¹±¾6™õˆ„ÔþZ7ŽÿÞ–[kDóe‰£ÃÔPÊø®ôq5|ûmXCv®BèÃBSHf^ÿÛ5Ô4BñîZV ÷IšÈÕçüŸtàÙe[w"S‚›¯Qƒµ’ ¡é¨'{¶1$ü¡¼ˆ×3a:D›2­í«sF1ø%%%5öí©Óß ¾Ü©¸•ÁhZ—~ ­t0Áá4M!aÆwÇ ±¸†Rpâ>”‘ò3B‹‹4œ½Ú#O@,ÚÒ™Q¤†“Ú·F‚Q“úuXü>v­9ZØÚ—«Cšø»ð=]/-ª•Þç¯ W™`©„N-W°]q_ÒA¿ &Dz c˜Ìlà ëï>SCCÙ6ÿåéuªwÛùö!n¢´‘ùÌï>uíÝ®_4ô¦H»5ÌÓ³ ¥ýøž„òµÆ@™LñÍÕÐlx袟œî¶úY13nº8TMê}(ÄÚTÿ)€ÃW½³Þ¾ZmŒH«ûN‡wJè= q.I`'Z\îTŠ Ã#¢ÜŸ¬ƒJoJŽT~T[.¤bRKÿ>ÞÈ”X”ªÏá?#¢×!O9ëéð­^ààbÞŠ¼§ºoTdÍdÔ×:[µKùøþåJpÐq TE™PÓA ¾È({¡Öø¹Õ;@MÍ@„ˆÂ"¤(?/ ‚g!)ï,%‰ð,»*‹§fÆÔgùøÕ3̾ÎF¸rêÆ@¼ý'uiÜ7§ï%âšíÂÞYãj£öüGÿÓ‰9‘fó)†¼ÄU·a‡^™ˆ6 ñ¾P—æ‰^ÎÛ “=b>d÷C‘Ȥ¨1Ž¢qO†%ßÇT帕’r¥·ƒ<~h°‰/£M܈ˆ2‚ª¦ 2±®¬ih(VÀׯFÈnÐumÈ3½ÜZžz‹ Æ“DÀêàiÔ±Ö!OðxlŠÉK´ºº±KSQˆH¼]o£h1!ÖþqÃôqÆD26þC—•áÄjW>Î=ë'OòlÂÞë|?bÔGú†—þ<7WÙ©iÏÁAØ{†UAê[Á[_>,‰ðŲªäü`$Ñœ}I͙ޅmëß”›¥Š„ôi-œÕ>§í_t‰WOá[[$ÈY5­HâÒgÝyÞX~½ÁžË^7Ìs#ÉÆT›ÌUûHµëÛTÐ;iòȬc!ø[óFêmCÕÞèÕÏ㣟BœÁA=ªYÁyçR²[Þ³¼]sÊÞQä–°ãc‘—ñ®)]ž$Düªó³ðnº£Žú$¶¶ö¨,â*·!—¿~̆®ôÜʲŽ&×o“ªºbGíG©7•Þ}!mcÐ@1Þ*Éîº 'ÖcbèÖ¶ûVI"ð6€Ê¼5µr5?ŸèÕ±9Ïdä³ç€ñee“B…¡°´ŽÉÌæyékÆè¾õ‰¾Ï@$Ñp´UL³ß^†Ì Í"Í`ÊÜìöorùt;² Ú{ÎA{©„ŸTT¯®Ö28ÇgÖ&Îò‹*ÆÜºåŽcÖ³¹bžáỹ´B#œH€g¦ÐQ²Ç*·—äî–,Ö è(~áµiúíŸò’f?ZÒŠm˜³DÇëéü†„ÏQ÷ÜXúvêþfdŸgSËncONõ¹C³›;õöXñ}uŒ…Ddò•ÁqrµãË4÷ÓáŠ@AT7~\›Ù)±ÉˆAç,i‹Ä~p¤~ÐOV§óé›Ö²Rswû<Ñz¿Ùq©¸[øäØO×O:¥wIkñHSSÏœŸmðc(š Ób½Îa½¼dûã°®B`HbºlŠŒú:.hã m9È à6Ù.î…Zê2I[Æ …hâ‡é† -Ež»þQÞx‡Ö"?ƒÅPËÏib—L9²}Î{1–{šˆ*íOÚx¸ÌGž±*Oœ+‚X®I›ÞNI«Û\ƒ]O* “Q`ÛÐü¯h‡l'BZÅ1ÚTªÂ©ëº:›éëäoÖÛ£hFêpɸñw+XHÜßèó2ÀdVó29|VCÀšÖœð6/:ıˆÈ$±•Pnõ”¦û*Ršå3á"S1ù*@b]t,u^•šPõ¾ø®/B@Qu |J\§°’÷Ó‚…±+:PW*´·ð¹ßjj !O2¹TÝp?âöi9’›JLЈ¼Æsì[¹\ŸÍºÆ œ-Z®PÏs—õ¦0‡éR²’8Â^GÅg§êwé0Om‡rƒn«UBõ*Ø:Æá—ý&Ë…›™ÍæÚ?LfZЯ‹YŽ =ö³(«íùÜì·¸3¦ÌÝÓs«äÕî±ñGíÝÙY>†¥ìP%#YöøE“›p)B}9Æön-ü|8»§Šz*ƒ™š§KFDç3PÉï /]YpÐ+ú24ù%4”³•Råý¸ý]ˆLª+X’IöžÕms#‚0³³‹´Ȥ`3C²Wã|C­á˜r*š±"ÞŸO'=U•’Cy,Ñ­Uš{Às#¾¤ ’Cf\PÔ³®Ê×ûb1_0À ÎÕö“Ko"ÄÑ÷(r lNróó$&¦è”?+Z |šªVHÑâ×ñe+ènÂ;<ã\K¦ÍÕê)i¥½[õ|(8ü•ø~eIhrh- _•ãüºBv¾“95_˜yn‹Ö¿ðtÉ\·kÆo15å@Ù·3Mj:?Ÿƒ³ÓžT Ýýx“ô _ïá‹?lÊ»@î^ÎÅj’0BtÅïßrÍ¿6S‡Á±Æ?—)Î U[á·G?R "“ìþ w×Í: 1‡C†ˆ)”˜·ðÐ-š_VZø™›,l¯ìc˜sÌî°WýrwÏFSsyEÇÞXIѹ:Ça zN?gmñÑÉußt£lh}Ð%rk¿ÞžŠß;Ø(»”%PAŸZ7®7!Îørä¹'Cèp…è«"æ>áÆ»$…ö#׋6Vdb|¸³¶Á˜JÜÜ?ˆú(DÍ%5§šyøßE±«†\BQPÞH˜œ#a¾‘^eŠ;þU+wòÉíEQVO•ý'EŒ2T’SÈ‚ŸñdȈy£öç^«çÖÝqíVǰÎüª-&ßéóD×~¹HyN3ͪM-¿1ÞÄ…JJìë0ßôò“Åìëöð‹Ä$IúS»¯)©'å}—³uãC¿çýß’Ê;*R$oÌËܦ®0Ô’]ÿz´ ÍÐð("Šá}œ{/-rÊQí M¹·àh¬•íÂNpyo(ᓘU ĹsL—n¹›nðMûMÏ{à‘Õ˜(ƒwè ^4ˆ,“§²Wš.³CÈûxùÌü@ž5ï" õÝ’»ƒ×Ó6”[ýoèd_²;êáJJ€+¬9ý®XdþMKƒQŒ7I»o昺…¹BN2ÎT>Å jμDã¹W÷[ŒØ”~ŠÃrWKáû{ õ‹Í&æè8½mEVÃûéa[ß…ëÉNÁ˜úcTÑ8ïLõP+6¶Sè˜1&àxsÖU³™,{7s˜»:H°|‡f”·Er>@› d´½*ñ›ìü½[yüR|öÌ«'Z°É'Ÿ‡f«r¨3—š4qãº8.xŒ‰zͧæn\fȱ£…Õ)¡š²í~ ¡6&#¾/zëóÒò²)szuŸÝË2ÜøÓŽ¨¸bؽºªëëÏ™R^Ú¹<"-S×4;\nŽíí'Ý⚣]€¡Ð™F‰z×­=¸Ê0ÐsÚÄç‘òÁ2Ï´X`Ù˜ÄX4¡d±#ÁÄ,ãHÝ«õé]E}×Ù1xü¬ê&:'Y„Ò¸æ6ð}Ôœ­Q†^낤j÷Ú­¹ÙHŽÅÉýª(<—r)÷ôuŒ™82þe0IÝúÃæÚ[îª-~™ý1jS©l… }nOlßäŽÓñ¥"Ô„Çx©U´˜C¾7¼ÇAä翘ÿÒr™¯¬²ü 4>šVz÷Ð¥>Èëá|j³ònQ|EY‰ Ç!n¹K8+«šË»¡ÈdíQ€ÐHS껌‹¯qì)+ÙY¬W¤Gþ@„™”g¦D«­ÎçV"£¸.Ç+•„i'qÁÎnºiI°²ŽNiA”%ßu›aŠ-]g<'ríÿB?:É91™Ðf^FÙ–‹ºx‡Âè!j¯k±â×Õ5ŽûH9Î;wÅÇDçrLÑÿ`”C endstream endobj 162 0 obj << /Type /FontDescriptor /FontName /VTYAIH+CMBXTI10 /Flags 4 /FontBBox [-29 -250 1274 754] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle -14 /StemV 107 /XHeight 444 /CharSet (/B/L/M/S/T/a/b/d/e/equal/ff/fi/four/g/h/i/l/m/n/o/r/s/six/t/three/two/u/x) /FontFile 161 0 R >> endobj 163 0 obj << /Length1 1562 /Length2 7641 /Length3 0 /Length 8685 /Filter /FlateDecode >> stream xÚ·T”í6NIФ² ½KJ7Hwˆä²,°Ô²tÒÝ%-)ÒÝ]"!)R‚tǾïû«ÿÿœï;{Îî33×ÌÜ3sÍ}že UÓd—0ƒ›BeávHvN @JYYž¸9@ .\-Òú—AŠp„Áíÿ!…€‚‘÷:i0ò¨ ·(8Ù8¹œ|‚œ/A $ðŽHƒafe€ÜêˆË ·wCÀ,,‘÷yþy0A˜œ/Ùþ¸$l¡lP#-¡¶÷!`€&ƒ"Ýþ+“°%i/º¸¸p€m9à Qf6€ i Ѐ:BÎP3Àï’*`[èߥqà2´,aŽ4áæH0 ¸WØÀ P;Ç{';3(pŸ )¯Pµ‡ÚýVú Àø»9NÎ…ûÛûw ˜Ýg0·µÛ¹Áì,æ0(@UV‰éŠd€íÌ~Á6Žð{°3f6½ü9: +¡ßWøw}ŽÌéÈá³ù]#ðw˜û6ËØ™IÁmm¡vHGÜß瓆! û¾»ÿ®µÜÅÎãÉfgfþ» 3'{ ¶ÌÁ */ý7æ^…ûo àñ¿äæç@PWˆ%ðw-7{è#çoõ} ^öp{€ù}P/˜9ôþ×Ãì  NP/ÿ4ü·„ËÉ 0ƒAS¨Ì÷ßÑïÕPó¿äûù#`®}Ð=ý8 ßŸ=Þ3Ì ngãöoøŸõdä4Xÿ.ù_FII¸+Àƒ› ÀÎÅ p‚xø/ï¼þ;ο:ðOõ´j`Øß§ûˆòvæpÀï¿«¸oß?•8ÿM ¦¿÷†ðß)Tà÷„†˜þÍ/rÿÅùÿ¼\þÿÈÿ;Êÿ•ÿÿ{"Y'›?v¦¿ÿ;Øfãö7âžÐNÈûåP†ß¯ˆÝÿBu¡m´2Ô ædû¿Vy$ø~I$ì,î‰ÎÎÉÃâùKs”…¹BÍÔ`Hˆå_dúg÷9l`vP5¸#ì÷Åsïýí~÷ Ö÷—‹ãýÌþ2ïùg¼¿eèýªý÷9dì p³ß;ÉÅË#`7Ü{JÜK¼Îûå5ƒºþá<ÈaGÞ»îkö˜Ã¸¿ý’|õ[õGâã-~ßw÷MùGÇ z Zÿ‡ÈÚü‡(Úþ[¼'Ðî_"ï=Öþ~öp³ÿ@ð€ÿ“tü÷îãhv´ü£ù¯J!NÄ}+þPô¾ ÿÈ®"(Ô Á™‚C„ü­*ý›ÏË%(]Ø×‡…ì'Ÿ¿æbÎ5ÂFöÈŒ¯Äj¦§Í*ÉÎtsÊYµ©H:œg,~;òX«¢©vã9e§‘Ý´ 1žº;Eˆó8£¢›"¨GÉÖM”|&X€èAQ£#lÇ3³èÑd ð|QÙ5çÂHZ(ûR! Y¥µ½¼0M‰ŒJ@g÷»²Á´_k÷˜üEæwÛ(¿Õpƒ$•÷tŠÂ­¸±.e„Ë}ýóDÝÔa¾ ÎïÖÑ"‰d„ú©¤y°Êtæ?<ºÎ,pÞyOìaúŠD|ǬçÓsây¥Ê¡åÚáŽ!-S|ûKK“xópÎ]÷ j"ûyRÉdDVÎF¨Ù\F z]ŸhÜ™£NW L®s±ä;µµBP€¢ÛìD×èòµ“b’¼þH¯?›r¬ÈmñÚ®W CK„³y Zã‹òD¢5V²4æm/s¿½ô6éó§Lº\úüÉ–ÍZ¢ùóþ>¯‰¸¹ñaÉ¥Ú€5?ú°òôN=Üyn?µ¶J2Î:”…ÙE‡»/WÍ{¾Ï;Üç~®†¤T„K¹»Ø®œz–¹®*õÙÂó¼JÜ›my.#Š ‡ h2>n·…úGs4†Ð•Ì­vŸ<+F‹6C)TÉútyìK6Ô oFáÆu.ô ¿Üq¿ÙA{PÁµ¯vP¤öXHg¬Í‚¯ïCšè ÛÝhc’ª­hðFƒ»vª…´ß£•õYã±ÑJÌi}D9~MUœÀÒ‹dŽ)ÿ©z¿ßVlTx³ÄòqCfóxåÄχͅ"¾Ø¤ís[P>=JyD£ßjLsgz7~üK’J'wé²÷ݬÚC]:šŸhkµé©ËàÃ-øYGÕfÿø\†}3®Ã—p•¦’q9Ñi¯“_Øsé1=z šVWpZ½)õ³(|„ÙÆiÚÚ¦Pö4iµŒ(0}ËÜá¢ç·ÑgYÅÿª|òÒíÜ—$Ù’B³.àヷ^Äö·ìcÛæSFðÕ”1n¥ »ÎÖѦÆÑrµqT¼¬ŠÍÝ31&AÆQ'0ÈÙ—’*¨¹äÈ=eÅfnûþ—û—l0Þ—cIÌÕm’ÄóW½Ã—œû¬£³D㨻º5•\öð4é«´O!è­®¢æßäª.õi µdN;¬Þkô‡zY¯ðÖÖȶï“ lø×Ü_ÏÇÚWg¦¦ËÑêœÍûšÕÒÖú™ñ|ÈÑÊ#˜ád[½t&}QŒb™ŸbuyŒõ:¼ŒØßð$W}|É¥GìÐkÊ·Î!Ù0¬HÈ ý:y#¼mÞP+üËJñ:rœÞºÞæt‘ÁøØ–Þ0E`•½Û/ký‰5XéËÛ§óÉZ#jœ_}Iž’Úe…DNfÈÎz˜jµ 6›c~ÿ™Uâ¢4¶ÃÜÞŽ;ð:]`u ùòl¯fITÌ—dv­Z+kº¾§áò~|E7èY*´axˆÒ¸IMÕANævõ³þ‘—Vrcöõ¿Fº—>‡HÿeóK¯vâÑxæò@~ Mñ× nOˆ…Ó«¹¬TšWü ÚFi§7,{ˆND³ŠË>JÙ—ÖAà Å^ÙösOÌ~xX’ñˆ†‡b¹Hçÿ‡ª›=êFßÃÌôF–ÅÛjİí¸…¨*}%{$¨¡WWÏúŽO¢Ò•(B¶6ŒqqE¯?_kÁGErY¨Hê?¹tËõ™ynO‚IŸ¢=LÎ÷©ôIçUçzÃ-Hž^GÙ/¬÷jÔƒóü¢#OQŽÎÇdŒP¦;A˜ùøø-©ìrB`à•Sž£;‘}ê!DJ“³Û\™¥K‡œâL…§Áñ´^ˆ IÍSån6–šîPg^/Ž¢<ü'å™t|àæj¢GP½­÷^Ñè|¹¼ý@{Æ:ådÃMáXsƒÀ¾vï/! CkÉØàÞ[›=Q—ØÅ×ÛÂßåô"Ê{1\‰[H¼|ÖdÙéSéRMIi™jÜ­¥Õ5L‘BU}¶¬rë»Ó­ñÖT(NyJÆ1y.RŽ—ªæï¬$XRM,Ƃԋ**q˜ò}ñ-WÇצñ—²7Ý:ï’B€n1Êê3…á~¸¸ˆ¾È&@ „þLnn4>. À"3WÅÖ]üжZ˜YètZ8‹‰°Æ–2–ñž<ü¨Þ¾$ã½~N)˜ð탶1™’šXLMßÀ©Ò MåÓIØþ$þ¬hÂ#¢Þ‘³àõ‡ëÜ,߬žëv¥Koóo†ÑŽ{fÐÖɆ. †Öß>ÝšUŠ2~‹k¦ž¨ O_ۘإ×Ï4MNf«á°Ir–£ Oëm>Eˆ.À–ø‰¯êûcÎËœqo^ÓÎG*M¶bœQb~ØxGS=Kn6LïV•PFMY4èûÚÑÄ{»›8íŸlÅÇXÈ®¢µH¢çdÐòtU-Øg§: Êå¶ì7Èå0ŸÑa¸çÞtÇÆŸùËXé<ðHç 9âôÓªHÐQºãuÓUôt÷;ZMúå9[‹Äʵ’4Û Ð)uŸážmךRðnÞЯl­¹ä6¹qκµ·Cøi?TÖÑ-J=åøA¢ÇŽÜLIÞ*/©ärOŸ<ˆñÏC ÂÖäCrÖØt/˜4™¾ßEÉlD‘ß!¥6fN“r4a %”y¤‰ÄÏÓ†ðîI­ˆ‡½ƒ÷ðö¹*IµI$‡Ö¾½éQɧþª P û™fÞëºÁ%Í”ønÐ.«rv*m6Q42ú1Ü¿k¦9Âïû%b»ýÙ‘ŒþGvô⛺ݓG›~…¾î-‰ëQˆÒÛËcôy’ExJhÀÐè‚õ’d'€©ÅoŒ>¯(3Ɔ9ø@†Ž&¾¸±Ç žïã˜*Èx2— ˜¶~IVÞ°Y775dô&Zç­_5)>+µ [_4Εx±ñ­ýMãx;16½ÇvBZ½$¢=ÂÞû˯Ò_!x˜¯çã$nøm%ÜgN~¤a˜µªÑ­¥x“cŽÆ¶Ú/5Ÿ&=®§z•ÿÈ'Nåkfyd÷’§@k°]bél¢ÏÄd­ÕJˆ‡öåMU”ÏÝ­v>Ë%¥ÁôQ­äÆJÜlŒðÀöºZ8½=ºU‰O{ï–K2€V¸+ÍU(šÈ¨»ž´hçõ|ù帩טnàõ× )'µµ?pñ,ˆ+½²hÀñ€A»W¦  g—Q¶nÜxvrx$AʃlÎA‘9ÁLd³o¥°“Y÷†¨ê©fÞÔßÚÓÁÕô2E±²r¶(ÌKOs¹#—4Öa©6ô WkÚ©A­ÆÃìM^ÖÞJ£â?~wây%ÒmôÉrz›Ùº,µ†Ão:s.îhôäÜõÕGL 6Á¹êYàû7a{Ve«²¤ZóÍ_ñÙèÁû~O5æÊ/Íã«sr§ l} Öœð Ö·ØAƒK>2ÛA¦ûalR¥G]Œ7¯IväsR{'’1-sµï>ß}¿Ò€ÂMœcWfOìÅvG&JËÒÌ'¥†cV|œjÐ}pj8qdùÁo¸_"‹†iÆPyâ!éé|´‘oÉè¤jB…ÍÂÈW7ªãB#w^™p_ wúÛw_ ?A_¬5Cí£Z$~¡Y ñZ‚M( ÅÝZ‡57 ¾’±œ`Ü{ìÈ!Y.¥4IH_£M†ˆ+ŵ’ 5x»îme/ž²tœi ²ËŒ>]ˆƒ7i™~_hã]+«k»náŠoý´«èêÀÝ•·üÙY@]’ºýÕsT÷C0(gPdC&F¼¬1žcŸËhQ•'˜ÉD-'Z ÝœU\¨š*;›îû–íïe«›¶Å~P£¼"1ìîhâhê>sÓåX/NjçØ DKÊX• nó'P•éü”d³¶hiðÊÄõüŒ?÷}=Óâa¿‘67I™ÃûꉓýÕ#©tŸîœÛÂêO¬n‰P"Ä’3/ç¿HP×mðr: ¶öQ Éq•´TŠÙ´UWBH‰×nQÔòÎŽi¡Ø9sÛìHÎÈiàS`_Œ©p`BÜüõpÝc sk4ž:œEâ5Ô‹¾º›ÇÿŠ(Ä~¸ùóNoòàxÂ¥ÝM'=DÓg‡’—¶(6£”ú}V<€6±Ö{Mgü9¿Ð÷هÕwGŽÔ™FÛå"R¿>ÄTû.ˆ]lî|sÇŠ06ŒkFxßÿû”‹+ "¯ñºŽ6ù¤>¾|eÙ|ñ™RàBRD€þë o‡œ>•¥Ž/æä²ßApBë‡C-ÚüòÈgL·‡£ÐÌûìÕ-H&ye%wQœs­6/ÂVªSäð0f°¾ìS| á”ý‹\T7Ã¥)ƒ´yG.Û½[± Žé<ÅÚËS!“­žw„í™Q*ö'—1[­w–»Í–];ä-eDúü ‚ó c ­Øv/üÆ=ùwW?S¹(JŸãça¤Ün÷èã”'áNÆBœnÜ´5|­—Ñ£ïßHjB(? ù¶ú{6¿V›ÈÒiéaÚr_ݶõpn‰ìRA²d¼‡¢H§T >Å3BZO,²§¦oóP3Ô>-¼ØO¡xx¾ð³ò)*º„j&Si ãgó ¦ù+ûaé99:.ÆÉìö¡xŠûÞå!¦«ÇÜ´"N2Gê[ñIØL;ÒÂBUVåÝu—K3òë\ޤÔj—®$ª-_Å ©hö…Bz¹&®¿!ˆ9V_NJEIIf­„m–“Š, ¢GMIÓlJ˜¸ ÚRT ”銛ñ *ê]±‚1{Îij<£ˆäÃG¤‰LÔ¼5ïhDîÄd.6)SS«XBrô\8ôúß®SöÜ­(;ßõ´³‹üÔ° ™d!Ï$ðJâ´ù{ûzàÑ,öŽ©.ðeòNm¬ LÅíÔY…4bÂí2bC¸ÜFËÈügj½ž5m*nM+êhù=ÿÄÿt%<#Á^F°Õe =c”LBŒ—ÙUÜ%"²R Ðgòësükf ×ýÅØ­hônWÞQŽYËÂçØÒrÛ™3 ~4HwG™BÞÃÕÀú}ß@{ƒÄ'æ·xû°‰)lz‘–Ù€Š»šIÌúLH?ãÕÜÛ·îü„/5öŒ•ô!Ö'kCâ«Ø5ùÉa`eŸàÎÄ'¤Ï*¡žWÉǦeߟ¥à=D*ñV€’‚=GÆ·[UŸ1/9|]'”M@â$ªf¢åˆ¸Væ5ö<›ÅŸÎ7Þ蹋#¼aM*SX”ð$Ï6À[q3"`q5ïø¤ý )ª})›O;ÈJrv•_,@ÌÿǺôƒ¦”*ýÈc7éø™6,[Ý|ã籦aà»DOf"y“e‚’.ì îulaçPHײ§ãî—gÜpoùIö}ü3­=ÅsÅK8:a$cyY»/7b|®.|LÎéì¨êÓà§…Z5g=É›döÚñ2Q.²ÂÏÌZ×þ広›Æ˜pß³W<‘cö4ç`ŒëW#¤^åz {ã²vfÚ­ÎÔS±ÒûÄU]‹°¨·ˆa`A#§¬–—ŒáA3wöR&£r½[DŽžTn<ŽéÅj}~+Ž„ËcÅܳUILNŽ ßµ."H“çö\yÀø©¡VpŠ÷‹dç2ê+1u7\«å€¯¹+ño;ð’=ÙË!J„þÇÕZD™{îÞýDDhiw”J—O_N䕼b}Óþ%S2¼b)´m[¤›…qÐWëå'~ï·AÑϓǖ{Ûl:ùi×ÒTö´Ô[*\ÕåwdQ}`²Š¸3]g!ñD†S²AÆâ@Ä= ›ºýòê!GaF”â>αø³lš(Y ¿Ã$ö®¹ª ¢·îp^¿þ¼ùOUfÅè„2oã®»HßMcöäž¿UjàU/°O®ÎjšH=Dy÷Òªõ>—¬@Ø4ÏÞYY·8VŽÔÒU5 ¤ûÅáêJïëúƒè òüu=EVñ ~ÅW¤Æ{ *Zß)ø±{¾®ß¯Á/0Á>LÝfÖCŒ$Ūæ¶ë)- —‚´Š[-ßñ!f·•âuõB»›Sb«E¹5Jf¢á!AhŠX©øâWÜ“{š*‚üÙ9d/,0¶ò—°µÅ™×&4LF¯fááu>É›¢¡|ø«Ý}ÞÌÉ8ª±¸Ÿ>ö½váÒ}Yñ´N)d‚RÐÉ>µ¾Â«_Ž{ÖwÒ‘AR>?·´ÕÚbè>\Ge×ÈbÍc¾Ä+Üíçâ ¶lÞÜoô”çàuê0QWË9›zÇlrð1I]½¯v‹éëŒ'Ž—<¡Ê¨ÀoÑÿ©òR<˜›÷‹‰Ø†¬r!þr—Ïíä Åjä¶}»ùìšú-J+o/'YqnCÌOÅîb}%\·zœjÉöZú.ñÁ|[´º;˸ÃÑ—2k{åöùÎÙ®äµ:èƒ"n‡ÝRg‚öâPåía w:Ë Crƹ¥lÙ®Á†NBÕÜ-úçý¡Ø´Ò‚…(aD( ÌhX¤`òÕTe׸›þ>:c¥¤K1ªN3b–KÁ )Ð>—áKW¦ÝF{¼R5þf* g^ê Ç/¦Â'‘U†Jê }–óZÅŸ ßXëÄE¡ì³ð¢ñ¨Í[)ŠR ŒÄì^›ÂýÞQo ÖÇôÎ]ðDé¼”Y‹À%ì[7ß‹í¬M0MðÃÒ*vˆM–ýÁÓR÷¬RËs¿™s}_ÆüÆ ö»‰kŽÒ°sê¶…¯yAOº‡óvúlâu\¹O´Ò‹ž2(™º?Å4Õt¯† FOj¶Øyû?¹xªq(O^…=–z .Ie‚Õ|« rÆRñðØa˜e×_Í`OfÍl 怋SÍ,TÇV‹ô$ÑänYÖÉ´kã»mÍ‹ØHœ&ø¼ê§ëÜÓÙÕЭ ‹úÀp~šÎNÿí‚@u4fÉ ’6m%ºHEŒwûsî §ÒÎa·æñÛ®¢71tËž]ÈFÙÚ¶èõ,=Õ§?îžTÿTÿ΋ébØ»úmž=Qñ #å’Ú¦ô§øí¿ÏÕÖwò³…ƨތ fÏÕ†ðXâq73m:_ ˆóp Ø¡FÑæ)Ü¥æüÚçãH‘PŒÇXå+ÀœNãO«QfÚ5Þ&8¦±)QgªÎ&~1…ú¦¢ Îl€¾¤Ô}5 á¿TËàÁ1ÑÃHÔÙI7YïT‹ü|ìÂRÞI¢Hç0P­â{Ýî-`€¡ªa›ÙBœ96-„Œ‹›Õ×ç+é3ÿ2Óç}}€:|&Â{XS  œÝm,“”ñþÂNw]Õ¾»™Øß»ý†%fs‡Vþ“ î‘CZ“Ô§øÇßi?NoÈËx;ØtÜuf΃\n«š·ýUU×è³ßžiM.¶p´Ë N'·V£Ü)6³Î…ÿ¸]eÇbÚÏßr,(o)õ «£x{µ"®²:Úµ7r|Š9çlAîVòôû³ŽÜë.Þ«œˆŽ·¢äY¾žŒwA}çV3î÷S ''T’q¥lЏĕ~÷‘7€“åß·Os§d½é¢Í¹»á鮪ý£Ïã_¹•HûIZå`öâ¼{¦x2BìÞW$!L0M15æö=L˜þÑ„½ ¥ÇÈôÌ´›¸¨}«—}‚(BøÆO>8Žn`S̲7­ÓÐ3ÀZ†Ê -•š<Ûdv]ïk©’åu£ -·ò Ò°åªj?9̈8\ÊOÙ³b²t¢Cãá·¬z®<óŠÑÉÓo½Uùù:}oË+¥ÿÍ»“·Ä,%zö¸‘‚Ÿ§ : Ì[¬è¾ì×DG%D¦)1“<ç阤ñæ1–§ßD((ÎÊàW1¥(n™;'¥èaE+ü,Çt§”ÞÈ™ç0}ñÄé¹u†« 'EISónÚ²gÏ^MR²ÎÚŸ!¡C"®5i‹Y–LP^€ Ðð —ðT ||åTà’M+´Æ§Œk(þëçØx‹²Ç¬K¦V¼!Û}—nÇÃæÞ‰÷é®0Ö›‘…øÿè»ü/ endstream endobj 164 0 obj << /Type /FontDescriptor /FontName /YJFJHR+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/G/greater/k/l/m/n/period/r/s/slash) /FontFile 163 0 R >> endobj 165 0 obj << /Length1 1422 /Length2 6165 /Length3 0 /Length 7134 /Filter /FlateDecode >> stream xÚtTÔk×/)ˆ„H— 1tÌÐÝ Ý) Ãà 14ˆ „ „€Hwƒ„„”4"­ R’"Í7ê9ïùÎ{ïZ÷®Yë?Ïîý{öo?@}#~E{”L …Dóƒ@Re q$, Æp4ö—šh óð„£RÿËAÙAct*4ÆO…hz!`aXL ,.„@ É¿QRˆ7Ü #ÐD!ažD@e”›ŸÜÑ )ó÷Àå€%%Åù~‡]ap( Р`®˜ŠP`„‚Âah¿¥à’qB£Ý¤}|| ®ž(G9n>€í0„yÂ<¼aö€_€ºWØdD@€±ÜóÞå€öxÀ…!=1^H{˜S`¤¡ Ðsƒ!ÿ8kÿqàüu7°ø?éþŠþ•Žü BQ®n¤ép€#`=5m´/šAÚÿr„ ìóîYúÙžÐÆ®¬È¢l jq™#£^àw!OLS+”º¡gŽi²/“®é¾Z݉w´\2ªŠbÝ“¤]z1‡½È¢øa‘‚%n‚í#êÄ8Äkb«»H^²Ÿ(s×=`fåÝ飃¢øÁ”(Æ;Tx‰a”ϵÎ/·$zü7gXçÞ™ä\ÝäÍè{>'UÑœkI)uAž8à*-³¨#87åyº½K‚rÊ$J—2ó®X`½.¯%ãvNË™0h݈»(™ôix‘ÃkŽŽ•®#˜QÓ§S¯Õ!ˆs½wßüZÒÀÇÞýj]\Ù²D¤?ó¥ÙÖ\»dpL&T÷"FãRÈÿý%ã"Ö¹i]sÇÐñëÖ–LË‘äs\í¢Üz‹‘·,dÚí¤ª_`6¹Ê/û= ‡¬sl¢nˆvÒÖ•ÎH6³‹nêÈ­Ë£éÞÊ\S úLkþûêNO/£tºíÇ8ª}PWî×Ùø¦¿ÖËmøprešüŸ–ð·}I)ÓÑAa´DÓ·Àå<& ehñäGÇ›WÄ÷çÍ]_Ÿ¦" G?N=‹êц½öÝêø¸ž}E–sÛŒ™¡MH·ëÖB“+õ5 `ù±…Çæ°›šÑÛ*‡"bœŸ¹“\¤EUÅ¢v"áÒB-AìûŒ4´]äD¸ÊTîÔTÖl±>â›ÖûÚð/„â-¦ºYõÎ\ÇÅŸ…¿ßsëÿèÒ„GöAµ&ÎìËÜNQ xÔwûyŠLßÇ5ïËsŽ&—¯†*Í—y•ö£e—vOD×'ž¶õ‹8Z„ß÷™žV }—¦z*p$]LÀùg¸:¯ôr/GáøãjÖ§ºp7*|20BTÙŒ;÷IjhAÈÙAÔÈ´XºwÐe¡ˆR”)NoñÄð¡{9pÿáW™Š ßÛAET÷h¢ªã¹áŒîé,ºo Ýê—¼Ô@þÂäˆÔ7ǦY¤±%9f<öxÈtæÇŠ/kô´*Îáà%&ÜŒ¶-+ÚùbY$IME:ò½y‰NK+6áó*öxM£ô’D]§Ü/U$ïìgû^à¤÷›+óE ²S$03ï¹Ð¶Iª‰ŽöWß.…~Žì/jXšl¬q#]UÈùR‰¾¾Å;_]ö°ãô«µÉ>š´QÖ0¶4$KCÛ‚!cwvevž RñKæ¡fúFj1ÚpÓ|…¦ WÌÓ¦@ ¶ÊY¯ŠÝ¥×dÖ×KÑ{©$Œ¢Êz·ifç~Í+Jêû ÇÏ„zÖSN‘rQOÇîuS´‹½Uw›–Ö4nK½áÔ©UîmþcÉ-ê i¦ðì>"2ŸæÐ(m s•ÌÜ W4=_Ú´4ãžR¨¾ì`á½áIEÐgòhaûé&¸Oä·ï-ØÓxãÎq½e´›ôˆ|T{VoG#yÒ ÕÙæŽb»ZJ¨¸Óµ2y°É[æê¹&Uº†zabBƒÛÖÎ(М8¯hÝ‚¤ÇEÖ=êñ S‡,Z¼K$òmÈàiåO„÷nsha!)†l/«KæâWZiB™ºewz\™ug*¤šÌðeº'¥bȤPgIà1S:i¯ÎáœJ?„ÛÄÐorb?Ø.5^¸ðÈ[ÙÉ6á$Qç.|#g(xsåÂÇ-‘{‡ùCßàñz½r#>n‚ÔÄšÅÃh =‹Sé˜ìøvÄÜj&¸î±Øîaå‰ä°aõùÌíÞî^·(§›ý[út×Tª)E©¬)‹ÏG4šCqî½z±> %ì®_zl›R56F›õ~*UÀtÔ6ï/†#ÚñlíI áHéûF™C’ìiC²þ=©7Éß šÎ²á£Y3Êä®ã öÃêú„“¯]¡ M^|Ý•†c—Âøz™v Ø^SÆ4¼.%ÛÿÍQU'v«ÆëÚ ÉÍ4„ÚCÜRÒ}žÜ¥ñýò¢Á4/AGè¤'áÐÉ…Å\qñåÑe`ìà²Z‚Gé)á32CSï‹§ÖG‡x{•7±‡{JøŸ¹ÍøÞÛ¹ÜÅ-#‹Ë"–ç$XuìðŸ¡FÔ'Gžìmò½Ze­ck*|ѬøZY­"=ÅÂõe¸õ­m…'…3žS-‰»r ,g¦5É_M|P¾}ï²Ú‹¶eã£uü„ŸrBk¥™ç,õW’îêeŽèÚ crµ‘Gš;í°¡C²oqüµ0vÓWc.@šÚ›= Ô;)Þ¶cN±ýŒ[±u'ɱ$ê‹íŠ¡3âyªáÓQäÂ0 Â9ß¡á•Õ(A?:‡{D›r'ØîÖ«¶I!gµ]Xäk9벂pm…¯ð:7&¹ÖVÀeSóÌ»6ü' }N¼*!lhÝÁj÷œ]üqÒ¢Ð|öÛØŸŸ?¦|j¤—ù^*wSáiEGlÆ?r¦ðŽZoÙ0AJ÷cîk5­GAš'ï˜EüÉçÀíϾª³ã¸Ðñ…€ö ©:34 Sx9et1§UŒŒO#Üô?x4(wÁËÓûg\¸+=dæ(xLUyùò™U£¾±™Ug‹(é»ÍÛ€¾9ålÿ¬˜Ì.Wó'ª·øŒž.¹ùßPûõ’,a'3ò”¾aã©Ëª ÏnWXv`w/'½ ‹‘àbë`UœܼHs—0â§ó}ö7lù=;Ö?µÝÀ³šˆå|wµ1´ÓƲ¬Vÿq<Ý¡FB©iÊa6¼g¡ˆ‹«®*Õ n h7®@ÛëΛd­ß(¦ø~Å‹¹´'h /L_ê¾óã9uÍ «­áܤMvšt ·åÖcf!áV€Î¢³ O­!ßÉ ¿ìª’ÜpêóT°ÍX®¾¯Á°Ëê"žûInS´ Ýzzó'I­B+!;§"-Îö`e+·ôޝîsES}gt¤Aƒbu¹ñ¬Ä$d/êÅ(!I©­êTsøª ´ß0þv†·îwµÏ&ÌœM+~kƒªXydz L5j¨W¶]Ü<‰bH¢Ÿ[VýçUHÚŰ#ó?”¤m/=»óÖ* ¶eK…ßMo@&~¼%<üSPú{-Æë~âü•þ~ê‚ÄÍ¥ýòŸç]öŒÃèýÕ´Óü€ÏŽÖŸhïž:VêÎe½) 9GâÓRá¶iѳm¶—MÙtHQD‘Þ³®áÆ_6"¿#Ñß:xŸ­¤^щ»fS†¾ÒjŠ&–nÍ*#i.ÅÈ»åø È •j°³Ì XË ®!¸¤‘ŒcoûG¥N¨2²ðsâæ\—Þ·”N)Nk®¿˜$_÷ãS]Ú?]úhzÞû¾_38štägï!ÁÙŠÿ/œq}ŽN`Ÿ©½ ¿É@›C=É´¶_+³tf9¶ÂîÇÔ—=WÂËÍ•„ïëÒú±²Ñs¹0>݆®ˆ~…ÎHN,le½-ˆÔ I®˜º3äófîÇ)l€Iœ×ÑŒùaî;.±±¾(ùY¨Í¨sîуù6ÓN²ü¹¡\6}Ö¥O˜¥lFä ¯•:LÎ ¦ 8rZ°o¬.O^Ýœ•Tïq7:8åßÀ§B µÚ塚¾•O§¼úÖðDÔ[kMõ nú™å¬iý´¹¾FÚý9YÒ]2Â5tâ…PÜÌ?ù0uÇùaM×®‰£…{kØêÎzB¼Q'cJýâžÙ¥ŒÃÇu¸^ëðŽ\¹V¼ö®k¯œd{t“Ô§½ é¯Á7Ò¶‰.Dª¢$jÕØŒ´JΈ ò@•é3™R¯úv­9†]ºmVÙ l ^ašË7-Ö3ä["ïÒØfÒ­=SöOz8½|ƒ>fò¤|^¸ 7€}€Â¤åáyq:|õ£€ÛHÄnßèkYz×Ä›cƵ?çùð×÷žŒËŽt—½¸£œEm»ìLr¾¶¤¶ìX»ß`1xŠh€My ú,ºõFüØݲ{ô&#MD¸Y­³¶[˜kz˜Ì Á:Z&Ÿ' ÙSXˆ¨·7¨Ê”§mÀcÈÃ>= -¿èœ›%!ïÒˆœ!æOìÉx´s¨?>ÌŠfí”™Î~®Ùì÷|ý€µNÑ©í|ÕѤBÂg^¸]~½û›X?´vå¶§y Y(Ü&_j¿Ÿ7þn"-qzq#YJ;ösàÙ]w„OAvĵ4õ?pä}6>5‚ÕÅÂWü–¥¼¼à{VæüMrâKõñC͇Ry/™(‰¿¦¾7ª|//kIõðÊ^pÍDm†™ÿ¼MRV_#üu†ß .ÊŠ(¬îL…wǘ“ÔfR¦>[£‡ò-jv”DéÖ—Æ5´–ƒ ÉßK0’ÒH‘¶¿ØæoÜpÆ6þšóÚÂuŸÍ‹­9FÛv¡Q»H±Tî&EÄ4¢èr­;(B³óºDw„z¶Åªç~ò„5&T‚¡ˆƒ[cn3I!©üÕ“"W.ÙbK÷Æ`÷ûw½WAú6‚Og‹¶äçX½’›wÂ_·åK+<©T~œYËŽI‰fµãÒ¿²7å€3|¡òEË(óøV׃c‹‡L“PÇáPéüÎ÷ß›bn1BNc«Ü€ýëÁˆâW×ó7y¼Xiu†NÅÒøV. ¢)Åz?È9;’ý 7îü®½¾Ó[4GZO1@èIÊÜ‹S䜀ÅÕ¹VR–LóZ¸± ê  {j‹ª Ð Åã>¦ƒíy9R¼þF¬Ä¹LsfÇÆ-“É¢ÐÏ# 8ËŸåK%"ã=“!¨ ó÷xû|݆6Œ‹£ß û‘Ï_æ‹£âÂ÷¾Šy‰76¦âÉåÔƒ0žM¶£ýŸú{nvüêÉ6OB|†êÛ¯(%B£öøØ2¬îUÏ€E‰"WdÙøI×+C»¹…fïõào4‘X!Á*ó~ŽÈØÌûÓGA=—"Ÿ¿¸âfÍ/¬‘–¦Z=¦H¾*Õp~T¿öðýBã%€ü8Þ1™ *ן×óÐN!·v«…Uæ—ßXWò¨WðãÅbãáiÕ·ºYºœ•^ÙÿhôØoÙqÆX®ìè„ýIJ"åŽyr€ xMµ'¯Ué} ¨ ¸Ên™pþœ™~µAÉ:  PÞ À9tì-Õ§m†OIß1ÎÑaµ‘ÁP×5QK›IŽÜ‹êé‰z¾ÒM׿D4ßùj0´]áÞnN9MT»›ás4>bm¶åÓs±Wj ò€6£û¡‚ÄC®g¬W÷'.M²¨D;_h±bOˆª_ÁSÓ¼è=X"j|Î{2UÁæ´¾Ê_[Ÿ›KÝ:Ì~@ðÆ}¨iöj|™s;™ˆa³½©r cßÑc=¶íÎN@GÖÒäDgÙŸ–&þ<𠋺)h‘ûmöÑ—‚-?âC½‹¾G¦8£¡veàYÜ’Ayç‘øûÁ·"„Ž©'Ë)*ò ZGO‰ïfã!ýåµS ä"ˆï?Žzk¤³±Üù~r*ÑËØËê’=™@ôa朵x,ùUÂÝ1%[æf.$u²Ò#ç6ó·Á›ÂsÕýÇ[HUº–`[ã-Ïbˆ×#sÙï ku«?¦Âœ—T¾ Ýñ*"¹%¤g6 ¡Ë>r†¥Ù³ן¢,ì°vîm%5„t?Å—Ú ßåÙ¡¦lð‘lu}OÛÚ¹qU¢ò€Ùúu)ÕZUjGÇÕÜHœ± Ë„£’‘bõQQî¶XƒÓÊI—ÃãÄèÓ6z×Þ:/˜eu7i48XÀ¼Êq5JaïÕú·bõ ] ÓÖmƒ³Ž'ãA; ìU¦ Í 7&·à¾Ûo¶xy hàF+FÎg ’SéVŸ)ÅçS5£Îvå¦h^È1àDÜ'9‚¨$¦íÎÔ4LÆ+øÏàe¸O ½Ÿ9­y’Ò1™*`úÓ¥SÈ–ÿx°Î­mÖÿÙâ{œ•â†hXc×ç¼Õh“åÀÊD4:ñcO¹ùÆx50<¹Vö¢þjŒ.¦ +îfWØRʜ浻QQäJô {m\œî[ßæ@á8ÝšTzbw“É'%4ŸŠŽ?›¼¤˜ºçQБ…‹U7Ø>ÑÒ:1lý5î{Z i¾ —‚‡&ÅkÐ0Ì哯VðKåì¡ ÏýF˜¸‰¤jU‡Ô'ÿѬÅ•ÌÆ­eÏ)Ž’b¼ÈòñÙ~« {=i³w!!o–´óŸ Õ“êój±wtNÑŸ²ñf~%ØGû?X#H’XÖ38&®{ª¬C•Ðdžä7ðªãýµê RööÇù{y×Úyב†9µvÅJš+_φ¬»Úšî¾¼ŽØ+öšµ'MK·eÈb¶âç”ÛãÝ·˜p‘º]5̾bá[­ñÝU=¬Éòò¤Kv:ŸbˆC稉ó `2ºŸ³6´aKÀÐ4Á±n4ܧ¡4;íšzMPqÉÉ¢<õ}÷®yÞÌÃoÅ·b…¤ò"xq„œã¢+ŒPIèë˜Ô3?ölá9<a¦°~¡°ÚQ3¹‡ŽµÇ²zPkÖ£ZS{k™w\´`×èÙv¸~^j¼?C ÚòvÓ|º¢€Œ÷m÷cgyŽNÆiݨw=2¥#aˆ…«Þ5Y«'8ì³ëOΉÓ¡âÀÎÎ~ †2í­N[™ORÛ`·ÓšK¸Ñ 0_Š ÕcÁcw™AffÛ’—ïï²;ź–¹Laß5>ºQgP ñì#L¤-Èý:ÖѤ endstream endobj 166 0 obj << /Type /FontDescriptor /FontName /CAFAUS+CMMI7 /Flags 4 /FontBBox [-1 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/l/r) /FontFile 165 0 R >> endobj 167 0 obj << /Length1 1408 /Length2 6096 /Length3 0 /Length 7051 /Filter /FlateDecode >> stream xÚTX“í¿¦%AQG ÂÆ( é]"!Ž1`06ØF H+Ò¡tˆÒ‚t‰„’Ò5)•Ž3ãû¾óýϹ®s®]×»÷×ÏýüîûåáÐ7*Ú ­á4 ¥Ê::R0X‹Póð!pHø75 ƒE QÒÿ-A‡â>(ާƒF4]‘aQ€ð-ia i0 Ký•ˆÆHT n€ ‰FÁ±Ô<ÊhgO ÂÎGó×+€Æ–’’üUPt‚c0(  ÅÙÃaP$À CÀqžÿjÁ'cÃ9K ¹»»ƒ NXc'Ç/pGàìwàX8Æ nø   u‚ÿF¢æÙ#°¿ý†h[œ;H ŽÂ*\Q6p €0`¨¡ Ðs†£~'kÿNü¹€0Høïvª6B ~Ca0´“3å‰@ÙlH8@¢ ÂyàP”ÍÏD(‹&ÔCÝ $ÔšðëäPDÑ%ü à œqXü QègÂ-«¢l”ÑNNpKýó|* F¸vO¡ß›uD¡ÝQ^ [ÊÆö'Wg!cÂÅ®¡ò'…à¢þÇgÇÄÁ’¢’b¸ î³úÙÞÈÓþ+(üÓM@àãåŒvØ@À}¶pµêà0®p¯ÿø·E-, °AÀpk¸EýOw‚nûÛ&,ƒð˜ƒ Ü€þþ~³$ÐËBzþ“þk¿Bú¦C]M߈ÿŽ))¡=^@)PD Kˆ$/>ÿnó÷üþ—WŠøs8ð?5P¶hBŸß ·÷·?¼àû£~À¿Gè¢ d†øþá¾X #<„ÿß øUò¿ÿg—ÿ‹ûÿy ˆ+ù+Ì÷+þ?ÂP'ÒóOË®8‚.tÐu þ3õ.ü·–uà6W§ÿŒjà }(¢ì ‹Àn… <à6úÌþ7“þÚa‚룱ˆŸŸBü1‚ì`Ž„Ï –°±ß!(– Aܯåþ´á•ýûª(Úæ§EÄo  Ô“š@‚%ð&èÖîñ‹ð! #”˜}¶h õÏ5¨rüé£þW_˜+Cü‹„¡Ù¿4‡{ÀaÔã£hØí ‡ò †ýRÅ+îÀ¥~òÍÄ}S`Ö}J\‡ê Õ|¬aZê„V>d¼]rß¡IWÉe?}f웾âz¥§Ø.ð:dÅîºuôèÙ.ñpœ×;ç(}-QæÝx¥kÒ¯1DúWÃ.4SÉÛØuòÐ{ß(oûçÎË” ‘Ð nÐml.ÍMÕfa—2Y_¸ƒ«³î6ZÿÎz#cÁ)*p1Üâi‚n2§–Lãu¬{É…¹®žî)†ö«-aþšnK[Üq ª·»ÙUÄΕ˜L½¤;Îxí¶–Ìèe­vQaͦ£`–?~¿\wÇ¿³fÉqÓ¥=½†µr=[[-öQrfdO¬B_Lé·‹ÑÂ'¨&áþ&yÇL?¶^£ÐȃÇÙ=ÁJ¢Z xðQ) ÷ÚüxñV<å5’·TdÇ££3°°ÉÔîÖŒ}âv§¡?ä“7o×ýS’û†:üü‚/Âe© ÷Òõŧ‹GfVµ©Ò‰(ØÃ¢õ¿PûZÚR ç]R%ÒÛÙÁ'ÜÌ›« 8"°Á†|}wU‡½‡™ô ßñzÿy~õX$Ö»£üD´¤”¢îåm¢¥$ßz¯¡›"ï«ÛLï:EìM¬F‡­¸ÛFa2q9ú>x–DÞQö Ï„qÈ×` ‘PÈ>îEP¯°ó1èÕXÇ„»÷…7ǰÄïNhf‰á¥ò¹½ßO Èó'¥C'Õ¯C^Êw0í/(D jœr7G^¨v¸„¥ã»Qo?¥¹YûH1&Eæ Ì#nZ5院UBr-ôùœbá•U…•¶MÆ"OúÕº´ò <:fuiIiÌWfz-…h'Šýˆºwy}5.ÙBJ„î ë'Iñ#)6S–uäWؼá÷Þߘ=ÊûžÎ Û‚õð1ú1@ÃÊÏF×S™Ü Wƒ<ƒ;ù«”^áêæ½öº~Ü<Ö$ÙÓ,>‰QÅóc‚?†õ7´òóaØÈÝ|ø ½4k¡è½Šƒ+!VnŸ7†r/î@WÜ.^î¹Äôù,¹ã=ôÒ‰û.ØŽïÙãž¾È^}›Cûœ Ä!9tŸÎÁÅâ¦kË«¿*Œ†ö–í¤D‰&ÈZVõ—-º]{Æ )ñÓ²`”θšµTС‹˜û¼‘e¨"|”V_i&ZñQ@G~§QÅüþÊŒS¿ò%åÐÒúÐd7Ûè{Ë]ìf!·uª[n¯žÆ½xi»8¹`–Ͷsã)5o<‡ZN. êCÕ¤zž._1åÊúþÄ"J>þzWqQ²&{+åö#ã›æóõ/"ï>´èŸÏVàÅ][‹†u^´§œ›I]gª&5}èͯ¦¢4Ò˜Z37»(:¦cq o”ˆµú5•Éß×ÞJ¢èìøBFá5%ÂÁ9as–¤, "«„RP«`r¹îÆ@[؃õeо É%#Zê;-Ž9OI7N÷¢!Ó+oé¹[È"à3Á¯dxÃcïr´³`·‡ƒJ>“¾!ö5ªP׿fzÑ9%.ØÑžÀFRÚk ‰lÅ[•W ó>¦9ñQ•hÜD]^&Ž!žJ ¼&m€^ßîâ$ºk·vèêú–7‘Nà ‰=ñ(÷Yªn±š‰Ü:J3ùñnÖ“nˆ\õ ŸjGÁÙŒÓ3ãÃF•àÔè¦qÏ`ä)%WU§9ÇD3N“Ñ0XȨá‹ß\ùV:G–Â’Îû6KÝN ãHЏl#G÷xÚ¥žGÏxW?—¡_Î4(½7IOS–÷ d¶ÄA,arI+rà]—$@Íöæ}A/Ü÷a&†šÕê¡Ãœaš=g÷ª¦möÀÐNÒµÓášÃ†ÝÔ´j¯ãŒ\z¦«‚«|d ±EXáCô" °Y«ó´*òj¤D(Ò®aßotžlc,²È´ÿ…D¡OÕr8ÜŸþtÇuާ]>:±Æ;Úp¿»C÷U41bÝsayûžŸ˜ìç=Ëóräž µ:€6jE¬âÌ·¾k‰qOò$kE{è3á“¥¥qú:Ã9ƒƒ¿EÍÿ\·YË5Åw£äٜߠ®¾³ÚZ‡{þf³«èTƒ'â•S4&öìï]Œ#èõóIžš¤Y¾¢Øô+Y*_vXFO•¹<NÕ˜ÿ¡^òþÉç™ÕeSý^wdQÌ|j_¶~åð´îº¿›@7”¸U±ôKhGÁÌB¼z¨WFߪ樔¿rH©~âBШBñ@kCLý‰rÐíüóç²€ö^ûþµ]¶¤Ìïs©Ù¼ N[äiÏ}‘ó \»ŸḴ¥Í´éajeç™þUJÒ'{´0˜ñxÏÔ€/˜te]Š—zÛ%ƒªFž‘jœ(0`Õ.Ë|qIºaË–gÊ0z;¦l(½ÿ›ØGLðx˜øåUú/W<§UM¡,wŽgjÖ÷Ù®1ä)Ôº}ËÒ•¼úàÅáîéãÑG­¿¹¢“À¢{ÅÒ ¶ÈÛyÒ9`Ö/Þ*A kàoŸ¢öès%Þ7ßݬ¯¯T»:±¯Deü,¨:kab¯Ìüý3‚?ÍØ-–WÐå¿2%z(?Wiž)X;cêQcçÞTÊþèÔT¤rDdKˆ;‰E HOsh`Dz·1Ùæ¶AðÄ5Dp“¼Ï¹“”r/p¦1"¾pñ4ß@]æ³ø}ÿJúØÛ’çr©ƒ÷Þ\‘ò Ä@»*¥S®3°pS¬é}½ïË›úÖ[7±ºwŸLŽŒmðø¡$š ‰ÝB~±ìv>ÿ]7¸,uGZÀJ írtÆ9éy/œ–lþéðbX1Õ{Þú–2Ê,*«_DÊBßZÙsVmÍQ&z´œOÊ@ä -Èû*GN+Î -Z¹fâè­_‘Ô#9¨Ô(2¯{x%i„_„Êo¶[ÒÍpÐ[¦žîšÌÌÀ¹ £Ë‘9loI‡¡ÜÔ•Ârß?N¥ò¿Æ>YÁÈ:í­> `:#0ßr ¯‰¬Qvv¦—¦5{ú•—¿­nœù–ÀØ×oo~<ÐÊX§ó³•yá˜%> -ôN¶Ï$ NÈû(ò¥f:æš5¿$Ñ ®RhG×ä¯0–kåùîp Y1™O°» ÙB]šÙGe –å8/²¬Ô#°ùµ«µ¤Ï-³¾-¸ñÂĤ n‹çŽl€Ýíª‹²3…k­ß­Î».^/kÈøÆoñ£çÄs¶FºN»ô,õ¬0šï×¹±BMºº#Cò9ü)±Ò ù½lÌ%3 .Z‡L0¶MÛºÊd¶¹}X¯`]Õ ãW…hdzh1òMÝ…ŒåÛéVVT³W{ö†¥]·¿Gh†¸ôGI ‘ ¨Çý`ø éå ±Ï® ¿5Û nÖÕÁzÓ’ªÏQî8±‘ÛVm£Å}.µ¡¨™)²˜++ XFúSö¡v¯â›ãK“.!Ìì¥2ñ5»jÃøƒ5Ýfý"”ä€Ò§˜úü°c_c³€“ŽP[¯CP…ÆhàË Ð lYK_&S_ˆª ˆC†fƒ28ÊM•yêõc7â·K–ç§z›G1 ¦‘AäÆO43ãC¬ùvjjR£ wòÛU—Ð xæ_`ͬQŠLMË‹ƒLû½;Ζ_òägyóHͤœf—UP•‘ åD8$¬–E¶r°ÇÏ?Kþd"l¾GåKG;‰¶™UIYµ¡z£’oííËÌ639}W’¥Êн5U*ÚO©MýŠÓñÓ¯œÍfC}mHªýØX¶Ç(Õzø¡ß¼;½Ùƒ%º³„ÅZ,ÐWÞ]Ä L{Ìsð©]õVÍvÿk±¶¨ÊÑl•‘ÑM«9nC¡!9)Î]® cÞøY"ƒ°‘|§½@”êw'š‘5Í”nïL‰¼å iž)G¶¥`ºCæ/å‡À´ ¿`ƒ®Ý-Ô´S3£#ä¥ó~Ÿ´LÂpêf­?IôZã©÷ë-×!«Ü”B•l™ç¦óŽyõ=oI¼_,qµ1Ò0Ëy¨ù$ùÆP‡u¨­=þè#é\“²â€mr[Ý_‡&–óö±eñ«·ÌÊù׍“í­ûm]ñ€¯²ñ°îèOVµB%¢$ì]/r•²üðj÷Iu]eË Ún'W:Þ=Ž——¨gÐVuzƒ£`’þŽÝÁû„è>¤ 1Q‡fÌ2ùg9ò«×|öû¡Òð¬:[TÑl?/§À¦ ²¡óÐ_ʆ®õÊKxa€ôõê¤ý˜fU¹ñE³]|ò³—6^¹çë×Èbäß0­œfnd/QÔÆ0}§<ôz†ØŒºñzhϬV–` pïÝ+žs‚2Ý‹rr3ˆ@5-í9¥©f=±lt1u˜¹Kâ9ß;Kš<6dk­L4@¢kzO&j ar“cûÀº!!õ¡o«£'/X ˜À1´ËÊàrç°cýàDûƱC¢ è×Ü&W7~÷,ïT´s¬±/jöˆ‰;‘ÿ ÛFn$d·Á¾=$Óoºœ“ŒŽm™®É:ï᜴ùúðÛżÊõQi‘ÅtåBzZ’ gËË«™FÛÌ ºÂ_@ÃÂØzÔNü³âZOF¥ÒJ*ÄÖ7e‚Ý4d¨o¢Å¿“])€ÒÂ_n3\«fMd ų}’÷£V(‰ãªàË S[hÊN £õ·ßƒM¿ÕœÁÑÕ¿Žà4ãlK=E‘õùOÎQ8uN/ÁN®8mÕ‘eVWÙmæ:)uˆØ¯$]^*UŽ{ÀOø½ÕqY#Áç‹KçtÀÄ—By6Ç¡LW[v€9KœÅ÷²l-ñ T%#ž£ì^¿#yúµMè0.¸ï™üÃG™WøývâºN}MX1…}ëhãÃk$¹Þ=EÝ)yñ|㣵ä¶©Î £0œtž-ÌÑè’ÅW¿½S:9?éÄÐÜVf-ÕJÄ´ÆÆÓ “êÛ)Eãšý/ÍöŒñ«ïIGö_ÜìßÏ ÿNÖÜ(ßéÄeÙÄ.Õó˜aèM¨Hw¿¬bƒ±áór¹sçIš=laÌ—|ª‹‰x+ÃPXìÈüs|«¬ºËL r’?üyñòpÝõdénЛÅ2…ScíËþñä4 ߆Πq¼N8±gï¸VŠTí}4{cÜŸR`'ß#‘Nð Gl4*`ÉÐ ËL”ß׈øî¼|÷ØÆ› u^L·±äˆåå³1Œ štR©þQ:‚©$= uÏGB(–ËlXªîÆ-´Ë·dÌtœÿÜ[6TÅúÆòéÊÐ5³¨œwfs4CLrŸ|µ†‚S«¯ÓÞÄÓ:Wy:`"D|»3œh–´ŒVCH@±b&þ[¨}2íOä“G¶½ôñÉÕ‹¦†Õ(,Û“ÌlŒ÷GÒ0I’m;d“w=ùøÅWp š/¯øÝ‚êo½œíÌ Ñ“žÛi mÙ4½i:¹/ç/ j;?^C\åw}ào|w Š;¢î#å8—Úxbßz@»°h@MžÄ!wÐï1¨)d¤]5½SRŠžÛ~JR—÷ªGnO™ç¨%£Ó¼Ý©ñó­"M6ÈxÿEõæ%—´õÝãüîhdiË醤°Oãµ´óÅ‹g2Õy"gE¤­¥êx\(¹eø³UæœiV‹Ä›tî÷M ©< ž×Î66‹²:fî;ÖÀ“ˆü ËÄWÑb/ÄKj‘‘¾J/NX§X*šI.Õ¬krZÜ;jIÞŠÈ.³ñ-{& H¹ªåM>Ø×85išûÆ‘»·‰L&É7Ü@¯ã w—‘ÌÐùªÇWÏ+éiwТA* à´—p#CÁˆ'ëɤǓìÔhomšõ²çOõærWÊî|ŒÕñ»pFmgZJ‚Y=«:{¶ÖbÔû”4™¾‰fóîõ Ø÷†d‹a–µ‡OQ1s8¼‚6Ÿ.Ïâ#=”,ÁÊÛauBé=^nÕ½‚“J9YòâUmUóö,ks*K4—e?¦¹`)’å\%µÖrúÏ6j¬x¾ðïjK+Ìð«¬0ŒS,N¼ïp³ÚÝ~Á›¯¦RïY)Ý=uÌ•àyžÝýVl§At tŽ7eí=zhöáômƒÝiò@›¾òG]Žj–ÑRœÊö+QQÑ’• Ü饿;?ø¾Êãðr¥<`ú¦Ü»‘øry5ª—Ïêê§dj>IÙwÙÅ㤶µ?áKóhæ²¾§WÞQ¡¼‰¤ÅœDfór1\ƒÞK¼Ì 6î?Ë/Ä<ô¹Œ´–À9¼eÒ8“a3›Tj’­$Ó#•°DÇ?¢p:;Í>õ zŸÈnÚ,¤%R\K†ÿºÒðC¼í­öøë Ï=wIWUܽ*ÓZ_Ôkû0պͥJ>—+™ÔYt~T& ç™J#¾ÊPõD÷…©´Rqû¢¸ùðPÖMYXù©ãºכ̴̞ ïù€X…ásiÉŒŒªë[#M¸.ÞÙÙá‚ï[ ${æ2e8T<^,p¹xÁ‹^ûÚ“¢;c[Ë5ë”Ü^A«­Ï3nH…+=ÿ8‘çV,BþiÍÑ<kâU§·L¨Vñ°¥`?\s*¶ âguA¨ÔT›äö¹«V¾°Ô'±Ò9TàÐñT—/þzÁ:C^KŽòï á†Ôê-=ëc™­Öç†ÙZûR¨-xlS(6Ðv˜ß dÒ¦ß>vk\Þo†@&䢾êŽ_æô¡ßX×gõÉÖý¨hïn7ÖsÎ|áøÝVw2p²íÕ‡žÍÖÙäq†µ€ðVã³³ä»o´7 ï$^~—ùL& :(ã)m×±'àY/_¶ÌÛu†bùÕ³BÞë®$†Y¯0÷J‹n·>¸íqê7â¬D)É÷‚©PÉ€“:DôsrÊ4eÀXÃ\›‰íú1xê{tŸòTç¢l‡BÐ÷çë+û´«ž\Ô(šW/ãT‰Ïçbí_Ǭ‰ãž÷ƒÈ ãx#uæ´£Ó'@tŸ‹‹r¤ÕúŽ–ÂÅ«ºJ¹Èd+67ô¯ Ô÷×”%tn3wç:¥ÁLuVS†·½—Ûµ ±—Ïì›cR šæp XêNFDŠ8²”t[<q^õØVJ}DóÊ•ö«di£··œn@(ÊàÌÍÒNѾm’÷°·&·t‡Š.F5v¾†ÿÔlÞW‘‚%*ÐPF(eT§ÍWëÔ)”=Ã8, zŒû¦ßb„ÝÊÇ<¿¦§3BAyç:œÃÄó»¾ræDöV]zö¬mèæVÞZØþC}ÎY’Á oÕOiŠc‹Æú8iövÒú£3Wvä­Î# ºô! Ï…XÐ9ÀÂåÌñ6Ⱦ…‡Ý„0ê*HˆÙXô¨h‰êô†¥¦î3^g;j\$ªU†äL,Ž”ðð ÎF“îR¯Øãưü(ÐÔʤkã³ÿþ&¸š endstream endobj 168 0 obj << /Type /FontDescriptor /FontName /PXFSNJ+CMMI9 /Flags 4 /FontBBox [-29 -250 1075 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 74 /XHeight 431 /CharSet (/k) /FontFile 167 0 R >> endobj 169 0 obj << /Length1 2679 /Length2 23466 /Length3 0 /Length 24977 /Filter /FlateDecode >> stream xÚŒ÷PXÓ ã.‚ÜÝÝÝ=¸îî. 48î ÁÝÝÝ]‚Ûìî»É~ÿ_uoQó´>}ºûœœXI•^ØÔÞ(aoçBÏÌÀÄ•Waf01±201± “«YºØÿ#kœ-ííxþ0u¹€dbF. ;y{;€Œ« €™ÀÌÁÃÌÉÃÄ`abâþŸ¡½@ÌÈÍÒ ϱ·:#‹Ú;x:Yš[¸€Òüï#€Ê„ÀÌÍÍI÷—;@Øèdibd7r±Ú‚2šÙTíM,.žÿ AÅgáââÀÃÈèîîÎ`dëÌ`ïd.@Mp·t±¨Nn@SÀ¯‚ F¶À¿+c@ ¨YX:ÿ-Wµ7sq7r@K 3ÈÃÕÎè%¨JË€vËým@øçlÌ Ìÿ†ûÇûW K»¿œLLìmŒì<-íÌf–6@€¢„ƒ‹‡ ÀÈÎô—¡‘³=ÈßÈÍÈÒÆÈdðs#€„°2ÀTà?å9›8Y:¸838[Úü*‘ñWÐ)‹Û™ŠÚÛÚí\œ~ñ³tš€ŽÝ“ñïÎZÛÙ»ÛyÿÌ,íLÍ~aêêÀ¨ngéè ”ûÇ$Bø-3ºØ™˜˜8¹Y@GÐÃÄ‚ñWx5Oà_Jæ_bP¾Þö3P@_K3 è‚·³‘àâä ôõþSñ_„ÀÌ 0µ4qÍ-í~G‰fcPó,=:L Ùc0ýúù÷“h¼Lííl<›ÿÕ_Fy yEYÚ¿+þW'"bïð¦gcг°3˜ 'èƒïÃü{ÿ+þ/©’‘å?äþˆ(mgfàþ»Ðáý¯·Ƃꟕ¡ü7ƒ‚=h–ªß£¯ËÄÎdúÅüÿyþrùÿ7÷¿¢ü¿þÿ%$ájcó—šê/ýÿÚÈÖÒÆóÐ(»º€ÖBÞ´vÿ×Tø÷*ËM-]mÿ¯VÚÅ´Âvæ6ÿ£¥³„¥ÐTÉÒÅÄâïú_@ám,í€JöΖ¿.=¨aÿGZ8kÐ…â êÕ_* hŸþ›RÜÎÄÞô×â±°sŒœœŒ<@­!v€73hCM6€‘ÁÎÞä•ç 0³wBøÕQv£ð/Ñ߈4[¿'€Qô7â0ŠýFÜFñ'€Qâ7b0JþF,F©ßˆÀ(ý±e~#ÙßÄEî7q‘ÿ@\~#ň‹Òoâ¢ü¸¨üF .ª¿ˆ‹Úoâ¢þ¸hüF .š¿ˆËûßÄEë_Ä ²4ú±²9ƒfËÒÙú· ÈÝø7Ñ5v22±‚ž(3—ßrÖå/Ô¿ P>“;(˜‰½ h˜þÍÉöKbkû›Å¯)c4ý‚RGU üOŽ_zGWÐfþ+”‘­)èVý#¨>³ßägödû-ã_Æ¿!;ë/èö‘_z{W§?ƒLÌÿ€ €¿ëõËÂÓÁø'ì„L Ò¬þ€ ÞXÿAGgó«íµ€Jþ™äjZÏ?ô bí“9ÛÿG *Æá·ÌôÛý§ÅlÌÿHÿÛ`VP. èÍýÔã/™¥ýï6²ÇÁÆÕùœ ‰ãn}ç_7ͺÆÊýKaÿk*ÿLËü«_>3è,g99m-ÿ;kì¿l€n´€ÄôºýËTŒ³‘³ÅAµüN z ],œ€Ìè°\ÜíÿpÅpý‚úæö1sÿcÈ@Þ@PxÏ? èP¼~“Eò:ýê?—¬‰«¨/.=ƒ øø¯¯:@ ÐaaÖÞ„7Ī&¤õ®Jø;ýÎ(ÿùŽf 5½÷‚ÓwרÏÔ•AkN7Ÿ:ß,o‰S] -={5ÕÁ†7'(·<ú<Ä©Lì´ ÌcõŽå ×öÀãÓ« íú<;úhZC6ÿ!ÏvtåBQÊŸsï–ô¨í)Y›ÝQÞ­äE|*™¤VÒ ü:Mžcœ9ƒCãBOGƒ~î:}}3…þeì•H&ŽÁ÷8šµÀ[{åÓýŒ×J™‹s;.®6ä5úð…·È~’ öœwQÁrï¼G_Ñdºäeú7 û,é•–*‘v ]Õnà mÌÛÙŸ!”ïz1¶ª‹Þ8‘(bV¶Db¸T³Z öÛÌDVZo4:̬’ñ¹'k_ÓÈZGÞuŽ+ƒ½ô·aÉÍw ƒ[¾š_{ñÍÝ™iÄ-t"–—xÒ ’¡K\F Ú5ÒoßÐ-º}æz‚6 åóºyÀcÞÌgbÒæ‚îÆ?eÏö¹øä[^®Ð¶>6g㎮üÌ¡ðjü#ùü<ׂUÜ0#Œ*']¼ãcÎj ¥2o °~:¸„ñ|½‹A¬Ø“H.~“}þ¢¬€MZ²kg®b B7ÈÓêž;áT£\½%–=O™xû8’~d¿>°_$8´›ûÆtó¦´TDóÀ^ãþ¼ÜýƒÈÀ§ 5Μm*_ÚS%…#! o·fºàIOÔD܈mbP5Õø¶FÚ ŸÜéJ¤ÅÈ) ä{døÂ}ôæÅ ºp«„°>^7°Ô|W¼£CÊx³ò‰q|þ2é!™£l×Wú.-wÛ²’|61‹xnAŽ »Z'+ íçV?5q”Yèû 8“}´H8°-¾Ê·ý51I*J¬â9Ä!ô<Õh”hë/ãÂ(2¨• Ð Ý5¢2£`2.%`]Þœ0±Õ¤ã]ãíG3³R3ï®"‹Q$æÌÝI$ØcÜ/T?ùT¾Ú+óî&#"Nú}ãË$df*öK}åk9°=«k¸ŸÏX°8_ÍY+?€«¯¯ªJÀ5¼âL:ÂB4ΆÖùÜvÅå¡ÄÇÆÚÁ¨¹OØm%Ë6UÐmLÏ]T¼™*Ðdñ Úçr$–3¬Øzgä·Í¬ÁÕ/Â/Týóᄘ)¾C+ÇÞëžìä~ü¶/€¼»üÇĦûÆê‹ž}I× ÂàYPÚbÕu?GÄöT›§žn>É®¸ß“ã6¨}q@ \‚#gÇ®zéNQL4UU™%éuWÄ}ˆÃßO¿M5üÜ*ýd¡ðP7ë½­ˆ@Ia†”s3™±Å„¶¬/l§è'‘?>´íjМ +ÇÉ/·]6&gZH¦y0L;‚íÎIXK`4»îÊ´ùN®$Î’ÃC¨!L­*"ǸËW‚uÊŽQ"š%œ·v›iÃ[á=ÔŽHEÚ<ÿÚN&ž.,,„Ë[eÞ>­£[ ›jÛ@óÂXøÅ_ÖÇ^Ñcv*Ymí?î;²ç¶üþ+G@ivµþ÷[#—,"8!Eæ£ÆL0‰ ¢Äo¬ž„¤©[&¨òòsã’=ÚÏ+:¶e¯Í^cQþ0ðè6%÷¥$2@¨y ‘M|ß= êX¨eÕþ%K\ºœ³ÀÕ¯g*èXXß[$¢û K¾+e2ì—ƒšð¸ƒ*Ä1Ð}¯ñ »ïê§rv%²šÒëµ[pö=p.Þáe/ØÉß"á¡1Áë"6$ÊÖÆî¨|;k d†ÍÁŠ'µ¦dä6á…«>‚iPõeäm¯v)3!MÉv_4zeŒ¡—8!Fä–»)ˆµEÊKrr“IËY¾P$Ï›¿Û°³áð—‘P¬¿ä“…ß9RÉWü$,Œ3è–à¿:i“K±W§µ3WG¹0 ¦¹8¾LÑžË( xÁÅLc´„·\˜t…7ÎÂëEàêëö–*˜ù ŽàÉp©“íÑ´¹âÂ,ìZ^’‰ä <ƠÖ§:ÏbìžHkp)Î?UâáXà‹ ×¬ ö¤úm—òÒr:èæ»{à¢kmJ"诰‹WŒ,ï'`¢ã1XnJ’¬¿Ý8? "F²iÀ˜8e6\ære¸r¥=ÝZ y¸à=§ó÷¨› G°o©\Ëö€ìgJqB›íÇE×d–ð;ÞO^˜¿ØÆE×{hx^×/¢Md’è‘zùá$up»ì@Î$‹K½™ï)bpáþH†iר%Z.ÊüÐíRb*Dz[Ä6n­>)[ž=Å›×~8`(ñ@ƒ8¥pQλ¾Q`úRÖùx_þæi¦5‚¯·0çóVFF ¤s{!7_½d ²¨¸a¨ÆA®Åú÷nrLå„Q‰{¥ïÝ›hÁþd%±ßI&XY[o•¸ç¸µ£¹ÃÁ) ·Ê ‘5ïy Žû§®ûˆ„`Ì‚‘2ô 4WB)XØÜÑ‹m¼wɦY4Ï0jÜWB{¹_óvH ¿` ŽhvÑH ë­0z–D)WÃHÔUþÜùN‚¦dÙR ë"z__pcj'oœ¦J®V«Ð,ËS G«’:{¬ãTþÔ¯u݃q¢åôm­žÇG*ˆ¼× Wzø‰0*®.ž{|õu>%Ü>ƒ*EYS/®­,4Š*½°îBž·ýš”Ñ®SDÍÙMÑö”m1j—‰T{ E9½dÔùM­ë‚ò½“ÿôZ*£ÝgH¹,D8ª$!„š½ì¡ñ4„òzoY‰úµ¥s}ëtãÕN»C?¬C¹Ê<=¸%£|õð¦ï§èn›grkËÍ»¹l ?™SÈü1œl…_O?¿í콺´Ó^ƒ¤Imá/¾t¾>·Ok,äç9‹G,*JémÇ é¯ýíøŒp— ÛqÝØ!ÔÜY)Å”Œ~B÷¦rt:BŽÏáz#ª ’O“_z×þÃ@wÒ7Z³Ñ>/Ï"·`¢ ƒ¯ŠÁð/a?Yݦ[á` ¯Z¯ç»ރåsáÎäÛ"$-…㘻/Ã"ÀÝqîHÀk yªêù]„~H-¿·±™=(K€'JÊt#fºßoˆH BZY{8-_3Òùdv§äÁ šés«ùTÇ»$I8ûö «ÈOö…«§Ý» )]’©R˜;æ¤ÑÔv…;îN™‘ç«zgFÈÓˆoæT?‹=0•éP\t*6¹F${yˆTȸõ8ÞR|x°õ¬ ¶¬Çp8°ê¼Ñ,Š”ëVÑ'P1²ùqäQk=§•ÉSÃ.ÿµjm÷téíY,Ƨ–rÔúwþEŒVù¡ë= 9ľ«†‰§Gbšøý%Û³Êï›È`¤Ö¾î¡»Hç—·Âû÷Ï0,há_ÍÛa–:%½1øyl·Ø ‡Ü¦ø´å"¬M/‡l—™,m°Š¥oºdþ6¾Þ/ «7†7Ú°jü¤HV$|õœØý­c™¨2®A qßæ‡²C\^i®ÿu{Ø·Ìûú‚KÆh^XU\J$ý¦kžm(™j+¡Ã·¥µÁâTL’ƒ¼£Í˜KÊŽŸŠû­Õ(›Î³ÞðfñÅ:¾³›ßv t±‘eNxß `ÁKFpŒ›ëvœ,ÜŽ÷bU¥mÇÏSbîò#@¨²Œ ²–Ê$É/†|¶¡º˜ª'ƒ#l(ï0Ú:(°Ër‚k>#|¨»–æW"¤’Ê×µ›¦*Ù\£Õ}ôtïuý,‚y«˜ JÒú||vO< . 7­µS4õW–|ߤ@¼²ñ˜ð1_daXZï]€* ó-€ôjªÍeXG9L΢D‹~'ÈOÕéÅÓˆ ¯¤%Y<3ÎKÈ ¯U<­†*Ä¿²6A…‡p—'€˜ÙÜ0 &ežûfËÓ 3Èc9 a—¡S`q|¶²2gÌ:¹bѦ›—"©’”oo1­êKm6±-á•nØÐ× ˜»%m&¤*E‘Ä÷ Ý t³ãÂÌ”Â×ÝÒ¨.aí¹2*&öôlÝ⹘¢}›eBœçqd<&ÿ2ûqƒÑÌ—u-)ýh¨°o‹D²8 ­|ÒLÞyvšè½¦ú³ïÓM}C£Vw}´>bÀô¹ÕH±TÛY¤¢Ô+ÜÀÈ'"ƒûo‘¼ûá5£—þq›2n9(5zˤd °%¨K”¢‚ì©|!ª8Ï-'CUB å8™ðiFeuôoS…ýM"Âlì5Áëä©.c`œÀ¾’.ÎÛiy[-²úØ@¸T6SJÛd?û¯WïÔ=å\O)u{'æÂˆW¦œñ:íë#Î[)ZCf6œ¦o9Ü= •s¹z.“9]&­\}vE0ó5qì¢eïðô#~^Ñ›É|xw×~Œ¢NWÞæ’M½kÉ#u™Ý¦Ú½DUaT < Ðh{q‡Á(sÝ_聯äù°qÑ휚.¥­K£~â6ßFˆ<îµ¥³>$íI  ¶Ùø•§âýѺ`«í[™ø;,ú)Ö[Ë­9)¡åØ@³±àgëF†£ôëg7Ê€>[tÊÕ­N±–áÏ'"ά\$­ëYÑÚòÛƒzýo•’®ì’é°wõ Ì…¨.ŒQÓˆ/ëÑÛçël«™Ëí><Š ø:ÀÐîš•˜s[<õ€ë ÉßÎëO6IÊÞð²—Âä»÷µ@mK;9ž ±š ­i¡Yº–t®lw]~Ÿ8;žD×rzs@ v}ýhJ«R¹HvAC:¢/‰¥{K½ÙlT’?Ðl±9Æ­3ýÕõNu‡[67­[M¶Øè=Ù¶»ù@Â7Å`MÈwŽ}ÁyžPÒTI¯­VoØå¾–H·›ÔûúX¶“Åy‰mb¨uƺ·hEÓ~.Óæ=ÛëËïÉ`þqYoã¿l×nèz'çUvL„9»üa¿.­W‘ãÝ)c–çÄ£¡Ñyza?r„NåhÄÃɶañ¬¼Nw¼èc#ÂwH9^»–—rF!Øè¾VƒU{By;¾=þ¨»gšß aSwìÂ?¥0ÙÑ x£TÚj{]E~DhÜã:!r —› èÏ{„<“5Ö‘w&åž®üp.lvjéÕ×}úH9û¬<¸Q¤`lJ»ÔÚ¶’eO½ðU¾ÕkâÊüÐ|ÄhûS¬kDöD*_Æûϕƒ²qˆšVˆ~ó›W6Á÷,z±lERi#¹és—iúãŽr@ûšŒõ“+?¤Û‚øøqNcêÞü«T)»Ø,ˆæ¢raN’o±0>F—gùž¾Ÿ÷Î;…ÖÜÒïÆ›ågL@n¾Ž=?Òb,¾?þšô¦Ÿápƒ¸}¼‹„FfI•¥}Q‹°úÌj ™€brAx_‰¶t÷æ8ôEtþë$…œ2·U<5-´¤K8rɯl£_O÷ÓÁÆ(oŽo»îý%°M5$åféh÷°œ1Ë$_ò×õ‹뺠nÀ-¢zPËîïµ Ë¼BÄŠ]„Xoèié_öåç…¬¨ù4- ·å[?¼Îå¼úm×O4Ädf|’››ß£úN|uŠèÇîUëîßG4Ãy†HÉ‹OTòå…Ž ™j•½™"SËn@‘¸}ÐÝÃ{¾ÕŸN€$ÀƒDäM…o÷9Tˆév!K¹Ns¼*÷<§Pf*³öóz6~"b½"Ræ)±2F;Y"ot‘‰ƒeÌQ|=Í pÒX ìÄõЫj‚i Þ<ûÒQ¯`“yÉnßöFg/g\‚÷ E%†eq„nµ‚r‡ô¥ÔôÈÏq¢vA5ž¡y‰3ì=…WDXÕ÷+LÕ|eÔ-ëš³0ßÙÌš$Ä,b–ækÕ ¨õU¡'è CíÜ}Ÿé?h+4ŠcŽ‹‚ÿ¬¼EÔBŒVÖ{uNßœ³¶Nê"|›w9yyÑÚ`7ŒÁ–ð3H÷舆TÏò‰¤|_ß")„ª>û†CQ—(5doùFà‰g@Ãàb@`¦›FšÉkª^—Ä{îŒU}Ñ«÷bÀu["à rx!?ôZi­hZ<öjГzAƃ;uŹ9FĦã4Ϻ©iASå2æ XÇ>Ä‚ŒVg{dú&¡xYHIΘ-’råñpˆÝ’‡€ö¥—³Oho^·ÜL*FDO€YÉŒmë×NaÖ³˜ÙsUD–n~ܸYZÓ†ù„'™ ÝåZ,ÂrüK,“ãEœ€§{T˜!—6+æ‰Þtá=§—ÌŠö‰ŠÜa·N:Y"pøËºÐ±Ï«±±)OéÊ!u:Ë«|êïyð¡‚—MhoÈ׫áOZ–ETÙ¹Ãî‚;jÁ£K²Hºf»3jÍ÷ÕZW¶õ‹5{à`–¨jhÈQî0ewûÔ˜Q [¡úoˆÊ»´¼ ø Â(°’y…M¥Eß2~ôE ·€sxéÙ\¢?GdȲáÑŒÊÒãέh¨î(EŽT—HRwcu/?`׎O‹Ÿ±ÌK)qv`WžhmkÐ×H  ‹ËÇÍé¥õ‹|ÜüB†¦wÁBΧܴ»é· i¡¿A¸u0|\åŸ×GºØçmZèà>Bfù`yHdÇí”0¢îmç5äË¡ªwůd°u‚ø±^ Ъ¬æ \  ¢ó5âVÑ>ÿYS‘£„Á´w£Oˆxo.y_X¯{O±bY´—Üeyx6´…zW•¶Q³Y§#€|„d=*%Bj<Å„@ä'y(Îû©„°?J!yR¢³ýç¶©ýݽEؼ'¸hƒ«²ÝæÂpÀ6Ý0Š…–(2ü·ž/`–_|^^®€uÎüì’x¢ÝeμM´¦ðÌáý×Z¹ÐZ輌…“ÐRøúÓ& ý¶‰P¨ä0 ȯ$uÇXŠÇíj»þšÏÅó¶$Àba±” àâ·åZflM9Ñ¢¢qÇæµïRŒ±Âà4sà®’åFv)T A›ˆ"nûGÌ9)º¦u(Â_­¡ö FŸ¡¢5´¿-fÒl¶ð–û¸{ôðR„y••ËÆÞ#Ÿ}çžy =ÌéaEÂoèFrºgºP™9ç†Ad„ð¹·ùvqp™å¹0 ²Ê¶CÞ³N–8ÅÐä? xmjpJ¾É3ôä!Ìb¦°_%¥½n µ_­Q›pǘŽÍ>µŠ”^ÈaÕúìà'=€êÔÔ“Èyn›˜«ð!¦¢õV¾aHÜ[ù]õ3ôT®JÌ$áp?š F¢$ý¡eÃbgPUæ¶ëñxþP´1ÊÛç˜ÊIVÞ42§<¥&µAÏ“ª~NIë§»jAkºß P2‘¡×äÄ&ù`|Þ>Ȫ±Tžq4E›>’í4óâ >+=ßå9*¥„êræ¼ø]}Qö²eô·Ê¾hy×nÞÚ]œÃÇ¡xïp@U¥wøî]Ë9Ù÷oHjrÒ«äå“ãWi|¬ï|7%|ᒹ柚'¼«ls©’¸‰í?¶¼£êiå+…µÜf¦>­#¨-zk]#=¦ ÜŒÀï3];FÓÉÓbmçG+âí€WUÑŸœ¡C.ŸÝ#˜ý®u\L*()5”?¬t‡A ³átE®·Se?AË« XÚbÂü=åŽã OÃXœÖ@tåXBAëB³4k¥Fw;üw¶Š¾£8ãþ¹»r¨Üf*j£O4‚)EÁ:ŠƒH$ÞH¾/›ﻟóI‹ÿ&mŒ¢¤ëtCóÆ–+Iñ»§¶ìµñ*þçO§Ê¦`ð?ÄNƒi1ÏCW‹\_ëܺ[áOpi[ãä…Cï¦cèñ= .xÛ`_¢ú7¨”ó|ì¤7œ³óÒ$qí¡hÂÏzJV$KúÏ‚0º‰ª¿«5Q̪; )ÒååFSQ¸Â±?k®ÞŸ¼Ñš®ç™e©¦~¦bú„i‹ƒoÕZ§¯"µ|Q_Ë·t¡ýÞV§ƒªïó'Oêý‡|JòGÏÂ4ÍÌlªiëùÂ~,…™¤¤Ã·l.a²š”g7ì߆yôŒË4QQµëÖö=C½­¹÷–Œçß´Ç÷Z9å°ïÕX[ÀkE~\R§ê{ÙHÑ~™é™Øl]‡ð”vßšARU|ð5àœsRÇõ’Åpåsß(Süd„ôƒ‘:ÉÃEGÁFÆ ¦_ÁŠ!«ÞYŸº’FýYA§/ˆlœ¢>©û±Ì)L*WxÄd[üÀ[·K|u’o£ë¾—Åøök¤Šd46ÛabýÇÑäý´&ßtH–Š«FþLí4ñ²¤Îïø‚q©Ë?­:UÄÊì5³-;Wü ýù}k8•˜Wê^8=•ÍFaŠß•»J®PÑÕÕñ"“=¤wÏdrÞ$àÛpb}Û¾&¬oÒb›’}}ëFrVÚR*æÜ çö°Ä ¸ ?{ªIÒg¡eåŸV/™X¯¦“ïBW‚.>®Ë3ÁNAF™o\ðïñ7³ZèÁsìõ!óôDÔä¨Ïؾ÷›ÿ* ë“D€‹ÍÛQf&P¶_ž´CéÜsàÏ|azD›Rm-ÔFþ’~‹¥‚s>€¤^»Ð¦ÊÕÌž*ä&GG/ (›Óð5v‘9ºO¡ÍgLT9 (ÚµTÐàRôr CñØÉNO¿æ¡º)xÿ¢1­ÿÀMìýO¡}” ‹Ô¼ÆCY]ζaù;YgŒ´¤õ¤mèÇüÕ¦šÒ½o÷†É„?j1r·5>î"ÂG-T¢.÷=Üø˜;{êQ8(œÕמdHõ<×¹ä]´ =áϲ1–¿`_µ%çrì}ìƒëu-qûzá »6xpuÝëÏÃFƒñÑìo<“Ö—¦ÏbKx†8ïµÓ¶¹S}[JƒnË|Á²G~¶Çxˆ·yNJ³š]#³Þ7ûºíãõ¢PåÛt‘£S¬ ê•3µ9 w`†j+Q¦Ý÷bùX„sÁ²„ÎYÕ #Çz6ŒÇ+>°Lê%û÷A( C¾j£´Ûˆ/ø.`O”ëÍ+ÎcKð¬h÷rÏÖÅÓo=´É~œÝñ,Õt”öR9ZKÇóÕ[]|m?Ap·òië>˜ç±æÎñ~n×…A\E«é ˆÝÔ.D‰ mä¯WÙ ô}nˆ}N®‚?V{¢K¥Ó§H˜AŠ…ëþH£RM¶&òŒ«Å£¤×¼“.-:ã¾ÏB¿Çgi¨Z¼ÈPÑéÕè#dÞ¡Ö¦ž ßÕILÓ‰IfWpó5üœä Á6ŒP¡²ƒòÃz6¯jÊ ä³Ó1ÒJÈ\g`µr߯eBf9¾®¤»ö^Ø–cq¿Lµò"uÆê Ëö:‹ä"„0Uý7ŒtîÖ(bTÕÌ‚V˘ác¨´&íIÁ²‰™1±å-¨ˆ´~êI·*W+@e|ž¥ø¸]‰™'« À'/ë y?OÎ-_‹Ðn…3µl±Á.HMF>¡¡J|·‹¬§°y¿Úƒ[‘oÝz`êíHoù5·.nÖIÛõ1ãR8¦ÐÃE3²±åæ„Wéä8ÊZ/—Ú#i›Ò©‚i¯,‡ö Í îýÜä¡ÊÝ×i ©ò4­‰Z-C»Ù:Ž]Ýi~, J6Rx\<¼%NøŠ K‚y5O™èázʲ{};…] ˜%Ö3ÃØQj0=r¿ó‰Î.³ |²*û´ÝàB-t$QŠ{挳©oÕB¯<÷›“Ç€ÛTû¶ ÇÇrêçÔ«x½²cQx£/C+ªÑãåKN.{=„£ç:¥ñoµ¬L”~KjŒNk ǘKŸƒn>q'”#&hîËòºj×£›Â:'$ˆ”¯‘À}·}˜BS}œw¬‰ŽVh÷hòa-1žf.LÉ­­MÞ®ceì7«tižncçk 6(EúPî/E+tï ’ä^¹3É ›"6 Ú'=…‰%…׋…WhH¿Ð¢ïâh‹½ Y)Òò?H²ˆºÂ×{×sXQ‡G¼Ê‘3Eß!p["È~sTú]ºw l!“ÿÊ"Jîü §Åô@‚ÄŒ’€ôrÌ •¢,ï ¤ƒÈ°È²µ !žæl"eQx)~ÕßȆ0³É^V9¹\â+É\ ‹•:ª$%Õ¥‚Jn µÎ²» 3EÏJ îÿiIEmÙ_Øë$ ˆJá0àÃwEGn ÷!eÞP©)¿œˆ·ër•Ãf>Ú‘°'öú‹{¶¬JFÏmpua#P.© ƒ/3#ec½ZÂ)yVæºÜ²¸Ø)'¬-ÑÔKÀ?ÚÓ‚íg ï¬Ú­Ã0t5kû6T)oJ ”†¾‰Šµñl?jwc*Þ<9vÈ<þaEJ¯Ë*tÅþóœÝ¨§·ñ®j,—y©¬ ¦EŒa$7çâå¤C¦Ûqã`0\JU{:W(ÒÐÒ’”Lw«…£@±>Ÿ6á¶Ë‘e‚tI}­j0°Þ:èf * Lpf¤’ Þ.‡ì¹ Ñ7ùe+ÇaÒòk:‹‰ªvL—²3 ¼¨•’Óªª^ Œh•ì}—8ZÞ+>£Ze{ó ÌÇ”«L©`ÜÒ!Ê“I~-·ˆlkI¤ÍµoþG†oú# žO¼gÖ_‰1_ ?à–MmâÐ-Üe« ²"A•¾¥;¾eñ6ô µý ud¥•SÇE(²Ëaèð‚Ú–¦6>fM¡£^*º‰e ­»_AÉ TÜ‘x%Ùþìÿ¬Í†·l¹áÑCkP—ÿÕô @f8Hþ1" ù& #Yý¾?ô¥¹©$YRåí¡Ó!áØÂ^o/ÂhÉ;s†ˆîm\Û³¾“Ò,?¯°ðÙG‹{:v‘úŸ+UÆtçþb¤‘Æ·/¹,ë&µŸ?–ù³x› g@gãKx*l­"“²¼¶ð}zIC,ýˆ‰´¤…¹–ÅÑúâ€õ̪Ñ"¶Ujd_¥°ÎF™8^ºHë1j´ETöð·†NÞvz賓ÛÊI?<æÓ¦|NQÉÒåæGÍÏ8§SQýˆlÔæœ±™L MF ÙpPáOìûýýhCÅ\þÎØ 4eùÂV]cí-!R‚½IÏ{úÊ~„•žcDt¹…n°âÁCÇ7úmêú‚‘|i<Ø‚Hw&;|ËL¸/é#¼1yæSb“œSÓ_8™‹Þ|NÄLvíÔ® ‡ôf£Gb¶ð™IÜÕ!8Ÿ/,œaàóD•±!,O¨?ò˜ Æ}#‚¿Ê…™)ûìY‹ºs8¼è”ìK¬CÔÁèUv“›òÜo×a_^7ŸY½Š6 ݤ5Ûaí-ÅYïów¿„ñ ‰ ’&Â>$Ù¿º¨¡ã‚Ùžº˜aj' y¯£ñ›þóòfñ¾zÿrÚ¨d=¹ €JÄÍ\u¬Tö¾å…øâ©)YEÌñ|¤W ðì%øm[K–ØtÕ·áûŒüˆ<΢LÊS›1Mðºñ»§§,^ÀÙg9ÙýÆqò·ìÛGùƒ©g]ÆÄ*ÿLwÑÅ—|Š=§uRpŽÍâµÝ>Ï"– ;õäø˜¾`¡ Â8Ê—·¢ÑËOQ g3ÓµW?qyTÝ5ln`j†[×{ÆØãnv?ù/Í÷õÖd»´½‰Ö!êEáH:á&J<âùñ¸g)‹òÕZSbe³1áÎå†0›Š¸Ý¸.òdyo¿½ÌÉ޼zp¶žÕ4#X}ÙõƒFbµ]´S¦:¼.uý§|ÔÜuTœw(-‚]¯§ã³¥ÞîS6/nè#§ZùšAÌ'¦hq× ÒBTÞS£ü,âŠã;Ï"™¹ïП~Hå†DÇ‹¦“gº?ÚTzÊf7¾S-Þ`gCñq&ÐHóM›‘nü‰L:€Læé5®zœ+¶tBÙ'ƒ¥ “‰å\£Á3¹bo¹lÄóEz,S®’HÇ£‚­|_Ä9Rõ2 “?~å`¤¿¨„®) Yªqe‰—J€;ž<#âŤ3˜úóreêCQþZ‡áX.N‚ _ôÝQØ£]Ž#b¹>#´'ãû2ÿDöýjPl$Lö½ìFŒü)UùSs kÒÇ3ìŸ5œ38ýò}ïG²q c- 2 Ûði,É|)%‘„Ü0ªÊŹ%¥hdí¦Ààó9ìÙR/ šÈ'€(Œå8¾¯0Ǫ°UT%’9¯^3gbW9èªßÂÚßæYàä±ËJ;¾ &|Ùýය'Æ“·d24VÁ¦óÞA¥Mn±[ÝMsÂ8Ë×?œš83x>#Ø+êúšfïU×ykà€=S\/#îÖ¢AO‰«;üc®#o¨“Ê#˜àék¸°c‡}dÛíAò½ ÒémÉ—nÚ)þ¦/Ø‘Ó0ÈópÅk{‰¬U—§#Ö¢@òè.Ø ª¯ÖäŽ&’E?pöê€ R:†V©“½·ŸI)½Å]øõtq«Þ±£w0%òx›$~ å-J2E’>RYÇ`g¹»:…Æüô',2ˆÈŒ”tÚæsì d°7©š¸ˆþ@Y­¿×í¸l£|LQ1 hºoX¡—ßÞ¬1^¨¤]ö¥×šÛ‘ŸÇа. •&óŒ9h9lM,ˆ<>únò¼a$è‘ýkkÖgìoèt~~1Þn¤„ «š×Z—g2àõžùØËeÔ/}ú¸’YT°Hi0å{G£ˆÄ±Uù߯íÌêMŒâWÎk§¨'%޼WVÔ.$Ìß­Jqðx³‘æ)è¯ÍŒÖM<˜º^Èá£Ã¤$Ž!vØÏød¸úl`%)jË ©©ô /”aùì”÷³~ïk¶¦{kríGÕüiÒS€€mù,ü½ô–tÐ’Ä®—ŒäÛ…ûu¤¹„ïgÄ»¢ßyôªBzŠïv#Ð…ÇkÅ!ú‹¡-:/Í¿j˜ŠÊ9\µ ­k ¯Åñ剾@Â)jb‚lÛFøBtJ/ I“ˆ˜ ÙµF® ’ö5]Ôñ±Ñ-Ãè#ùVÝ)óT,׋ÞÙrí°Æ,¸Í•RW PˆQ"e°†ÏÅ”€E#Aob¹ájÖüBþY¨?çôpë#ªÝ{ñÓCg/ £Ç "8ù¦å·ûÖOa¼Ý´÷†¦/CX8ßÙNvqBS&8%´Ûr%óU7 K‰3bÞ­Öm)£öl%dä»/‰U~ÔÀ猗4ݲ¸!ó\†”sÐÅ ÁªLh¼ ¸Œ;eõ"µ_y½Íœ’…**áW*m¼›oL,pl+ÝhaÚ|‘Ú&u=Çef1*ªÌmí5.ÔÿœÇ«“XÀèÿd¬r ö¦µ½XÃt`Qü»pÍìºËx[lØÆC¥´ªZ¸¼TÀí±%ìó@½Ëåª6t$ûÍÒE(ÎuŸAFVÌFîDQißrÎ5áFkQ¿¬ ´/¢I6/Õ1´Â‡£Ÿ\~DT¸TCö|áz*è]Ã.ËUúÁ®¶à(˜•u)›Ê— œmßDÖ8f¼GÖÒÎÈÕx£†ZJÞ¦×P÷tÅC:ÉËÉÅ1èW½—y½à߀ýlq# ÷+v#Q+;¬:Ý Ÿ<'°Æ–¯ûÐåZ³×:{6â ¡2ô øÄ…ös`11×Â7,úªŸÛ$˜ _‘eõC®¤H›J… fôRaߘÞå"„ÐÏÝÉî¸$.RNwxmyªîàlZå¨ò»½¸·ÇžÓŸ1m5Žõò¦ëI=¾ÕÛœ[ºF’e×ó%›Du\;•®ùýûÎê0«'ïñùCäV—ûÎ5µ„EyG”pbâ‡ߺ Ö©±8ÏG?éîÀ˜'„2ýˆ•‰ÈlxÁH7zA}:L°‘0xmw¸¢«€øÒL°Ë)R}Ñ‹Ì`W SÒ]°ï B!ÉîïQ5SûÉ¿_ßåDâÀô®ã9hZ6(NQ âŠÏ ¢?Câiö-7‡TR+}qó š‡Âï4øZ‹ ¾K®'Ç–d­eS jëëÖ&n¼sÀ—ÐÙ¹3@óý‰%g=\ñSloÞMÒE¾½ø2©¢›¢ñae-7©šùþ——1b@i…ʹЋ¯O;½çB,¢KÅ»ƒlZö]h!’ñjWô6ÎÆ¤½Wypy=±è&<‹˜SnyYü‘Ð<ã  7ŸJ–|ºØñ˜ØágxÄ…S8^ßG3ZÕáBêx£ð“­@ÛQíUx—ä+ñÂv/¦zŒŽoïQeéÀÂÊä:ZËŸÍã~ƒs¡‘ x’äu‹«Ä¹4j%Xû^ÛC÷‚×B80Õ¾½Y¤^ÏkOσâU V '¥Ÿ—5êeû€y?W¿ú\0§,/Á¤QÅŸŒ¢í„¥e,CV,ô}­JÅJ*æîüøÈÓûUmöaò3­£¼ÔËÆ¢ur•†›‰xómñŠN€™è~˜´‰p7×_>„Oä¦Àâ.ñŠÉŒ»k'KˆICR{7?Âg6·çd¬BªÐ 9—›¸W@l2å þd2nÆL tkÈcïywñXÓM\y°$Ž­ôSó…ϱI½©µÚŽ%Ó½ÏιËw›ÕüN¤ž¨¯6Ñgi™q…dd¦®7«u'ºklÐÝf²X¯gèÝʼèïà.ÐDÇêÁpÎên¢0ÂdŽku]ƒŸÊBmîÞ\ˆ­ C†*›øéG绯巌Ðë7t,M(sÙïÝùIÅ~BhM2¨æ ýj!¾>—]¼+`ë…"ªc]àÁìW‡/UækÚʨêË{-_Žñ ùo]3ë'“Cé [õa¸c…îϼ š\ 0êá¿-ÔR·:eÏÃøQ ÄïFX§¢ìm¨"rq›íáiôÝ0HŒT6Á6îúÚ'"`Â>Â_»Ï ÄhðÍO;šµcŒ­™Ü ßí#ÚÕ¼YLÆîüÚÞ¦Ïçµéd¬â}FmòÎPÔP"˜ªOJ³*cÓjÏäxÃ\@:rÝ*Üß%Uÿ1‘Ù4Â;ð‚½ô°‘ò;#ƒ[ü-*ÅYN] &Dk ùÍìe£`ЧKdý…½]†.A2ŽZ^,ˆë“ÝmM–ÝÁ>¬›ÇL¥ ¨î®8¾¦$Σ*§µèb¯ÔÛ‘°\Qø2#€¬6?_ð»ŽÝðæ£æ©|Ò¹XV«–W† * qUK¾Nw)É•«³lªð´”´ÅT‰A–ÛMÐ<ðÙ‰ ¶U¯7×¶-ùÊ·¸ÚCúC÷Æ%_¯ðcÀPäñ^®ÆÛÑž1 2¿Â…ZM·%©ÐahETTµs=TLÆkbäy!íõoXDÑ&V¤9cJ>ª—‹Rˆ¸o›¸ð•÷€‹gQh'ªqâEÁ“>Aw«}qó ï+ÞLD½Q¼Åm~ÁÂè’'¦çVq^ˆökº„l^^êQú\­ä?ª;Óaö î|Öe0 @ÒŨGùÅÊmòQV•}N'@G‘‚î¿Ù”Þ9_e9âuå—$/3öÆä¡Û@ÎâpÃç¶›t­Ž¶hƒ%ãÑfV”Ib¯¬ðfX•¹Ìɸ’J¶ûl]/%ìþº(ØèHàõDœåzù>F“'ÂPJQænÁÈš0©³2ÌvMþ¯{¶¢êÄ/±¸²âÒ×õYP†Ÿ(’ªÑetºä½KxÊs Þœeº“EˆèS×#ïÀzDÒ^éÑú—£ÄFIå4²—îñ=ò!ÈèCVSCA«1s¨¤ñ·.被ä¤çáõbµ^•)[Ó ßà¡·dRW[ë}q-yÍÞ—Ç"‡”°‹7n Z›'ýÆ3£©‹®´1‘=CÅÇ’® %×ûè°M×~¨zúí=j‹â¹¸ÂB~’/UK~fÌš™dìiù¶t@ºRl•.²²ržåЉKFLt®õcÛ·Kgrô¡E&§Þ>ÓTúÑ7ØœüG&|¶… µ¢­w­êKõäüFÅ×¥ÖU‰\·Ü*¶–õ½£eÇu¼q¬}Ux¨ÕäeìÔ›’ÅßÝ ýý «²GmYU BOy[kE§ Âë~îufùí-é…®BË,ãZÍá>š­S2+Z`–æP£û÷Ñ7ÙjŽÅH#MåI=§pΈ,ú`Ä"u'¾Þ~Á`Z{iø*šÐÛ¿À\ß\‡sYĤWúlW嫚쫸O#ßµÞœ@½HXÓØIHp=Ó8Œ(Ùöäy{ÂäiöÈÍ„›õR.îxMß^B#@j µÎ5ÙÁ]f×rJ(-!o |X~ýF›eHI«þJOáâCFF'ú[žoesŸˆýÒ/¼} ¼¨iÞéo¬.«+W‰Õ*4Ñ[óBŸˆûâOeeŸ‹?b/åņ,—¿‡k>žÎ"™Åeÿ¸C¾œKAùòí–ê )aõ6!áÜÏXê]~M„Âõ_ì^)xÅ]/ËNßF«ÃGö#°1ø H>Í€¯•|ˈݹ*-¸à»˜ñ°K!xG•*˜E—Жä‘—ØÈ§Ù ‹`SVÓ%ܞǫ͒øØø×9py6¡Z>ǰ¤Ü:CŠ.îiŒ°ÅÉ$JñŸ¡j?&jO³³'•MÖFŒkÑá¤ÂŒÂ_>‹-—!gßÂ?Ò Zq5ŒTU9k¹¯@°9–å抗';¡Æ3½oj"¿T3UçÝù’þDÎâÝ5ªŠ-³žc,Ç;ÿBˆ*»#×Õ?­‚4ÀÒo‘Š ¤j3kƒ†£mYp°HJϹ•Ž#˜^ã~a* *û‘9/NÍßÔfAæÿPM2 ¾íBe.•%ꢴÀ=3ë)s¶%³ÂdmÖÄ®ÿBÀÜ8»Âm—½ž›É`ÚSß ¾ÛÇŠ›Kæ%X8SIñ¡¸Î=ÜåÕG)•uw‰ÿn NÆó¸ÞâÊ›yÔé•¶i5!Ÿœm©ƒ‚l‡\‘»½ëЮØ"Q3Ûø9ÚÅjv3} J‚U'´….´}aÉï[%u(< lÙöCˆ 3Þn„Ð+8ûê¬Â̬ó¦y`sò be…ÙL'Š®K¾>MfïfÈ¡fr|“JŠKÛÌx¶3§õçlËÔiÈð‚\µ9J¿ï$4]cÖ.ãø;?jóLó1ne9õ&ÇGe…C /=Û‰B`¬ü¢’²Ðp Áw¨à °i¦üœP%ê¿û¿Q&?TÏä°â)øDGCšì8{E¨+¹Í Ñø„öॠŽ|ì¨I§~ ¦ŒV7›{¶%}σŽgð@¿«¾T» ÷Ø®åˆô®ü¸®A‡q⩺ŽõÁMr4™dÏ­èjñîsX¯Ä´A‘Ûg“®u]±|‰Ÿ¨Â4ïr"ù7ÛÂlDdµvÁW†h°jC‡s Td^Ýód7œ ˜ØÑ—·¦Ú­œÊj?wp3º Íï¾ä&G¶¿ãÃ÷H#'¤¨MŒîæ"_žS‚5’©®Ó¤¥ËIŒ}B÷(”©a6/‚THHÚ(Œûø ¿îÄe\£‹ä«Ýùm%¡3½L ´kmKïíóÇCë?ì¶5b7à>395Û:Æjð´ôöNEÚ`üG¤¼–Êmàjg£jöö—lû2* ñ”¼ '´}Àu€ØêðiKÂ…°…ŽwçŠT¶Î,Ø šfÌ,Áî …ÅiBÓf‰·ÛŒç)€…»‰;ñ]ÞÌc­å6v ¦šbK'J„^(šcnÝúįC„K£þõrC´b¬†Aí'¬æÖLyk?ܥܕ¢Þ6Wì¹[Â’xÇÀ˜°Ñ_½=çãÜzO~~R˜ö}°M(ŠºÜôÓ~2_X5¯F­~áúøtßcÙ?dG³œéƒ{acP„²,&ls Ó÷oBÓºE¢'Ë…ÑJŽnn½™h (Êjœ 5- M½rmEH¹£ìŽï²¡OýÍÐ45j)CÈ@ÿ׿º²~+C¶’˜âòfMQêö1°k"BLiKMЩXÙU…9ÊŸï¦ÓêßU߇½üðÆ]uDby`‚’¶ez¡¤HÀ'@íõ ›¨¼‘ºŽjÀ°¾>è°m QMj•‹Lâku[°6pfä§Aw¿ñýä†ÁC°‰QpžçsÛ†ûÖ‚¹¥öjóÑãåÃD5ÚB¼©†¥/x'ëoÄ‹* Pz±éÒ.Å#&f%zÔŒËú®(ž,ÁÓf_iFiìɬ¯›G¬¯ú¬8ˆjj¶P’ïÁ¦Gâ6çâ$:Ô²]!»½¬‚öðbä—ÓpÞuúþ<‰ìúš¿jez!òuÛøprKmÆŽ=R_6YMoWÿ¹*L¾¨ñbcœV>-r¼ˆÞ0pú]±ë7VïéÈsy1ï`à®ìDÕѹ/qÂÏã:’6^ƒ{ Ë·B'ÐS)ý¯ÓùŸs›‹d‰éÔ ,Ÿ9ÁøËo"ÈFŠp»¼8Ë ¸ÿŸ·HàQ}UAÚ”–rªn¾ (Ã+â¡üÞ¾^æÝéN@æ’@ºš©üE¶bTúIÌ6"ÇÜ,uý…°»jzŒ0©?7½™yžîˆ®¨1•~ûµµkFlÎïÈǤøÔ@ä8£ˆÍçÆlñÝJ¸%2ן‚Œ“„qœjz˘z’[3+cq´ÙÙ  ‹pZ^©ïg¸ªo€T·0aHœ¬è:”ˆ{ìÜ=3ȶ?”ÚÀC©òêÍW£EÈjÀì—t$Sé1ÞQõõm:!PeHÊñÔ/Ø®âôygŽÓY—Ÿp?¬By‹›6´ã,Ó×äV¿I Ø$Ne¢c©÷ÎÜåe”1åëÇPrŒî®ÅPÈùcð€À®³È}WJÕúx}­Þ8·ºÜka ø î* ò fzN ]Ð{ð7˜1)(6CB7`íup¹þÆåàÁTJ@¡˜F’›éܾ3óñÅ¡#AºÈÞ,1’Eçd’ì ÏÝ6‹ÖÖÈ>D toGd!ÇsM{L&¬29r‡CsŸýp”õ`{Óyq`w¢ !‚ò’Ä™ÉÝ­ÎhE¶Â u½»óç®Áxôˆ_»|ê:…âûzlÊê SÌ“®*:dek¶ˆ"E-³ HÛ–ûJê°Äd?i ´BŒ""Sü|Béâp#Z7RÆkÛ–RÙã ßäå©^ƒãcþ?ô³Ñ‡£ºñUEÚ~ÛN­GÊÕî(ð·«¿oû¿h–ŸÑ8-íÑÈ=DÏÖaXä–…QÇ…9ô9§x:Ñ %½Ù︣"Nû¡\á{"ð–ÑÆíoÅZ$™ÎÈÄ¥äö(¤ŠÞiLúï"@ÉëÑ>Q› PZoh”^ã©BËR qgíù~Àqk¸V¬ïNH(Ä>”é·Å-,òØpˆgÀFGD‡ù¤•Ê6¶z&žL,ìÝg«5ÑÖ³ˆ¯¹ùà(®RøxïÛË‚«„ŽúcòJ˜ /›g©•ÐâáêB4¸ j²"Ä,)xª¸Äè]B?@5œyŒo¥ùËÆÈ ¡™×Í›"i&*ô Ì»@Ö6h°åŸä FkE¥½s$Ë}•ÃÇáÍ…ÏÄBÀÄÆÄŒ¡n*‘v•ý5У޺ ”} PÍ5lŒö@ýlrÞyTkã­š©I,´B&5¢táÙó‹/¯jÖxt±¾ò“Lâÿ­Ê{‘·ÌBÿK Êܫ톽·í¾òc[äW ŠÕêBí.’®Øß×½â®ò&ð+á{A»í”dt°LNJ¢„@ÝHï¸þ½¯QäÍý¿Ù æ2xúÁtOÓ)‘H:³~.…ÉÌÁXÊlC]ÅÊñ¨Vï}sQué~¼bóýÕÔ3?êRT+ÙŸAØ Úϳ1$öÆÑÆú,èó§Ó4z–dÄZ°vàé«Qìµç­´DŒŸÌÅ-¶Ì“ar{¾2a7J@ŠÀÍ’;(¡Ð8ˆ2é¸~C('Ú>[ËŸ MZá°ÐЖük ·‰Û³Õ±›~9]òTùî—¬k¹ù–ØÉoû¥°©O#ê+RЏ»&!X jK6ÅÃrnñzÙéX7Y¢ Åf=£•çëŠIçˆL3kÚÐËìøƒbÅ¢œýt ¦±Ñ1&.;œãääé2rü8räµ#›êúR+qHP‰uAžêRÐþIúš ¨Ip$ôì…Ñë2kNׯþÂý§n® B³/& 8ÿ«±¾;>ÜxÏÙYWzø*«,!xÔÁM>§}bz…sT'äùL” yä„ ³‰øD .B—|›†˜€í`<Ëc K¾fŠY{ùÑ“€×lü=¹ë#½Ø ÖÍåØÄб߸IvZ=ú¤ŒÃT!#{ºIÇ_fߘyм0d¥˜s«v>;…zmú,$¨R.ŠÊñ5pYÏ ¦çËà•¡U$YJÑD[+\¸6H ‰Ò“ìÙµÎ@þvÁ{_€†ûþ5ÙA.fìÀžUô)|hƒ{F¼tòx܆)`‡F«tìhÉÔU¤´v+W 2¦q“uÂÕ@+Ù §%€Ç}Æ e´Ö&®dKŸXéÿ~×£ÿY°-n«"é¢ãME^ÏA¾r‘à_‰ØÓ4 ÔV:Æ(žÂ¿u2…2V¹¹EÂRFæªÛ™§¶B ¢æH½ŒwdèÆMÅÁªªL›é²Û-è ZSÔÿÕš €V\‰º3ÈÍóÅ1®£¸ÿÊkÙ‘>g™#ìŽYßO·» ã·HäÓ˜g‘¾ ý‰'C‹€Ð¿uR\‡ò#,gá'©v?eGÅBxGìu‹’Ý.Eü©dx«a¨n¾`éæ©Æ#²ítŽï!i$Ò×þ!K++bcb1K˜7Ø a.Æàú¼’³ØÖÀuч;r3ƒ#±Î²1ýå|àÊÆ«_ñ4Š€Kì2Ò¸Ö$$”ÕÕÜúaòÙ²™nà—®¶ܶÄ]¢QJ‘6¬" ƒuÂþõ]@¡N>™Òá/ÿ«gÉ5™Zæx»‹/¿{ÉŠ·È¥Ù¸©*”? +]²×ÑlRg§ÀÍ9¦ðó}?DoŽÃfàµJ˜Ñ+´VGÇL=Dž/}Z11[Ø5ú›ôm\ï¸Ý0ÝÃÏĬÀ'³.˜b¢xñSó%ñÄ0ƒ4E5`é£yý*‹I5šëfù©º©îިߊ®k:åßœqþ]¥n„¡”äÒÝþ³NÕjV+´â¬¤ÊaE ÁáE7xöqŒ´ÓÐ÷¢1WÍÀ‘#õA¾|~šß™’*pz™™…”þS‡ür>w“o¡Ne‘{]]φIõH¢˜xwo7f ûi©Â, »ŽçùUB .(­PI .K‹…5esÀ–2ß²äö– &^¯:ÐÜÈ¿dÚth’è ú¬Ûƒo »l´&Çœø¼†%2ë¾ ãÃÆa¿ã¶D­t-ry}¹Äãܹ£i&²o{Ÿ¦'×ÞÑL?æ¢ê@®aüïZ©*NÈâ¶„Ö¼?÷MÇ'Êm(–f„mS* ˜};”ÿ ³<ýû“Ÿžëú6%͕Ȩ”uNf½4d´4]…PsÅôY†z\anƒÓlJ›¢ì ª4ðò,quÏ5ÔÉÐXz?ÆläãD %–âá~¹óO€¶KJQÇpÊÆuå3uÿB¿öðuGÀoÛÎ1çªÆ`ÌCïûMÜiV=\ø^±‡î ]ô\†çZk(r?‚&Í¡æaW§Ø'¦ø-’þ$-F“èYIì:=ÒÏýæ+ƒ)•:è ªä-¬XÁ«¶}tŒ-ݯN «ülüÙ(kŒ±d`±UxÖ…À«/ZÎy²H)r¢÷¢ZŸ |.Vc[ø‹B¿ÞsQNO€‡.(ÙkÏ«ˆ@[N2SˆT%~Úq.Œ@kYÜbÛè;¡kÅ­e<ÉíEf´VñÊ•”š× ÀLU²>W’" 2¡û}!£&Ï"¥ko9»ô~7ÕBD%E¨f-\iÙåÑ÷žU?úÝW*""Š‹ ÅÁ7ÀY^/6·ñ}©N#¸“Pžùíïø –Çd¶ÿûˆGâë}”Ž˜ñã…x˜€ØoÛ [ ÖK§$W¥Ïndàòs§-ÈRe%¬Ÿ~æêÞ+ó3;÷z&ŽÎß5b!Y3êíÙN•Ú¬‰ é˜&í»”tmSè^€Û­…é«#J"?mš…ø˜*ÏÚJ³»A,˜×^²ŸZagæÌ~ÐíåÈLØ•ù„ãì¦@ÐœÂæø?؉è)AãñÞì{·Ã€ª–;•…ûøÞ·ê‚ËY®Í¸AyXgp+˜fêƒóW|ÿÁ(YT„äHëÁl½0©ÉJœžª·fó>¸].ÀÆnw Øò’Â23ùT‚æJ¥ËÞ‰å)”ßx;ó1N9_®i³AÒ5Œ ?ë‘ï ºŒë53ZçÎ`86PÖcg8Wóù+úª¨ËóùàgMºø¹ 8eþi+Le*l÷zœÞ˜—XúöpõP*ˆ³ò}Ý \™oZ}2ÓÔTã)¯UŒóR¨}Ør¿öÄnï1ì;ŽÆòÑìÊÑÄ7«ruÿ&÷Šñ.€#ËhéaøÁºÐí™j0]‹ç"¿P}ßôˆS™ÛhŽœÒ§zOk3ïÄf[ŠÞÏÿj}Î}fA#›ZpÑ=ÁXpU„e–jV#莭àWÑF†FaõžR/(¯ÿ }ˆN÷±5z±i«xK2G#á}}X$"Äw½å0KˆÃ‚Õ+‡-çÆí] €QƒÕ…À«/ZÎy‰v3ëEg@&Í y‡¡1NÄåzk9­¨Î Läì® ­˜Ä/àýQ|tYÜ‘ ÍäVtÍâó÷ðå]¿¡±f.8)Šœ±”òi‘(J›å•û”'{*"Q¹˜?¢âqûa'±Xñ¸ºQöº§\m¸×ôsÍÌww\¼õÓã”Ôï~ØÛ¢\è27GìQç4r^dVe%¬Ÿ~æêØ«õÇkécy—u^YÚËùÂn ‘ŽšlDòvûP¬ï0TÉ‚*šPëS¤ö^T:‰-Ÿ¿ØSvÿ¸µ²£ÁÄ8“©ÖÎóžè¥€ýåASpDÊÆrTxÖ<Œ¹"K­ü˜µÍÉwd­ÑÏÒ\äÀõL„êñ׿_Äl‚baµ¡îùÑETuhx£Œhr`QAIlŸR!±ðËÌïß8RmçÍ•˜ìXçôÖ!ÿrñ°{1¤‰ ¨V×¶e›×Mõ¸ÌY[橵C*¿)] ?d},@G7<ò°:]¢`” öŸ9ú£®Ú¿ ,QŽr‰¯‰æSÝwòÐ×,ÈVìµï_=./ZB–h~ojýþ NÕæ†oÀäàEÇ—VÚñ7u×Á3!0øjsð“^øàâS¸Ø¼ŒùV˜E± g•'Q•²uaK™ùˆ÷^P…Bð‡#OsQŒKS®-GÝ%»Ž6.¬£C¾@Û½fÏ &¸0èAíC¿8.Aá™saÇœ~°/ôsšÐ3æ?ÊèÔ¿S@®ëÎ6ð­ ­žU*Ä c†GzžF¿$]Ö‹QË}úxãjë‡(»/ëáafÀ6¼gÊWF±¯Y âÌ[€§AµjŒèÙO;JªuàtÒÄxþf|ü¾_–®²C„ð”+É*&-YðSº*ˆ÷<Çrj” 6: uOwaf+”«ææ;꾸GT®9)˜;¦@ŒF–¹}k`µî¹•+/‹}fBümIÍÚwEŽö-³§ïkj/9UŸ5ÔÃçgcÿ€®MÁÙ‹ÈЙ4ì ŽÉê^1Â[³¶‚$-S[ Õäþ©þqkyÚ­Ìþ޽ÜIb¦ ¢hv×YÜ÷ygsŒÁãù…BÄqi¤—ªUçQؽÌï#­)2i5–Yhòàå› zLÎí÷YÁ±<ñÅš‹‰DN '‡3ùëËKörÄ%I 5~‚÷I×|»ú÷ò>'ªpR.Ã7fäÙÆ€EÕve¬w  “e‚®Sù¸›A‰†W¹ãp‹¯ýbúoTÉ?Æ"#Ó–½î’NÚ-@¾*ë~íòs°aQ®žz"¾MY/#H¯-üÄåxxs¨À° !ÂOx)sÌ–¥×áZ(‚r‰~YË€R@ý¤¿dvbeòNUÎ1ÙÅßÖÝ>¿ÚRé¡|´ÌÁ¹ª¦Ñ($ÕÄ…Åá]g^%x©Ín@åúdÙ ¿‘´òÆGDüüQ$}9}É”-ˆ—G®JÀˆ*³ï*7\ÄuvÕ´¾S÷Më_³¬çÙiqÛ CjqÃÙsò:Ò .²”B’àp*‘5ڵ내Ÿv¢vO€ 5r6¨½s¢I±`bîoŽÑˆÙù¬Æj=lL j¹&žý=džÈôz{ +-åÝÆZäÈSi;ý=õ,½Åtûî ôcu°?Ñ7Øs¶1>…Ï…Wš¥.×ÉÈ–ÐcÀîõêV¡«ðHA,æ(k¯Þùœ©ª~IMwWÖØÅÃç¶ :îׯ‡$šÐó ¬jwtÿUíéWlÖøÚëØM`$!ÏÙ’ä QÿZTÚ:Á ¸¾y¯³Û›>O«ŽˆÊ[·ÿùîI@þ,m󩂺sÛ°¸›Ú9æÒøÞƒ„VæŽû©`œÒ¹†tÑ:ùÍ Ÿ¼»FŸ‰ÌóG¿ ‚5>˜ñRŠwÐ ®ÛI'.`ÊOE--[Ù•€Ú3PüÊ. ¥è÷o|¼qp|{uº3²1ë7DXþYë¯%æJ0ÅùBçPƒÊÁízzê†í•óÒïq’ ÎF#Á ñ³<÷{ÌG(¬z`G»“Þf€UŽia™‚ÖÍÒmE8¤‰9ÐO)Ïycbš:iºÅ‹”ìT†êož OAiSÍ~a]ÌHcKÜø„E;·‹wThñgc q¼¡šŽ˜–ÁßOÙzS˜ôWœ.O ½ã3áÞW©˜æµÃß,àlr€d<#j¬Å‰oÄ‘n“Ÿ_ ò‰FÝ×<"“Î;P(<‚?¿1 ˜0)ùP”þPzàå‘V3¥rÈfïŸ]1Ä®>xºŽúþçƒI²åHûh{ƒútR«š!øù‡"g{R²ô¿w¨Sþ¸òCh¹F¬ã÷—¥úý|RŽÇgrÉ¿+±6öÁo#R!ÂÓ`ú· ]ΫþÅ&](x¾Ä#DØêºÉBs³ÏÞPL ήRë3EÖ øš…`È'Cb0Íá­/3œ ©S°¾TAù 2F %œn8w™È”}J:0B<©B)íØ+cTúBV.‹XÊì2sV:À‘¸½è/?MOôïvùp­?Í•ˆs¶0š“~;Î…óà¦ØoÆŸ¦À"©áq•Ë7)fÒú¥¤bk ½P $s1”Þk*Ú03žÝ›‹Ü]H±†4\ëHZmIR9–Ëó ®*0e-Õդƚö¯ŠÕž¸:ä_{î®1ÖhÚŽ°Þz|(öÔ£%à—Dâ×{µü÷Îý}›ž–€½¡ê]z¿$žALAÌ¢êeÊ:pK‘Nƒƒ;§ößÌWœq-« eæÕX=ô§cYéÜ2 -¦ü ÎlBÐ×ì‘’|Öá2M¯ìúÝ ‡§ÉZ†Aç?äñ* VV•³òfõ9T¸Î——á„o£ÞxωAÈ •C ÿIr}ÝÙ*‰˜Åa|ÍlÙñ5ˆ­>Ptº?\QÙ°iÊæ¼_xe3á”Ýo.Žjé³øjf\²œA¤9Å2t‚äÍËxÌ0Òé°oÉ£›<ö8¥ðL%kÎØƒ».ôƒLœ[lÐgWаÑÉ]`“{1[®¾ãëÁ+“€~楙(:W’õWsØöªf ››“6VÛ ö}¯çT#–Å€?§Í÷§ê°Å,çlFÅeëkéÞº±ƒŒà×ñ„MG™NÜ»$jÑ:tâÓɨ®Á‰óM…°ùJµZ‰"=ÕéÇY¢ÛØ*¯:݈8_±&MË£X¯Ia¥ ndøqÂ&¬Œ?î醨!òy'Ó endstream endobj 170 0 obj << /Type /FontDescriptor /FontName /BMVMOK+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclamdown/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/questiondown/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 169 0 R >> endobj 171 0 obj << /Length1 1750 /Length2 10267 /Length3 0 /Length 11372 /Filter /FlateDecode >> stream xÚ´Pè.ŒSÜÝBqîî÷â¤@pw—âîîîP¤@qŠ»;j¸·åÒÝ=»{ÎÿÏÜ;™Iò¼þ¼òÑQ«k±IZ:˜ƒå ®lœì@!€´Š&'äf¹Péè´!®và¿Ä¨tº`gˆTè_ÒÎ`ë³Läúl§â(¹Ù8¹œ|BœüB@ € ü¡ƒ³@䱨°” `T:iG/gˆµësšÿü0Z08ùYÿpHÚƒ! (@äj¶Îh²h9X@À®^ÿ‚QÄÆÕÕQˆƒÃÃÃdïÂîàl-ÆÄ ð€¸Ú4Á.`gw°%à7a€*Èü'3vT:€¶ ÄåO¹–ƒ•«È xØA,ÀP—g7¨%Øðœ ¥¨ PsCÿ4VþÓ€ðWoœìœ‡ûËûw ôg……ƒ½#êZ¬ v`€šœ2»«§++µüm²sqxö¹ƒ v ógƒ?*ä$5 g‚Ñs±p†8ºº°»@ì~Säøæ¹Ë²PKi{{0ÔÕõw}2g°ÅsÛ½8þœ¬-ÔÁêó°‚@-­~“°tsäÐBœÜÀŠ2™<‹Pÿ‘Yƒ]¼@ _v€=-l8~‡×örÿ¡äü-~fàçãèà°z&öƒXŸP}\@î`€«³ØÏçߊÿF¨œœKˆ…+Àl ¢þýY ¶ú?ßâ 0>ï'øûó÷?ãçõ²t€ÚyýcþÇ|9d¥tdõ Xþdü·NJÊÁàÃÆÍ`ãâå øy¿ÿŽò7ÿÿpÿCª‚üU🀊P+€àŸž{÷îmã_Ãøï ªÏ« 0þ³ùF@^ Åóçÿóþÿáòÿ·ö¿£üß6ÿ ’s³³ûCÍø‡þÿ£ÙCì¼þ2xÞd7×ç«Pqx¾ èÿšêÿ¼d°%ÄÍþµŠ® çë„ZÛýÝFˆ‹Äl©qµ°ùs…þ3…çðv(XÝÁòû­°qÿ£{¾7 Ûç÷ÄåyV¨ÀÏçôß)e¡–¿ïŽ‹—rvy¡Ÿ×‹‹—àÃù| –`Ï?6ÀÁup}v<ÓóX98£þž(?€Cú·èÄpÈýƒ8òÿ ^Ç«гŸÊßHðþAó €ÃâoÄÃóŒžoùë߬9,ÿŸ³‚ÿ¹Vÿ‚ÜëÁç¢ ÿ@ÎçPп!ïsUÐç.þKÿÛáŸZž+sø—š‡Àáø¼’ÿª†ó¹^çÁç|.ÿ$xNçêáð/õsF· ×s:¯Â?·Åìü§ù ÑÂÍÙùùqûãÌž'üüÇK {‚-PW—,„Cß4…vß5H’y°N‰ÎÓêe0±ù¬:÷¸=`"§2Õço;ßH¦Ž}ÀÞØ—e¼–X£úéóå] rDg²F×£ïÓDÍÙÃ.Ô•Âáé’/’ÍC(älÚG¾?|uƒláßÁö*Ñ8¹ `ªáÝy Ê{6U­O„/jÕó½BûQ5Ç«cT¾@Whž»HüÉ•â3î™'ÖÂõÍZb øk܉Yz©ã4%¢eŸŠÒmç‰ôEžÉ]ûN»cFïCUÍ;ç“ zºi!Fbx|Å·1Û IöåÔIH<¹gJÛžŠüïÌ]XÕ’ Ojvüͼšh‚‡ýùÍÞÇÈŒMúÌš6©ÍTÐÞ ØüfzÌÈâC둱D[F#›ã›ø­‚˜f²ïz÷¬sš<‚N6µ©Ç6~•NÕ“d}m@N Šr|Ü};\ÄüÌ®ÌnÄ®RdÜ/Æð¢K½Ú—“ï/O‹Ù€"ìUÖZRXèªv)xyj ʧó…q¼d&‚-ø¿„Ê_u2#ú~—C }òˆ¬EV-ɲn“ä=:uÉõ¼š¤{~IkÒúÅ ?pò-à$,ªB‚>&Lâe0¦~íÚ°_G(öÔ¸²áø‰’3HK·Ö/~D¨¬o« ti ´\ö ±GZäòø6‘ŸöNfÍ;ìœ6z ƒzBN&(lã?ýírI„[k–#̲·Nif‰H™Ò‰ùíu/YؾˆgKÐ¥‰ªŒ{q[Lv»ü`‹´ÛÓàô{I¡÷|ö#{®ÖÛd•+*¦ðu‘±ö˜ïî?ÕçmiD8iÔL]6KºGån­Ýö¿šï¼YgqE ¿{JN*<{ÄÈ·W¯fòdxاçâó1s´Z²ÁŠ"ºþ Aøi}N¡R=mÔ¥Š\s‰yNÙ(®›U1Gä9—­þnAæ)…ÞŸ‰u’οñA\#ƒž0›nÐ`p)ýW i”½Æ ž ßîŠ"?RHàA&nö%•>°ø|¼#ëžåó´å¦±ÔIþ†øH’u9È«íT²¬iÖä ½Ê )þZ0‹—ý’Êó^ ѳ]¨¿øhcúôµŸæ§ië‘CAÿú™×;oê*c†gñGqf+ªí;߄śYÆ"Ù+ùþá^ Ä.t¨m¶¿÷1øÛZôP±ÚØÀÖ¾R^L³d>SÞTFu„á RW ~…NÔ€èOD¯ÓXbÞkÇ”³Í|ÛŽ <ú`wg^B0CÛNve“^ꬫⓤ'óD1í.õ†5•&<±B  yµ°f¿.Ì7À¯âÔve±*«5³\ÖxjÇëìøaÚƒüÉÄmÓÉLâïàK¥_l¤éšãó›ìÙfçU^+ ×X` ªö¥0_b¬ÆÊ“÷••ì¬úf'- PFꔘ'Õ‰»â½VbQJÞ¯Çâ£/ ýšý˜ ‚æ…û™ÆëvºJrõ¦]û  æ:‚ø˜¾'Bàp!ß»q(WÞ!R°obᥠQí} &v žg„¯µÉÖ{YвUãÜ÷±vˆýSN,‡yêÓWÒÌøWë¸{pÎ/NƒªÕl¦•$G2³š»ÅLÊqÝó缘Éí];æë„,UiNÓƒ‹S”çÉŽ@šžÔa?,©{4Ñ`S²"³Z™Ï ‚z ˆ´ê†d,ñlWH“ÌitÏG«L\ÓxülxÁ‰[ ª‘΃ µŠ¥¬jíÈ| ;¥$»Ó8vEÍTáÙ¨¡OáªjŸ‰×hÚë*1‚»Â"[š:ñ~ÇÝ–§É䟻®­¹„ë}Ô¦œ€îùAKç&ŸÒ–èIû¬ÉsÆ,+m‰=ÑÒëXÞﮡ8>'@ͯ:u½¯ÎcÈYéƒÖNȨŒH‡k6fŠ8•¥ª§qi”š`[Ïú. œwP8 &ø0SúaJ¸8‰¯ø ”e^‚ŠS¯¬Ž9+ÈÅÞ¸0Œ q0Æ(æÉæ¯!#ÁŒ·òE Dd`ˆ„°6U:ßîr<óVÞ}l ¨ïì=ôP|OP6ÜæŒ–WíÕWu”ŒJãAÒq16¶N„¥ŒeSúsËAP³V7áˆZI{%´?Ãéy?’r1z`–ˆ¤Û—zN/+ —$ÞfMŒ¹t‡.½ž>’ÉÏßÄf6²J‹P_«â¾ü™â3¡os½Ë`ÌzŸ>õ 5 Ôr:Â0Ùç 4Êj¹—î°à@u[nö5Å s_d³« .²‘|£ Ž2ÂS%A±×µçªÖÖRFû³Áö=úÜÀ›Áöàdˆ¯û'YAs-¸N—!)dï„Ý¥¬ÑêÖ,.ë3¸’¥ø|Ø;ë“æÈÎTï.ÖõH91$_nCõ‹&Î9[a»x ‰A¯(úÕ¤ÙU%+wE‰¬yE¿é™xNN0"zµ >­åÉP6ô¯¹ aû©æ_-)ÆÉŒ‡¦$eDõVg•RõR%Ám!¾4öƒm“ÃïêK\•ÕÆãµ×„ˆ ”}pæG¾ QSZí%#vEkåÐëøè’-ÁÔ!­›>aTaî –·r¤gêY ar&¯ðæ{% 4“q w.!évî×—_­–¿¸ ÎÅf6‘ó#¥¢GW';ŠëdCúqêŸFj?àÿæ,%'é…œ;¹î0€*êÕÙ ;6²Ã뢛á¸+ƒàè|¼XЍÈ%ß#\Az䜞!Ì-+g~¬Ý¶@nh;@™7J÷ð‡a4\9±arp š¦¸œè‡Ø¡üà4Z©7ÌCýõõ¬oô>¥j®Õ¹ñ·8a|íº{co‡ÅO½qF"èœú…4‚r‚mæ6(@ÝÄKKÚlPq¯£“ùCm\Øßo½«çÎR,4z”ôÅ8æDÚ=•uç{dDX;î¥?£óYpš_jÐy‹ÒVèÀÀº‰´(ñiʧߌ·lLD¸Ûo4Ñ]ßtå7Ïá׈ªKû…þØ0åÚY°ýyGÿeíDÜ(Ï¿œ„Xª˜vÓÔ°êçèL¼A‰~¤"Ù>ÍÎSkíùrÅ%ËÍÇ.%@ ¹…®åß$DÜ2ùÛ¦fM¬ª0H¾-_ד&ïÜV1ñ{0·T–rë`ôÈ¢,Ê+1c.¼×ŠúâK{;ô–BTc_I¨JdÄ|Áϸµª<ؼáÚj(ùYr.äŸE §#/ÂóŒžä)åûMàcû·ÐÀƈÑ"^[ÿE¡_=¹2Ž/«…ßœ7H"<Ô¢L™iiµ½FÀldŸóPÝ!ú)ݘh{è…Wí¿å¦@sÂ(€9­Êß pÇÚæP$¢D³>NªX‘ú¬$=ÊqS $džhy(@ýdß¾\y]€¬JB+r$¹ÅeoâØ5±ó¥0a·ƒÒ-¦u|Õ.*XÞéPж8ÏŠ®FD%Ô‘A~¶|â5›H-fÝÙåX83qæ'_9ÃÓÈQ]–7€ ‡Ôlßæ$Z§‡;Šú„Ï›bf&Å?¶¸éõÌ—zûfkO´ìë*ªì×[1o‡ò} @ž°øT·f"’ž£É;éÎæQÇ|¨‚µy™Æ¬[T†‰?( V’² + ÉýB¡Y‡ ñ9P iá±Ac ƒ- ³òïFx϶·ü9¬g_âŽÑïk6ñ¨#Bí$m4•ôœPõÚÆ`³SÇ…ÈB3ïŸ_ Ù9‘žèQ§,YI¨‰D¾‹¸.' ªf­öOlÛ)*Plºäˆžº€±&ö&ˆnJ8•¦ª*™c—z+• 3Ûc]˜-¬¯%Vüím­Ü+¤6ÇGðBÃ10µ $âMpB&†áËC üŽíÕ\m©ÁÊÕÍüM%Ž}í„–Ÿ˜4ûŸlÄ× íÃÅi¾z§Y<ŽÄ¼›/²Û7^(J)`1|…m>‹#ÒÕ«"ˆ¡Öç[géw]rø¹ÜyMæf}c\÷äŒúÖì;pY͈DºuCŒ:º"úÔà2R,áiTB$}¡SÀD¿Ýg¯EG†°_0Ñ‹œe„ ÙÛ?3qÁï(]SP¬\Ž[ª$õx}ƒs­é_lÿÄ'W‹â®¾Ç„'_ÿcÿP˜«Éʘ.^Í5( þÝá>±U·¤-ò^!®ØØR~Øn+•_›D¤ét{Óþbå¥>ý§ &Dšû©åÀ†¬˜¥G–B"Ú±®#ˆif¥T®·;©¹±ôɈ±Ëq`ÐlLgh "sÈø}kÝ¡ ð]wømá²Ñäè/$‡aªõ˸KûN]ÔJÖRmÃîK¤âÕ%Pè)ÃsÜÚûÕö)Q–öWÓÖ9V†À²êLk—3åyÎÌó8»l1m³ÁRQd—€ü˜pR§µ‚Ì"T™Ú„¯Ó~”ebáÖî÷ )üü@'íîgŽKß9͇v6³²zôJa¾#•ß¡ükÿ‹ÀÛ×·*ÃF» F‡îÕ'¤… kÒL;Y¬¯ÉíýK¡,1ŽW–kÍúvøñ2únTøEyòhï(͹TàÀµ‡QÌàåå»mˆæº¾§À;ÉãtY¨nª‘&A!RWºìü.VPöøÌ!do¦h rŸª'—;×·­^kûκ3½wôT¢µ>‰6$$Ã_BÉ`7ICæl³ï³ ƾ/IJÇ.ÞQI/É宨¶p˜]ï7¹+nÞÁµ£Ájàná^æÂÊ4.|¾|´½sI+²kË2 KÌÅVª70ú¿¡S¯ ïÃBm•׳KUš‡ËÌ8h=»/»AØL¬¤ï¶q»†¡ï¡”„ §ÅŽ Ž] {ˆ´0RG)Ïør }h¯êþçukøîWı¾~üÔ9lï0ò˜üt–—Édøk!Uº{ Ñ™I×k$­±œòkù· žÑ{¯±ºO´›&çªÇ`]صbªû¥›› œ„Pƒá=ÁHÆšó>ÞÒðâ^jZKìG,;Ú4f?Ì^®‚P†msl¹$³ÅéÉCLš6I4½gE­p¢NÒ˜î¬ßHn&3xF˜K©[ŠÔï—šÌűÎSc º/Ú¯ )Q'62‹Ô5rh5Á~€U™ôÓ§0\×äÞ}äbQ ±üòrÏFŽEö:Éð”«pjÞ@U5X†ŒbÿÃ'*b‚˜b_*ܳWŸÄxçÞ²ó2¾Ú} ˜cAaáéòZ”¨ ØBÌ›‘Zünøšª£;奆‚ÍìNLjTJâùd"ui9›o嵦®Š3Š%-ΛØÛj:0i~gmì7F:v3ö› ×¾dT3âóрȼ㛖x(ç¡ ê=»ÖÌÝ ¤ÞÛào©5ÀýZ 'öøà¡æÆ¬:r‡i ãi›ù¤[¼Ð/X£ðÁI k¬d‡û¼hêâb9`1ûª(„=H+ ‰e”H‚«':ÑhpÖ¸/×\o»ºHu«Ôq•4ð˜dßm¿ íšG••‰EoqD>–v:o¸¤À9\øª Z|“xŒ¿7‘«×JO(àC™h/­³Ò.Ü®áú‹l?×°.Ú`» çÍpV‹ïkx ªÑ#iðôÊw"‡ƒÃ™0×`Íœ×ó_vËŸš5÷t)äCÎÉL‰£H€NûßIÍË®‰ÐÜÉâf?+¼%*$Ò™õ°: t†•ÙPc>ÂÅìYNr»ËðݦwÞ6¿owÓ¶pl?ýØbKVœþ«¬dÿÝ|L–Í_¡iëðÚ#iíbA4óä‹ER¨}AÙ—dÐ^ÿ€$â´¥o¡föZ’£êWq¹B5éUÁ/ÐÐD n¿Â-ÿ”ÐøæiQv¬±š=÷¹+úeIüÄ:zœ¤úiÒðuqà„Dè´|ç‡]Êä7 Ïœ5ej%ö½ðÕnJî¿L¿ùÊ·{7l„Kü­ö;’Îlßë#ØëF%Ö÷ xK+-~*wÉ®d˜éØh¹l‘zAN -3•ŸÏ`&WCKÖ„"s)TÝέwp/g ÇvJ)e!§lÔYxÆÆü¨yp¯®/uŠHºýnV:ÑÕ‰ÙçKÚKHa·T‚B@"¨'ÃöbT[z^MàôcL>Î-]035ç Œ›ùÓjÜ‹GÉÁOnT1Â%‚¿Fr:_™ö¯[G÷wç‰r9¶÷Ñr¿mÐ mVŠž¡ m€‰Sœz×’U9ª§ó´ÆL|fßü:(åÖ`ébæxò#Þ y¯ Rw”UÎQê•6¬Ô¶êòò+b×bx‰áÝë¯.OmžvM(¹¶×Ð!-¼ìŠÊcÃèö÷`ûšð­ÿÁ àO×ï>h$1³$¨eO1ŽÄ6»·ˆ©YÝ#Ê{e4qSu±|Q×ò>5æQ}E¨ í×ÓP˜N”Ÿíc/Î~%†åÍu¶>Ïlmó¼ËU·ŠewL|#œB+žØ²ÓÅÈiâÓ¨ñÓDÓ«è×þþþŒ¶,_bë¯9ûþÙÊŸêü÷´à«?W;u(y“DС}Ä ®ƒ!z¼Å`1z²v‚Xb¤ 7Ô¨7ghKBƒ¬#lUp8ÈäyûÑbÔq¹ª¾ÂÿÒ1bõÓy„–ZRƒ¿*Ž28^.ç®ùÀ}¼´û(1>AGmybiL¿òbe*‡JÞõ´ò1^°MÚ‹S?CÜ#%;Dþ{çøÍ£ó½f’äœ;óëýjÍ„ó6gQ½_>_s6ˆ‹‘x •Ü2j1Õ=hüQ­‹×”rüuê¢l­òW]x×F×[z0Êw†F1 —×!´ yžïvÕ)®UFB›x|wj„*Ÿ>áÈ2P™)šöšº+óbÈŒÞ e¾ö= æ ¸M°Êü˜“rÔ¡dEêÐÖmx¾Tr…Ú³·Ð®£W…ÂSÅÙ+›m=¦êȃ£Ãbœ‘"’iIì-ᯋ©ôèvRãÿ¸ÇçYJûÓ3ˆÿ›AÛ㔺åÓ%¬li…Büä@ÀzÄÆ’„}7+Z3 é)j];CÛŠ&*°Áô!r_`Å#_#µå¢;Ûdmƒ†t£|äÄ@Dè60|„®ÀœÆœÚºEQ£-Q^ñPONÂÈ—!ºå‰øÙÕL“Àv§;yšzüÙ±o3C‰äó8¿2b`³Ñ™Z†ÊÖ‡Z.>e:ËC/Øõ ÒÝ­‚Ú6rÿ±PzâKÚ=?Fùp$˜m‘©îlZ¥9ÒÆWvȬ^ 'FâÊùÕŽ²bŒî< œïÕÝ£Aù…Wuï?'ïO7}K“2ý‰Ÿ(r׌žÄµ‡þ³hUA}ÓpÁojcy~Ï÷[bžQûGÉGU߬8ÙmTæ¾âê’!Óm鑘¸r÷”ùfE²ŸŠê•h¯œ€~ŠbÌ‹Š°jÍÓâ˜5•Ê-|ïûYÞe$‹sóŒiýàÛ‚½¾Êö ’Nõ9Ún©öß9ÎWUa6–ýäé½Ôgˆï£,¿YkU`FIsÜ2¼XFÍÂ[ipÑòþWƒnâWVƒÛ9ٸŦnª ¤ð%¥ŸÔ?}æ^ˬåa/u0š©+ú‘v“3&T•æÀEîÃQg‹µÖºù¥/z62Ø:4žå_à1¤ÙW´iuà4B8:aVì¸aS;Q=2>áÄü Aq¿Ç …¼ð«{Õá´Ãš³°D§+[eJ·Èb²;ì.³çDØÕ+¥GnŒSüñŒAßu RêĸïŸmY{û!ú*zt[(£Q1&G")±hü)ò©„›yf¾ï†p‚¿à5®ú£ÅX\¥ÎCÿÑ·¢BN”²%E+ê·® ê*õi§åÇZ7D5\4DT‹¯Î¦PüüÎ]¢QrïnÖÅÊ©vÞß„âÒIòT À ´œY@ϳe}‚˜'må(L¢lØ›·Bû;)r„Û2d*/=¸ZÓi¤ΦÑ­¸ÁæKÁ¬ |7$2*§ýa­‹ƒR0Æ’ˆÎ}%²ýóC‡`ûÕ»XCšûh¯€”Š˜W³Âóƒf³gtTÁ aÑúäM)”c«àª·e¶zrâé¯‡Š¥ì»´;õúBÒòqµ„Ê›¯;%¼ßÜÔJá/Xe \e ¢Žg7æNMјQ¼ï‡ëÈ}޾ ðÔK“2_ׄkè}‚€¥ßuj}ÙòÝU1Œ‹nxÖefÝüžÇÞ{º(™Y8Á›sV‹‹ÖõGãg”Œ‹$j¡Í~‚ÍDŽO_êDø¨äX©ª÷déû­TŽ“#~ÒãçËsŽ´ü}$¯zö5‚å:åÓý¡ù™ƒ#µ¡¯o4¯nR»6¢Í䈳gà˜Wf5ïü²HF¤­ë°YƒÏµÝ–Û´E‰6Â?`¿ìb9±ÜzèS¢v1lœt”2­Äóg Ù^ê_ÝLJ­AƒÓN)ѪüÈ­'Uº¤¥J 1ÓnÒ“4$Â$Xeد—ÔÁ±ØMi ¸r‘ß³LY¿l'°ÍÓfQ~s—¡¿KýÚÕ ¬l©a˜,Eµ–E{gCáwJŸNAÞ(‰ù}’ÍÈcØPb€Ž”´Tð$ $›ÕሦÄh=—|Aœ#}"A8HÑ":Ù/¼ɈÀßÌ¥Ì~±ÜøÅ žYÒÿƒWê €Ü Ö´8›?Žszºbmâ¸ÑÛŸ©ð1Ì×»J8Ú¬&§Ýr´8ÍÛEÀŠjõxßÒo8É8à+êãÞÒ­7+f'ؤ£KÍnÍÑ£Hˆf{ƒ|gÚüxßkD•Þ<ÏÉE•F‹ ŽQ.}÷ÊgóËÃJKM Kv‘Ýõ×j…÷VË{«°’Šù¼°ã‰È8\m˹ŠLýÞrWø ?–ØT÷°¬&´²ïgù{Š~.ÉÑó¼Wt‚Õçœo3ê<žÞäðEø¡yø+Ž qã({ “ÈEj°DZ‹L4*•°Ó¦žW®?ìo ÛÒûÑq齩ž<”EéWti²ÇO·óÌå¡gf¹YË…UcÚ²tZØFF ”¼ ªáÜÔ›~óðBLÑÏK)“ë#”¨V@þz÷Ü ¡ãÚ¤ˆ²øS!ɼðDóiËJ”¾ÚòJлžÜ±‹‰Z5BæÙ¢„ó8iŠ%q“u[B}ËPi~À|R+ö`„áklLÅÌìË3#ˆÐ¸1’•ô«¢¿ˆ#\ÌĆPYvðýgbÈ …¯N)óÄ©U>ÁhH€Á›Pø5³u±[¬‹9oˆÒ:p”âEÚÔ…F½2'Õ«ŽpT+WMVI“ƒÈzºT­_@`ò†n±» UÿΞˆ-?Üž´0€gTÀ]~0qÆÒç튃`Óî.0ú± ¬-ÒdncÙgjož±TÎIWcÏP –ž%¹>dj«¶_…šfމŽOf í´hâQÌ òqFyýuã8_Å|©ÖøÞwK=÷ª„ÄQ¼!Ð:!+*÷”ñ^OJ®ßÝŠÚN8õ‹’7Úb©ÁA:«^Ag!éwC¸LŸ„§ïxë%H´tGÆ3‘’hB2ÍàŽÚ¥¹]QMñ:Y ÿI¯d?ÜàŸ£]@äJ2…–hzQ¦7[_ÔÙ2Uçõͯwz”ÞvF|úhô¿þ9}½#0%‡Õò5Y8S•íÐÂ&HÛÓð5Çõ,L³Ù7c„Ö1V™<,†Ï{v Žäñíoâx/Š«_{Áˆv´`?ÉŠãÏš•™šWZ«„IPÈ¡V s¦MÐ:гÚPc Ì©Ê «@‚±Mšá>IRlÿ£Z°ÅE–ÞGü8ò"!œ'Œqä(¶“ÿŽÌÕš2æÅtš/åe#›¤­ú‹¸q¦Ý¯(µçf¬«”»î¬DªÀDñò]õåùQefb!aãפNWßzBýº v†Ù?tTIûg¹ôN¾Û{I§™¹|œÚdäöЩ/Ç7¿º»­¤=Äh?Aؽ~`>Å|zàR’ž” ÜÕ‰oò¯Nß.™m»Â)£ÏÜs<ØÐ¦¢Î•$ÌÃá5a Þ¡0¾špÙãØ-{Iè$b)œÈ³ê5Ìé±!Á¡AÐÇOx‡J¦½wWꊊâ“Àõ“±ðg GXd}«Á±¨¢–(TbS.‰ï%Ûz +O°$)C÷xèsƇ«ÅUîC]ÒÚñCôv½g-'°^¦ä"­TŸ3:eKFzÎï ÚºSÙòšŠõ”ç5`¼EáK;Œs€fš˜q-þƒ5å£#Ò-3¶*Nà1ÁB€æøQþ…÷° UW½2BnvX ¯«JôKBΆªÁ„,Ù…Äü¼†H8àgÿ2ŒBwΩ½%(¹ø\æZÞ´šó­Ëï*ü¾ûÆjW5:…˜hSL¹¤-¼‹BƒßÁ•3:+$se·j!ǰG3\ƒCŽÆL„v8¶N¹Ö¶4.o²R’9¶ñK‡zß't©œàû=²_¾´:GQ3Þ£%L¥ídÕǂ彀wYùÙÎtœ;¶äåâ¢Ôm•BîÍü–L•å"1 &S–ç¦J¤–²äžœ1 *Ây¯•빃žL¾ç(aóՀʤ·m6hfäòfÜ/R Ÿz½¶ÎЄïóA*‰sæiÄ5/?h fH/W†©yx¯Îoת© f>øé¦€ÌJ~6¢TŒPÛ=xwXJž|¡KöáÞÓ=>JOEJ*»FzY-tÙVòv¦ólƒm[ÚÔ¥³¼±ÁQP4¥…°nLÒ¦ÍÈæyާ—ĦGmM¾øЋy“§=„v´[%TJ¨G0ÿmFë*ÓË”†üSÊHئl0§—”jwì ñùgê™jl#  Š~È8°)ßUì¾Ù¤ýÔ&·õxPo•nJ›yU -o$\Ê×´/Ða‰j‚‘á=¬%XcÈ­Ã_zÛÁp;î(Ì_‚â†*awŒ>G#Žó"Z3‡yí{!¬ ¹^WúéšÆ›4=ÜÇn”‡B¬ŸŒ4šKäK_ó¢¦^÷7Ï·Û%IÏ̔έÌèNE¦…¾mÁ‰›Ø„$8çÄ®bH…-‹šì¥Fuh3aÏפ‡~ί¿Žb§¥cì+ã.Ä>äâá1UÖMæ75DŠÑJÂä<õß ˆ8ý :Môܽœ¡‘Šýô¡&¸úvx÷ÚíÐ%Þ#6þÈGã ½çÙâ„ö%%+(¾ ÷GÑãÛÁÈØ¾‘a}*GŽæ§p–N³!‡i9W&'ýf7Éœ›ðøzìf³fýìaâ„Á'1¤Â­=E––d¾D–r ïÿN ßø endstream endobj 172 0 obj << /Type /FontDescriptor /FontName /EBUEXZ+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/C/F/G/K/M/a/b/c/comma/d/e/f/g/i/n/nine/o/one/period/r/s/two/u/y/zero) /FontFile 171 0 R >> endobj 173 0 obj << /Length1 1673 /Length2 9406 /Length3 0 /Length 10478 /Filter /FlateDecode >> stream xÚ·P”ï6 Ò t,ÝÝÝ-Ý ,±KwwŠ 4HK‡twHw‡J# /úëÿ÷ͼïìÌîs>÷¹Î=ÏR“«j0‹[BÌ2°+3; ›@RIÀÆÆÉÂÆÆLM­ rµþ)F¦Ö:»€ `H:Í\ŸeRf®ÏvJ0@ÁÍÀÎ `ç`ç`cp°±ñÿeqH™¹ƒ,J,è‚L- qôrYÛ¸>§ùë@gA`çççeúíw:ƒ,ÌÀ%3W ÃsF 3{€ÄtõúO:!WWGVV3ˆ³µ=ÀäjPºÝ–€_ ”Í€tÆ‚L д¹ü!×€X¹z˜9Ï{ìòìá¶:ž“4ä_Tà?Œ_ÿaÀøólì,ì‡ûÓûW ø·³™…ÄÁÑ ì[¬@ö@€ŠÌkWOW&€Øò—¡™½ äÙßÌÝ dofþlð»r3€Œ¸Àì¹Á?Ûs±p9ºº°¸€ìµÈú+Ìó)Kƒ-%!@°« ò¯ú¤@Î@‹çc÷býc²v`ˆØçO`[ZýjÂÒÍ‘U rrÊKýiò,BþGf tp³±±ñòs€N §… ë¯ðš^ŽÀßJö_âçü|!Ž«ç&€~ +à󲋙;àêìôóù·â¿™` ²p˜­A`ä¢?‹Vàçá;ƒ<lÏÜc°ýúüýdôL/KØÞëóßóe—”‘”Ôaü£ã¿uO€3''€™ƒ› ÀÏÅ àåâøý7ÊßýÿÕûo©ªèÏÚØþ (¶‚øÿháùìþjÃýOVÐý¹1ô€ÿfP†¯+ä_ð9™ó¿às6—A«ë¿às^·ÕýÊë7üϹ[¸9;?ßG¿7ãy(áß—è ´@^š‡X†ÚÖ†¶ÝV‹y0ïMÏPïé¤Ñ3û,9·»Ý£!$ÓW½Þp¾OîÁXÝ‘¦»[&{ô9üTÑòN­õ‡ïƒI‚úÔ^+òâgÜÉÂCñº~$bfM±}ßG'_í ;˜OÐ Ô¹Nn|hªùØ·}²žuýe+cáó{jûU<Š(eÓÌqZ±†AųÔyæYsøð®Ì$ˆ Xgžè³W×3X9“Od ŒÈ~GqœE>ú›oîæ¼×*49\º¨ôñI`®°Æ¦h|$¾¦(à-ø”|ˆÁhfåÈTÈ2:ŠB^T §3Þ ìõ±PìF:ºÞŒ¦ñ†·îßúÁ#žyË´IÖ#Æìë„éÉzv ·8¨C’†1Y,^`è_wúÞι+Lgà‚ÌQÇØ:Ö?E¿y圊ƒL' ­Ÿ]öÖÉÍSc±°»ãÌ:_º?ʹ—¯ABSí`CuF4Yv9?nE5·}-³{?UÄ4Æñ{[+Vœ šC°Ðm켌¦ÒöIí¢%¹[”» S^ú²íIç±äšÕº[©7~ÖvNüYrXxG¨¸ W>•¬â>‘·"·áêaÇw8)=4;:sW\A_¯<·m¦Û6¸"Hä=RQG…²¥øæÏô8µñ¾ºg N}|”'ey{€|^‹Ôª5R’émdzØ8lÑéˆ 9gÒ¬›#3D4]gÑ´‚'â¹Ç¤³¼'–W燢/›(øÉJÜ¥ûî&°ž1ÇÚlbYý„âЙƒl`}ñÌV:aE‰8v¿g•4ˆÄEÚúèûtýÉ—Ì‘(U—/‚0Ö5UmïN–=¥5âÓ“.»üò©¬ßŠY}R/¢en›}À|bÒëyÏ©‚¢n3îž ’ßö«ÊÕúÈŠ“ÿ¢ívßú i»ê Äe2¦Ù?è{´°w©Y%ÌÚœýE‚áÊcÑ»ŸhÙ¡›‘è;ta÷%f‘aT~¬Á,±f„ Œt£q# üÑ7íõÂH\ȹç‹ ³R9Ôâ« \åî³+iK«Óˆ˜è|ü¬9©uDlŒIf/ãdµœ¤bt²@·²hÒ›/Ú¿f!û t¯¾º’ñ6‘÷ÈY´ û±¿Pù@-”¯S%Ón._=yÙOtǃ93áâA>™$‡¥ÂÀ¯42Mñ¢&Ï];öêcÿ–½Uq ØÈÏr*>Jb¹Žô³œÃ™4-g+˜ëêF,®ªá÷j7, 4߸ºˇ/ÕŒz²ÂD±Úd‰SÑ ®@Jð½ÑŽq\_$žˆ]þ­:_áËÂ<ˆIüàš›·÷)9Âb;Úv¶@N@{ðØÑ[SbLŽ‚ªRMœ™çb¾®rap„ÓÄŸ]p캵IJ³y­8 •¤NÑ&¥É žì‚ÑËj˜õ'%åØÅˆdTDPP.4ijšN¦ÙRF——øÕç±_n›,tÇ$ÌÉŠ·_Ÿ ¡' ·&—xëèiö¬„잸’÷°bD``šz\äG×µñâ.°à¤.´É8&ZçµeRñœ‰hºZMÓt‹l^îPìUSKö£½Ð•×*‚ŠwôÇ+A LœOî.}˜n´^;®N)¹'ý—­ÌéDDX¶9áÖÃ1ÏÆV,ãm£»y…fVŒ¾ d" ‹-‘¯&9©ê‘±|y£NÂ=¿,WñÕÐ÷í1öáæ€¢w0p! Dç=›â¨T¸fz9JÝr¨ìçÑ‹U͹ÓÔ]»[xÞ…ÞYæ¼?»`~6¨XeJÐ×ÀhMIZIó±Ô¡Êë°ù¬oÊÎ~8 KúŠÔ€-Qs=&­NàHiÓº‰vй­h²qÕ©ty½ä«%½ž^>Ã0~ÌпtÖ=­êéБ]íLzðj+†o’UwD“ào»z¨«ÎK[]Ž í˜@Kˆñèà{}w'ð=™¦`‰Á×öÒ¹qùÅ"l5öóê°ëÁæ­ÚW0£³ õ­Ó†Ÿþ£c»0±üO”´Dð†ÅM¥ÙhË(Ž ÜÜåÕðÖÞ0¼oƒ¬eå*#'%é‚Þ,ÍüX®caΓÚ$@'@âk•RX_Ò7_¬ õÄS¡i= îרÞÄxX?@õBh&®hË8¬F œ„’ÝßßÂÇgر\ŸþØ“ú@ÇV‚¿Æ%¦+8Åiñ½õi¯v´~ÑŽ¢çÖZf>·ÕÛû¹ù)Ù¦€!aJJ½s›óGî•>í77Ø8µ]Ìþƒð'E|¥º÷–ÈæcéíÝü5ÐÍnï¢\4õlä 6HÂŒ,×z„>¾äÂÁ®ü|Uv#ü³àÓu¶Û'Ý auÈŬi1—õ¬Úws„E¦Tج"Þæ¼KÙ´¶_ä à™¢¨@{¯\?¦vz:X–gÆ8 éÅt* h•µÊw¨G¢/–ÃÙ„¥éËèUS— ¬…íëæ5Ö .î=ÚÞë%â&Ú«éÌz1<é™P 왯aüMÏ_+ü0l‡øKÚ*Ú¯ù§·¼Ÿ~»é€ç8"3§ziª<ðv©Z¶"“ñˆ=P¼íñ¥¿ø€{kÿ¤Rj3 ßȘK¡CVpf{QŒ IÒZ^"›³Ø=*l¸Ó%iggºm÷lÜC×}’ÌÈiV:‰Ð}½CÑ%Rš¶–Ã*jDPòà6Ñ› v*Lj'»³€à­w†Ùš·¨OµN𿦖SLøá¿%ÃL ö,ìÒ ]âðÊ9Å9[ ‰é/sì¹¶ÙÂ~W+Ö˜?>®?§ž8U¨‘œí]û.ï÷º+>Jà£òÞF1cãë».º×}$'I•1©Ø9,Åx¼l9ö©¶Ú“‘-Óµ@ùLž#Ýʼ½+ÚižßÐך“Þ†Í 9¯)£×ØBì`Å#[Òɦ¢Ã“Bwêl~k¼™3yÄU[†Ÿê=€Å}ÉœSš¹[Z[²Ø°3£Cò_ÈTœ®ôB’—*WMÃPnѦ2ì ß§óñ˜p( ëàÑ(Pù~^ en_*;z¯^qåÃD:‘Û:Â1î6u²À¶Õdwª"/²õ\Fª ÷Êæ.3ø¤åpı[rãËz—` ›þ-]Þ]í]:s¾qÖ.ú¶w†֪ï +’šÎ½è0ð^FŠtXwR~·Cõ°ìÿ2Ú~b¥Òû5vÚ„À—b‹öSiø½Tá~/d_(ý'ÆÍc» ’Àü Êl7¿4XþU~›­R~µ4¬ìç;ü"l1¡Þ$/½#‚fφi~é¸/'¦–ûÃz#˜†C|u0Æ>ýspÀ1É– Ÿ}#`/Â/ÑI†äl; /V{…µûÄ?>SJ€ï¾¢¡*ˆ|¼Š—z÷Å‹e¯ûƬ¡vÁ!|ó&{12LPpþõiŽN‚c$–›#²å•Xņ~•x¶o Àå’wMÁ=ÝÊYjDv›åáº9ˆö-×z^¢Y›%£KJe8îÌ;ËÆUòÀ¢if"˜ ¦TQÑzí—qöå²Yã’‚T]y%ðe®pGt jÓEXȉÓÜáëšå]V“wÍ—cRüò­°ˆ3ù7¬’ 7¶X*¢Tä™솪.X'¦ŸkÙö(^5¸RŸÝ#[øÈ©Z»ò­8¦cö^-ë›{ ’³AyÉꬢ«7Ç¡ÌrcÄÜ„˜\ÏÍwls$‹Œ=†œ-cñÔeeî^•¼Àô f »jÍ2¢©#HIÒõ¯˜˜îÒ³\%P–Kj DrGMs¡›¬Ô¡ÎÃb$NêÞë1èïå‹‘z˼Öb—mÌyr=9T*³ú¨,z08Lk!JbÓh0çŽzgá¡)8îm;®Ù²fÅ%; yÕôÓ ji;K³«ÔªÓo "ƒÄ%a´p´$¿©rlmjrlX­HŸ5ÍL ]ª<†RÜÙj–ÀºH¬Ãó+õÍìgœY"Í÷ñ™ãî¿êV—xñßQ¾‡žúêOT[!­4©-Ε¬ôæ0WÑAÐJ¬®¿Á„déÇ¥¸QÎóº<¸*ö0 ¥Þ ÐËÓ À‘þHÉ[ŠÆð¬M¦Nî÷°'ùR‹þªt+©8"Éöce#ü% ¢x½Hß\*²ú«ü ÿ!þöøpIV¥®š–«/ü¡Ëh_áàäpRq†¦„eU´¸l-+Ûê,ù†¥ˆ÷ U·@ÝMåœÛ©ª©CÊy¼©7/8¬ËËú+Õk¹kìR[Èú®bOCEçff·^ø@¦·H·" |Zuˆ AZL ûìvð•ÜÑD4»ÛÂ]7 iÜß6 ´žKV4(ô!r› dÔè\Ë7ýRD¢2ãXC:Äc#XxŽÊöi]ë„–Íëgà®\ož}¼­iž .š®§f#òXëýC7,ô“¾èw„NY˜nÚã½T,ûÌ¥Ù½!nª  îƒä×o©|»ï8l§x o\µÇçÍ=¸ë¿“Vo‰¶Þ‚–Çÿ†nûíBwŠcû#«£]ýfíˆÎÒ£†ATÍ"¼\ª9ÐŒöb»û¥j$Û¥òû’)xIцO›Êþ/ƒè¤Ib,e„„”¶¾^ù¶¡ðjºX™ë”D[Zì?õE¯D¡ª6³$ÌÞT­ÉJæöáÚ$ñª}b²gSÒŽx@ŽR%ÅÃÄ [hxL»Çq9!_c…~¹Ý¢öúb ÎrAê [´ÂPn5ÑsåŽb\'¤þÔËT¨¬C:À¹¯¶8E,Ò¡<ôåå\ôkõMÖÅȶ ,k §¡÷ó(޽™ñžÛžåqè¶Ç%;4Ls6 ¤>¯¦z#ý[ÌkL¦MŒÆÒ—èãv!âJ=H5‹Aý°jv˜a/ø_§?ì‹¿Éi½Vp¿b\÷ŸH’›>œÓtX=©°B>¸G] ÛFÕׂ>¿eÍ8,ŸT6¾0á ‰ ’̬š@óÚ‹%РD›jB ÔЈ-ðÊÙNjÇõ“æÑÕ~¿Ï·—‰ cìѶxgæÍhNêÎÔË|Á*qm*X™Ùtkê°Uâ.Ld显{=X,RªT¾mÉ• Ò=ŽyëG‰¬dŽ­*~r#ƒÏÇr»KÃn!N™‰G½*! _sùs`{Éïq!B`N–|_/å”´}ÿ T€]6«v¤`Ž1‘ñÑX3s¦áe¯­Õ÷ÏÀu=ª«âvZö“×”#¨ü¦Lû$ñ²Zæë™¨ñì¬é‘/$Ážy?ðä:™à*{ð£é ér Ôt‚äK:ÅêYëÌ~pÌJ%:š>EN»ÜsWèMU]Ϲù´ÎÖ%.pÃkôØù{ÑsæîÝÐ}}Ê×kïî'm,/ÅÖË®ùo®õÁ³(š’˜4‘¹©¥±áÅü¡ ‡>é;1âmð:uû©FÜ1ÎÒîK{‘”÷tÄË6çyïû4»ì51t[øÓÛI¢üSï¹$"φJÓ¼ì ¬†–‚ý³«œÈÕ^º:ñ«¶v¹£\)¬yT%˜Ò¦ƒYJO@f½e3âÑQ‡³¨ŒYÁsy`>5è|^ªpÝã÷çèTŽ»p(6-nï(O@×Z³¼‰!ùöJ³ëFKro©>Ù8IUï$¡ dK"à3·ÚxŒyÆ â¤ðï¤Èš ñR?2£êµZ jÕ/dJÆTŽO?𾸷±†ÞN{8«Õ@õ 2jMÚÇ2åj¿${-FTNÉ2z„hvÐ’ÿÞ‚¼º6l:Õ“/7+Ôñâ!Q‰âøFCÛ ÿ»C’NuÚ{1ʩńŸúaÞª8âeˆ°á9{Fõþ‘f†“¨ ÌÅ“Oíá ³N.#e³4:üƒÁiœ1òÜxä4õC¸ºQ±¹œØ±‹Âdç¸dßu'Y,WÑÊÏwnywÒ³nWòS¤‹ó˯ÈÃ"Ÿ†O$–£„·âކö‚¸Q/_¹®L³ªà~®×ÂzÊØçð*ÑâB\ðég:õ³ ü~­L&‡­Æ5Ú·¢ K;‘±}í«®£9‘ZŒFÙL1­Q&Û†b‰’ìJ{±z­Ž$’l¬ˆt¹Ù§‘­˜Ž%„D¨X¾ )ý°­¼@Ò£Ô'¢£æàŽÑV<£sOœ/ ÏĵUw8%¶¡ÞW’1„KV›¥ë×@Ϭ;…¡A9ëLq9}ŠnæÏfX ±D9tÁÜžÛÎ|‰néÚð:ÀØù!Ý΀û(G$“ŠcÂ}m†ÆRgl,×ãö³&££žŽü¸9…k“þ«t¡—$uQJvyâ‰Þq#ß»=[ÃÞçpRønY:¢ºmèZ6uB‹ Cz(Â]×ù†UÏŒyøÅÇâ0ú¬†nÐ÷ÁŸ#öo½ìNo¿Óä(–Íž9k Årõ½Ñ@œl¾Z6®Qåwª ’!]ŽÇR¾½³#ñm7ì'³8bݨ_L3b¼ª˜š÷y7&¾‹¤”ŒÎ4ŠG “4ÓEA ¥2ŠxMG¶#a7(ʃ·Íôy6 u#Ha¾Õ L_öÝÛFƒŒ{c±•¸¿ô‚yþÒ@ ª@äEÄp¦êSܹvê~z=²P 1YCž½ ÉáÖ{âb?1‹u¨ÂwëÉ¢>øª‚¿‚øÒ"{u¾«Ýf0æ£ ŸOúTðÈpgø)ºHÇË8eeoï~|§ëÔ¨á³ß7öªTãÅæ†okŽ—ûMî_¢{ØÃ»Ú½kP¡'³Z›ä;øe(~X‚?v.ž‰×…ë“óîæõq¥©êÀE[’@O6ôy$ýÜÈ•"ïX7´ÏàV%ãR<¯,`^›tùì+­¯®ó*_¤º’stq¹ß < {xdÛï9Cc_á;aSÃ¥I¼c»Œi$Fü–ôˆ¡e.È™ßT™K …¦ºš¸ãìË‚kY>{NSO‰k÷nŠŒkE¦>IÛxˆZ“SF~óH(91J†—ƒäÁô&sÉ^âfxl3–ÆÆÅÈØb’Ÿp™ùR¬æp슱hûBºUŸOæz#P£÷1ØÑëÛ˲ë}6½%ºEÅEo›žhHkØÎ`æEæ’JS+197ì쪃;;ÛØ¥RºŠ²ŽÝVAGœ‘½FˆŠd#&¼ŸÄUè‘‚‡„æ…,j!‡5!˜Xê˜]‰ê+{9tç­ÈÑf¦Ýµ-á…™”{„㉀Žcr*-šÇw{9²'„×7ÞT7ü‚Á*°méHÉHœÇfºAÉzuFºÔçy¹§N’´Ìh&º‰SâüXĨ”†[uÞÑ©µw7Üý“P43°H²lTK¡ì µ’üìeY ¹e™2p]@C±×»bßQ·ݶ+6_®0dp›'GÇgÉ™Á•éq³àNøI*ÓGö-ÖÎ)/µm™Y¿Ü"ci4ôCTgˆx*>þX$4[oõEH¶8c½E5!•y_ÁÄ_ÈLýãdúmö8[h7öûžÁjïMX–>\¿èXMÆ4†éÁ Wî <}ˆÉ8Fžªè{!f‘LRBQåäæëøÞ¤k_7:>ïá‡çÿ ÷&Õ/÷3˜¦Î€O…Ùå%±•ë·ªÉ>ÃV\ÔŸY®L”Õ ‰«þ’«>µa¯m=Ooù'nµÅÒ‚‚1¯º]n hi%¿T"H³ºþ%‰°BÔ¶•ŒÀ™ÔÁc·w ‡÷hȤí}V•ÜÕ}'ÆÓXî--%•hÂ!0tTEð>ñŒø‰!6Á(õþôë­p®iÕÊZÑxÆÌw¡×܃-Tnü®ÛU?#è°7”SZiËÍ}î‚8’êŒ:kMµ ý4˜­mS*î»§ˆÆô‹]é$™kÇ÷_su<;×FœäþhŸ-^}Š ôÑa|Ï!쩲 DÜÎò]¶bÅ£©"ÜNÂÿd·úMË’ÉÏ£åX{IŠD¾jÂ8´nò/âí«4ÉdE « Û^!Ó~Òs£E;® *›òÑ(¬³;ó‡>ß ÷±/–AœÌns_V‚FÃ"?ø¾ä(ÏÐ¥øÂ.9J”´ãê1S=.Rãa¥¢×â®pŒ2³óx –@k´5(—Ra$ƒ³ipþ|(èoÅDŒÄùy²Ã­8G×¾¸Tçi”òß騥 %Ëhûk<ÈDÀóYÒ7tDúGWƒB¨[áê´%ëé¬jö¬zªZÄ<¶Lb®“ó†À² ;½õ^2[É{.¦e¦*û\)z ôŠÓo0ç=~ŽZt,CD<îÔÛ¸äèϧí.z}úýaÖRˆj’®«)¹Ç£89Q™c&º÷$·zÝ'orq>°D·½?%„¦Ùƒ²2OpŒä‹ÐŠ˜#¤H4všú¥NK¯±3:žϧô”oý*ˆÛ/Ñå§:S’†tÅXÇì»9˜.ÝL¨HÅ µ05±ëDõxæXŸšÔдš4ùôp_$1ßpû»~NãoËh¡ÑýDÓ€/£9®Lw|`„x!–Z£=8#–ļ«Ï}'u©}º©ä˜k?y‹ƒð¾ÔÕ0ÈeñGÀn¿ó¬ŽG¤G@°' `NYt†ÓœÒõˆ3k㺸Œ-ñÖ¤%…ý5³Ew%ïc’KN¾&ã[¡M«8-˜@}Jr3Ó€Å^“ýPƒÌ@AsŒ¹ùrôd’ƒ;«nU3ý¾³¢w4HÂìÄZ’¨ù‚÷?y±ÙçïdI8‚’0‘*n2Ú<>Ìëq6¤´•ÙQš ¯EÎA¥¬»ÇèúËð[‡µô×Àj휘ƴ»¶¦ ãjº!µºEÏü8µ,“4;” µ Yú}ýö"ˆ±±´½ØìKõúÄ&+$ŠA5LßJ½¯[Zí„á‚ýŽ•{ˆ¢^Ôo†_ÅúËɰêÀ°6oÎY#Šž÷³Ê¡(ê©xP Ã.ñ$™¦æ—uÜ,ýw%ÀÖjŽ©«:uh–ö™²ÔD~ _-KîÎÙe‘u ÓA-ú®×FlA›@¶×Þ©î?ÇðòR¿ávX¸µ'jî_'„ì~ž^ù™¯5Í>ÀgDT˸È>`™ÆÇ»¢« Ÿùë¨ÓÑ€]¸q (¬N[HWÕ‡šÝ w‰%ÇCœvòß~2Êw"9ØåÅŸUpEêíTOçÐÿˆªËsn1‡#¨ú ´êÃ:3- 4ÆW÷ ©ö»Q×˰ÀÑ”vŽš+‡½ã Ùvð’.ö#»ñ»ðêÜ ,Å ÂþryMñ̼Œ{"‡grD*}ÐIOü|‡"¸—ó/U%ÕŒR”n/*\‰pôù?Ø~SÆÃ’•b>)ýô]⸫(ZŨjU.| &³²©XZ;Å&éä½Ê¬ JAÃŬ—k¹ûÝçPlD&¦oá1JµX÷UgKs†Ï|ª¶ÞÌî-99?’xãûŠGÄ”½Pá›^1…Ugl¥Ń·®º>«_÷jÌð³_ÙíBëèWèi"]çüpM,ŒpF7jã¹ùºOmIÕáz¨øczö;ì\Éü†ˆ÷n Ò‹¦‰¥xí#P¥×GÒ*¤™rô@ÀDväaéÐÀÇæ¹OYjmNºŽcÛÛbñMþÙ–|<á˜]´Š½?Žû HFèº6(4ZÕü³®½-½-.¢MïL$H¯_ç¾ÊÜçñœØS\ä¤ÈÀ*r‡¡¼óó«vê]àüâ´ï‘ _¤àE༙ÀÛ/{3;Übýó’ ú(‚A£ˆod8‚ÐãòQXz!>.ãˆ4¢ÏS:‘—6–ûŠ-iï ØÃ6r #{rVjñ:Ê‹ì`¥¬˜Œƒj#Ô‘À´ Ü­–T)½)¿Y*õM™¤´±&5y¢·£ÊDQø·29eCnh†þûÑÏ,-ËÅjŸ¥MÞîôí˜d)ñcÚ‡ÒŸì±k&ý‡-+X._ëqš‚£§€ˆMEôÄ‚ìÝpc½Øé»²qÉžê„S™ÓÌö5ž²L&>_Úé 0ʉÆÔ>ŸØÏgWî=ØŽ óUäüÄ×ôûü /±’ Éó/ÄQ¬­ú“Õî2áj<®`¯»° }a)²ŠÑ2I§R[ˆsýKý‘¯Jª“m¼I> ìïôÒ¦Á;»ÜFL|§ÈñE#N?èr~º0å£Ó…MgßâñûZκ%¨òÂð\.ý^û­8"l>ë2£èü67Æzã7ØãSéüub,«Ò…þÙg!ñ­>İV»„OIò6Ÿÿy&zO endstream endobj 174 0 obj << /Type /FontDescriptor /FontName /ACFCCW+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/A/J/a/c/colon/e/f/fi/h/hyphen/k/l/m/n/o/r/s/t/u/y) /FontFile 173 0 R >> endobj 175 0 obj << /Length1 1380 /Length2 6016 /Length3 0 /Length 6953 /Filter /FlateDecode >> stream xÚVT“ï¿§$F‡Ò2 i¶‘‚tw·Ôlƒ1r€„" *ˆ” )­ˆ"-ͤ%$””PR¤¹Ó_ÝßÿÞsî=ï9{Ÿç›Ïçù~>ï™ÀS q57´+\ŠC$À @ #s9 ,%K,XøV€€5ã@£þ›_‡b 6M(–f„Fõ|€) DV"§%Á`ù¿Ñ &4á4’ê£Qp€€Ú7ƒððĺüµ Á„yy9±ßé@5$ƒ€AQ@#(ÖŽ$t„A}€hŽ ùW !EO,ÖW ’€"ý%Ðea1`ë 4‡ûÃ1p7à/¸@c(þ˜@hé‰ðÿÃlvÇA1p Áàƒ€ÁQþ„„”$ôZèM|á¨?‚ ÿþy5@ˆäïrfÿ*„@ýN†Â`h¤/‚@yÝ>p ‰¶¡6+„¢Ü~B}üÑ„|h áu%ü>8¨­f„ðý‰Î†Aøbý%ü>¿‚~•!\²ÊMDÂQXÀ¯ói"0páÖC@¿ÇêB¡p¬Ý(7÷_Ü|AV(„_\OóÏ‚ ðÍŽÊ€Á`9y0î„Ãë\iÑlá˜C@q¼ÔÇ6"Gˆ‰E*9ÅDòµ—*=¤WV<~n´R×÷¡Ätâ*§Óž®œŠUܬô%‘YY=ïåöÜdØÂMp—3Õ¾âm=y*§qð:óâ¢l|¤>ß%¥=ÁG<;˜»Ó<ÊÓ<:»ìi•WbA´“¸#Ï Né]»°3}¡ŠÃs¸)ÍÔºA¾~Òy,ˆë„|hSuÔŒ±Å´¤jVšØ'•jõJ %}TZOp*mIZ·Õ³ ×·p<ùúßýYhng¹ÝÈîÞÈNq‰Ëü¾$˜Íe6¾ÎÒ¹ "ÞÿlÆ|ßðá;®hÚPƒI#näKž¢—EÙ;'“T¢N_ê'ÕªßÐZ}g:Á<å\›¶uzÁj$½?l^ç>¥è9WžÖè(o]—!‹y´»}%(ÔéK Í!ËdWÑdà#!ÒÝi1ñÂhxÇ·7£M…”* óø¥t•ûšÕ~p¿ö´Æ'÷*¸(«ÅóóJ)ƒµ6·€ü{3î]J*‘B¿Y¨Ìˆ¶ãD%ŽNk"ñÊCqq‚JyQuÝzúÇ\wÇþ;¼þ¾¨èª<ÉhNêHIëdÚ«rDzoÌÞø$€èÅžA„HPT£Êñk[|i¯óbÉäË9®ï^“©]~lBG-þÑ©À©½•=Ù-y”ÿèYUpR¶ƒ\ÑÚÉÀ‡”g0ÔúAÈÏʧ¼ZE×èuòWðŸ»êºZÔ㼚éVß$tZd¸$98Ñsœ?>-rÌá‡âmM5¼MëP¨ÁEòvüì®Ç嵇S3¶éès?¬sé®x|p?¡ïU*g Ù>Â.÷õg;¦H}9£Î´ Fç«&Rý¸A§óÉ1¸°GFþÕãÚp„o t—â8ï ‚÷]+pšÙ OÅèì˜3OÅX¦:Ç͸rq8î$Ë^m³çØÆ,Å¿L=Pþ\AÏ#}•R¯‚)r“Í*¥Ëì1†u³%ìÌPÅŒ©'ÁVgrò¤n·²Ò篼~¦Æ°.w «]¦˜ñ ÇùIÙ8©• >ù$tÊÌfWDÔã‰OØt™¯=°XP! `:$šî¢9%ÙH·ÇóTÕ¦Æ=@$£^/¿Sšj®ŸÎëÎ^OÁÕø¿PZC:DGE§¶0ú8éx÷ðL’«¯Ï q¥'ùÓ“5É^L™âzIæzdt'JIä+e­ iy1^vYåóò:ªU-¯—S•É#Ö” ‰ÃeiíÇmHL˜#¥Ù½çV„Xˆ‚˜³|¤ÀF‡ 夭¹3+ ZD ìÕÀùÉë9ÊÌ=ßÓÍìfÈ'*Ž9ô&½ò!€WruNQg±ßÖ^¸¡™Y!‘¶…ÑcÌ`ÓmÞ"wŒºçŽ?ZµþZ9žR1ë%g u†ö¶ýØãÇñmŽn²®”pŠG]ì+¬r¹š¤ÏÜø&̸¥ûü Řš-É´ÖzÓ£®ó’ŸV¹ŠÞ5~%D†ìÕê+ïD¼ž62zÒMè% Òð_hQV@JHÄ‚üÒÊ}}€ê‘ NZ÷/Ëú°ËéÍt¹Ë;=Ý vD’<’¡Ù\áÅl¤Õµ&^w¸¶-±µ|CGTG#Ra÷•¶(¯1`x”ãæúû ${ºVÕb(lc(9#ªTUnÝŬKn“g:ï2ZúvÛ½õÕ_Ú§as†Íš=QØš#òJù²T:§0~¬ÈÉ‹gXësQ·µz%˜gÍyð9n“ØøÕdoÛ×—&/5E>nïCŽæi>YÛá͉§\åÅ'Ú½ØÝã9Kxt3$uµ<Õq¸™Þä ˜c&H þЗÒúøÇqðE؉ž£½Û³ÕlpM ºeÅÍZŸ_µ2lûîåæXÖDj‘¯¥-Y!A;—Ni r釮|/§W®­Kú’¥KhW:sÛª¥åk‡ïß•±Qq"aO´Q• 5Iõ[!+)¹éWS˜ÈÉ›¼}†ÑëèýÈÃ_¢ì¿B1»¹WH~\e§ZzØØS*sT¶ÆP‡Ók¾?I¢ÌÜra5úzXãõ§5I¥6õC•­Â7í¼æqŒU€vç^±ˆÚãŸ~Za@º(ÝRö:BÅ6Áµ_:æÓn8ö'<§íŒ”dlú¼Îp±~5ÅÐÍ~ |W2ÖæG£ÄºtÉý‰­&'‘¢aîêK}šSaÛö*Õ›·änÝ·ì?§¡ÕT4]‚ôy9ÆÏS‡ê·0¤æ}"ÿúP™û‹&G®Š©óù6v?ðà !5É0AVž°WÇM´7Kõ‘kîNÞ]$‹¹2K»ø“ÄI¾°äû4×o.Þ0‡.OÜMuÙÔ¨ª¢kQž\;o$ÆðÖŸ´Eû‚¤˜?å¦6·¥çã®/>,/ò•þfÏûŠÏu‘>ˆÔ—#ŠÕŽ4~ND´àE)˜õ61Ï,a,Û°Ïu(ÉùÁr±%±Y¼ÕÚÇ™V̼Ã6—Tæ=$ô\û @-]É9á²#’:ä•ð Šø"e¡>ùìÊ@ú÷ÿÙko¨D—>ÅÒ¦¥"2ê§¾hÊ5ô^ÒHb.á 8ƒ®}š§XQ,`@’ãÃ9ÉÏ/‡ÇßU¼iÿºB÷l÷ ÕQ®6} µvû4u¥•N‰A6~q™Ïå9ÚÈ¥^oþóCv~^ïžy‡;#ñk½ÊbêeQ ; N {–ÛåüY„}ßýœ ÞÙ?×5aÕ4ÿàyËð˜$>ñÎ ãbY™ @[ìë¾êL]ÒãîNñE`:æ›ù€Õ·†$m–éyiqrмÀò{ÏY¼«Ò"ú`äþ¥úRؽìxè`cjçW[ÇÍÜáÎy1wRÊ ^œc&ëõ"€a+þJ mr1ö没ŸÖ׳À˜¾‰Óúk*‘ôªÃŠ_Ï‘*eÛ·/vÔŸŽ¶Úm¥³¶É;Yït3ri™²›êÝG“„?¦¢™1vŒ-=ûxLN§a±Sàë:Ñ7ÚÚsîÐ3„‹;ijIŠAæ -¯ê›ok\¥:iÞã«‚· ¦„õ‡_Ö?¾õeqTý„-+ÔdÐÎ2MÃq1Ö :zûõhÀîTS|njڣq‘K$¿N¼ð´Œ‰â–KÉÍëÕjO}?½ã%ítç%éð¯ëOuí¥¤›Ô(ˆFÑr‰jÏü 0ø¸YpþÁfšžnúˬýšÔ—CÁñ¸ù}–â¤U˧œš§ÀOÊÛ˜µ˜ý¬´Í„ÄëÚ×u&J¾ ž¶p+¼Â—º]ܸd{g¦÷fÏq ´0Ø´Ê¡¼sÒè(6æwõM‹|ï[§håºæëM.ÓÕ^ß9¬ìþHlÇúàEϰXI_~a×¥wÑ–łךz}SŸýSK@DQò]Jäj§dò”c‚®ö ùâ³xÔU~o|„yÖäÞjJìB°ðäeF_–Zèø‡Í6žaÏâ†Ýt é§‹hZ*ªû£²@WÎg ËXôð%q)Ü­ó´…²Z%|ûDоÄp¢?¾Ã|A<;.Ò6\5ûÉ]±OX:°Ä­”'i¶µ]›À¦ëí±ñmF Ô· I‹vÅñ_õwq¾¸V ºë9ãðéÒ6?+òª½§qÅuŠêZ¾×j:²ê*µ<ønÓ9Üé ËÕbÒ“]Ñx粡tº)µfâvÝâö-Ë›ôß ]ÚÕ.ߣS+}Ó¾Ìt—ïÉ×aÅ e°™’ŠÉ‡iãÏ ¦½‚–'—%§dV¨û± Èé Ÿ¾Õ«R–%¡S„ïS—ñ§æ’K|©›\ãD¿éÄ^b=•Q!âzÊ&Z%ºÕºHÓ“é!ßßVÑPÛq­¹Hl+÷Ë.EŽÊ›®æ_ðšj»hÞwŒ£Ϲ¸hÿ3ù•ð³×|£‹oÜ¡ úR? "TÁÛtãjE@B¯éÌã€-ñª¥ŒÒ^Œ†:ÊßcœsÿÖNö€ÇèÁêUY¹Vè´¢ë«Á (õЩ;‹œ¢L¯ÿqÎC‡žŒÍ€´¥S’Ö¶b•dŸ¡_–>cý~øtœ®’Û}lÀ9%Én½l«[& ]%j4£KŠ Úd'¶ß§ ?ô‰üÑ5ý¡^xê K–BáDKq®C?RÁ¥+¡±ô˜!Ÿ½Š—.10‘z6PYxQé÷u•=x¤gm6qr/ßSxí¦ñà`éÌ¥¥rejp ¶Øy‰VÄŤ„RAæ u¼ÑFÎã¥ðä°ƒe{ã&«îŸ÷ׯðÍÑš½o¦×¨JËÑk4D¬ 9RÃrÈù ̨î°`ùìÆ¸Íqù§ ßqPÓ¤× ¬¬ wFä9›øÊ‰»¼o)òZ’¸l(ƒÕ`›ÉW† ‰U·‚5º»‘<jú«¤©g†#J}F'˜%û6ÙÔx•7¹™t¶ò|&JX¶˜AÂË8;x;›ç¨‡” Äåò) °î½®a·ï¨ÌÑ,§Öì¸ÍÈUÛbH³ö^³›Jz>جG Û~ œiM±ôž~ŸmK¹Ž2Èž“¯7ŒjgN¬a©pi¿¡‰}IÚþ==k›­Ò ?Ü?£ûý‡ Ö!ñçÖÛáï:mú1î>ìË-ëj™ßÝwÝ•¡2š üe² ‹>I-§©µ"ÒÛ |æ ®%~£yΊâ3ä¢?EuJ)?8‘ ¾2á#…~<©Œ£âÜ ’Šsø’é`›³¤ÖÓšuS:Ë¥ßñÅfZXJ`ìRÌ´$¤UøuÎéí\·fY2 9íFoÐ<dR_Æ-k… ž­Óù2þˆ#Æ/º2­!’g(0Ú’s®m.Ǹ{h-LÕ¡Y€ô-E,\ÃyC¹“™ßvïLý{½ ;ަ(•kvù•½ñ[ •yõTnq¸ysd–B=”våK&«ópvâ‡Ç««âô£”Z…{Þ^+Cë‘(oÞ‡œdJ¼öA’‰Ï–\ï>ØÓª¼-ÿ#ޝ]; i7S¶f¬éû<Ý’ËRÖ^àÛñ°.Œáõ*ÿ*•›=íp(òˆ¡nä*’7羑õ¶@ªs4û"=5Q¾™Ld0{ò©ú&õ‚”ë¶€:‡*¹‘[íÿ5¡uÿ”»¦ïl`Åvç; ’©#ÆW¿û1’ |”ÎØKâÏ”ZÛVw¼Õ­%o`µF³ë`¨EUT”Éö~V^ôÇí\­«,S¥µ e¤ù|üŠïs0“®®¨¦@b }„É=kJ)¼©1µöíѨlùabŠ<À ^Þ¦ ò<;.}=£79v&eÈÃ!÷`Õ#ûIwuú›us23ƒk/yv¶¦S#ÝÁž{y/‘Š•ç×XòoÓ†ÄL¾ÈÇõ9¼1;ÜÐŒmpzÞ 1œ…ôßr¸ÍOÄP¥Ñ¢íºýÃÇÈŒ8ôžOcßbþŽÞÌ ¢ªkõî4âSƒó$Ó9E&Q£ê–ÖÉXuËfìXEÛ|õÃ-s½¯¾-úìR±¥½v·O¡þ4Ÿr;ÈjD,Ìì ÕMoDëÚ©3u™y¸¯]vZ¸"8KïoÜîŸ!}"# ñ]$æ!¨ë•³BÙƒß1Mv/ ÷ù:uµ¨fò +J/¹2ˆ]@Š„—û>ï¸mœŒkrßÍÓŠŒSu7Λ÷ Ë—àvqãÅ×Ä0±•>ÃP/.3Nrøc¥eØ-Ä;­XzXƒ“ÌŸ»ôkóÑÍ-·&á‰(ZÍ–ZùÃoŠð £_tŽÌ y»TE½¬CFV),Å€ñ|æp÷- HÉŠßaö©SaÚ™Šq¼GB3NŒýãjBäGÀž„…Q¦ƒI2üå6+’ý¨šãóæß÷÷3æyn•ùJÜø¼eõ’Ï+‚^d'¤@ê81>'Ãô1ž¯o«Ê/{ck+ôÏÙ8y8`ŸŸ³¦÷¾ñÕXòWNÎc=ªüð¯œoÉØj¾/ Ê)½ÐUJì#áË3þ4TŠê7Ü´éŽøbAq+ ³JÂ~t;£NḰ¤Éºažëví½ø|ʯ¦•¸ôxq§_ÿƒâièC[d‘ endstream endobj 176 0 obj << /Type /FontDescriptor /FontName /SCKCTK+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/five) /FontFile 175 0 R >> endobj 177 0 obj << /Length1 1698 /Length2 10634 /Length3 0 /Length 11727 /Filter /FlateDecode >> stream xÚ´PœÙ-<¸‡Æwwwœkh܃Á‚‡à\Bp‡àîî\GfæÎ̽ÿ_õ^uÕ×gmßg¯}h)ÕµX%,!æ Yˆ£++P ¥¢)¹Ø€@NZZm°«=èO) ­.ê†8 þK/™¹>ˤÍ\ŸÍT ŽE7{€ƒWƒOpÿ1„@Òfî`K€ @ârA¡•‚8yAÁÖ6®ÏYþs0X08øXþpH8€ ` 3G€Š™« Èá9£…™=@ b¹zýWaWW'Avv636ÔZ”‘àvµh‚\@Pw%àw»U3б¡Ð´mÀ.е V®fPàY`¶9º<;¸9Z‚ €çÜ-e€šÈñOcå? X] €ƒãïpyÿvüÃÙÌÂâàdæèv´XíA5Ye6WOW€™£åoC3{ȳ¿™»ØÞÌüÙàÂͲ³çþþêÎÅ vruasÛÿîýw˜çK–q´”‚88€]]P~×' †‚,žoÝ‹ý±Ú9B<}þ<[-­~·`éæÄ®ãvv)Hÿeñ,BùGf rð@>NÈò´°aÿ\ÛË ô‡’ã·ø¹~?'ˆÀê¹Ø ôü‡âãbæ¸BÝ@~>ÿVü7BáàX‚-\æ k°#Ê?ÑŸÅ «?ñóä¡`O€!ð™xàïßß'£gnYBí½þ1ÿc¸ìŠZÊJªÚÌ4ü·JRâ ðaå°rò@.^ßóÁï¿£üÝÿzÿCªnþ«6à?­ ?[x¾»ÿ´áþ'þZFÀgP…<ó`ø‡öo€<@‹çÇÿ3ùÿpùÿãüï(ÿÚÿo=²nööh~«ÿ?Z3°½×_úg»¹>o„ äy/ÿ×Tôç«€,Ánÿ«Up5{Þ Gkû¿/ì" öYªƒ]-lþ$ÐfðÞìR‡¸€?3V ðtÏ»fa÷ü”¸2²úÌC[Ü~b %1Vd­B¯%’:±–6e®Ä(~ù6Ö"…KÐhº÷}0‰×ßnB™{Õ;šw(QÓC†Lʪ-¾ãûËÙW7Ю¦M‘ö“³?†úgÜ[n9Ïšž’Å¡°™m ^%Ô‡’ Öè7…S´9æ™Ó„Tˆ®¬d/™pN=1§®®'q²GŸ(ã™QüŽb¸ò} Ö8c尿—Ë´9]Ú‰hˆ Éà®p†Æé|$÷’ f}Šò—zç<…ó)²ÑYR–X±Øö8Ó+ÀšQŽ ]UîCó­[Ÿ’!ô$½¸[ UÅ x&P*5üŠ&“(\×*.;Ù^«•äróµn‡•m é‚ÀDÍ`š2¡ =+Âcxùµ`;WNvž¢Çá¼ãø J¯l×ï­ˆô~)±Ù¹K é™,óTÅZ/ê\¥è]«=ø/Q*QyöwõÍEŒCÝŽ§ò£Åd‡xï3 œ#^ˆÂåIçŽ[aÐ s¶Æ›Ço} Õú‚èý*^”½ÑnuǬec Uý •íYgà‡%B×5?CœjüC§ømLT¤ã³Ï¸âûúHÇóx×”÷.cØ#nþK³ðìïøU@RœÌ>ñ3ž„˜4LµG¾ù÷KavŒ™ •Ò?úи¤&"#u’[pI¥=ïN÷Øßw%G~(ËåƒsKÔâ|ºtoZ óe57 iIè!;|û4µÛgÕÄUîKrÅÞ¤"2(ãEÀoǦ½ô¦Í†Ÿ&VRU|H0í.Í›ð›Ñãýú¹û¡ÄËu,^ÕýètªH>Ӧ楷iU”\­“×âçLàÉn–GO…Å &5vªävÔW!û þ¡'Zô@lÎ̽uŽ$óg¿Ù…·M÷·øô½UÕšZÆŸò_MªÖ¥š…Ë^íW"1´úgVÖ^cPc4¶‡„,ã•-¶…”ÌI2Œ+Ò!‰wbgïloQøE°®ôÙö’xAóÕAð>(‚þ»_Ád!®­ñ›ƒ§îo¢›.¿vAÉýÖ=ëÞ”,KuËì‰n§ ¤¬0õn~òAñu ^£N“õ.4d±–»dý³ªìc“e¤Ù¦?:ÐMLCR„¸ÝÞ›YÂ{B¿P¶-¿T–D“jo~ïF…ŽM¨$}«ŽIo¶¸ó¶Ó¶o‹#ÊX7¢¼_N]mh\Ù|ì#™«±IÌ µ%å¨ HTpøIizo@—£“ƒ¯¥Ÿ¡1ao÷W#϶í¡å D¿ªÒÅØÎvrûª–½9FÉøm·:x*JKDNò'à§Y‹I–§¼É)x1ã3 á­—pè46+  ë„õ’LÅêiº>Cüq(·Ô{`F¥E‚/Fb0RÜ—ú¨v¶®6º;^5V rã«î¹Ô‹eb*k:iŸ7çÚÜ–’|·Ú>´¸41,Õ ‡m—#ßÃb™/…š5½d–*Qù5o,D·àèf­»V´œ{ 'â’ÍT‘Çû¦:àóLpE)â…Õýjjró§‡5Í7ŠîÈ£šNוgÛ þa?v‚¨9ïbt0Ì •Õ‚+ÃërRÌÖdæ™ñ€Ø_`$,,_?Âd–¦+ãZ™(]*ÕŸÌýŠUdƒ±‰ñ;éô¢Zp(o§4¡^(ô4Ÿ¸qâQ5|dÒôrII¤94g?®è§J|Wú ëcU4¿êÿ‘¯|’âùîåºhcG1ÃÌ!žFrD»1/Y£œäh=£¡UF¯}D»õW‘±ÜýÑ¿jºÊò¿¡ô9QãÊ| =Œ­ÿ— ¡ƒ“Z´ùI_vº³ÐÒùðÎQ)P©»‰êØ£M8¦ûýÈÚÏÞèÛ,É=@šu;x¹g‹³ä•…)ol”•þ^ì-U ¿DUWLltëŠÒ#ŽIm¥ÞÔ’óÎpçƒ^ñ8 æ+1w6‚KœÉJkf)UûÁ€9ËæøÒ«ÄÍ=ï´¬ÃíVÝ Në\ûº[¢E~“F¹"[ÛQO)Yí²î\=ªfwÒLº”]q?IþD½ÂÂÏß\?!X½´¶~@¼YÙDr™E^V"s ‹Cõó4¼ê£d3²^–Ⱦ[,£º‚»p%—f·´e!‚(s½k{ 2Æ› ˆ{EÞ-ó£]4"±Ñ¬1I8(š¥üT”‘NþpŒ1pQï˰—Â)ºFBÉHBOI»™£ˆF€1ÃG ;õÙIý\ŠÛÆÔ2ðUÕGy^¹R´ëWþ3\×pròÕWAØÁk$ÆC›óAáÂe×…9Ø|[4¬rV.¿Ô¤\Š%m<-7V#Bx¦SS–ºÝú±¦ÝO«, îµm]!”ÌS3F— ÇT¯ÃÁ´Á‰…ú}ª"Ò^\¦Ênˆ‘\ijƒ MW‘»s‚‰ñ ?î¤ú·(÷«ûhk•^͸‹\wtŒs›Yí=eÀ16ÿúdsä |[=àQÙ×¥#VÊÅ;8eÞ!ÿ¥‡–EuÇã0”ç32Ô¥º*hȦ=°Ò·ÎÆWo¹<{—l· }ÌÍî¤O¦<Ì Á•ΛJã ƒû-¯ìÚÑYYÕ¼¢¹2ˆ²UƒŒ!2 ˜÷ÅXÆ ž|W\A-bFœ!cÍé‚HæßóœË…æ³~Ù‡wµ¹÷Qè¾ ÜŠûU[´ŽŽŸ°;üƒÇorþ>ÖÂá±ÖZ Ü,l0ÀEëÞŸX7¿œ=˜Z±a)Z¥Ç3ƒ¹‡n´ÄRû-[N¼Mfo¬]ž71Ú²Gw#ó'”‘$ $bžT§¦ Qß U­F:Ýâ§_ÂäR0GlEŸÉÓÊšÓŽêuãî— Ê<& 傸¼¯4õ3Ðöåé¬#B>‹ÞÍs Éô*RºÄzSBzjú 8IÂ:“Nõ…¼&ƒ¬!¯îæ ¿UÝ7ÁÚFàw¿åÑ»×(ïô2iã%RúÄÑk"Ž/ïc긋çyQ‰bb]mý¦G¡Á5â„"½*6êC7m6ˆôÆxÜN ÏÀ¥ öö8‚Þ:Fpöûžœ¯zµsWø¸Vó“Eª ’»A¡}-‹0Ž1Â_}‰6›~(‰m{¤¤280‰vßÊ ìÕVžtX°™óÉ Ì‡Âú}iý‚§uÎ “7=¬è?&€¡iê‰ljîPÇtú®2©¹Aû,"ÉX÷ƒŸòƒVðÁTÁÈãª)M Ià®<¢ÐÆgW6ÆN@E™£üæð‹„AƒP.ž˜:[iÄõ…ú–EM±€ß×ý„*úÇèIãt_—Z5Äš¡»ÉsoCjÕú8± ‘ÛO„ŠI±o&~ø~CߎÞ@ /úsD·IrØ7riß»ŒñÒ6KDÈóGôc÷—Ëôï\˜ÛŒˆó”r®ÕMsVŠFD¡ /¯¾sú,1‚¡1üìÉ–ú=ýúÖÂ:w³‰C6û:~—›Ð¯õpƬ*vÌ‘#Ë/Ì7kœüíã=xØ0Úª̰´[^ƉÏ0æ•v‘ã|¢lÅ2±¤@ž®æ#4CÀ÷D-"(ñƒ?œòKÕ“hŸs£|°›Kùl=—PgßñûøƒYš;ª® ŽïEQ0©J0о£«a>}3Å‘H‰‚`{šüA¿œHKWcPŒ]þzYí:€$—ÒgcfaÎ ¾8„ñ¨Õ­7Jc£nhA8¤.;½}Á7¼†+=mÃÂBA “üu½l`öèµÈâ9¡x´EB4Eyèj·˜³èVåÑ6_:½”æ(Zµ`˜ù† ¨œn•ü÷:®áà LŽ$“àyœ[”ðé¶ÉË~s÷&W’wã]ÍÝ4¢^'"‡¬¾»‘eÒmKò’¥ß†ÈÙÙ;·–·ƒ¬ÇfîàÅ´º dïÔH°d:ù&{VŽtVc#u¬æ—?Ï6Ë``ŽyþúâßÔÕ¶0e’†P(§ivH:{»êHÔ1Â4-r »Qᾚ´ÊùëÃQßÞÚUÁ¬ëÙð.i'êeóêkß87ÛÀXÏÈG¦Ÿ„”3Wφ~Lsü™Ž {Ø:Ý™|eFÁ~ô™wõÅ+QJÆTOÌܕeºÍöG²7Ôâf…ÖïáhpxFhl‚G…f(Þêx3ú¦ölk8Y!3éË&Éãâ¶»`³£P0í¶öˆ°$Òp#xncØ…˜Û’º‹½SÔ–ñ®¾6±Ö¢ZÑ^n“iJ¶Z&¨ý¨Ÿ‚JªõêÄT +e¡&Ï) ÝééÖB¸ç{Ñœ˜ôxàÔ¥QÅÝuÚ6òvÛ«´'É>9±WÕüTµTE®2·Z„Œý8=’[ž‚³õƒP«½—QÒt)&$ è|WOéªÉÊôßh'M8îÛ´áÖËy༜d#¿žw‹®a¾Y¥—ò„óWVmbœèù¡»ƒ·’xUóƒ\ ¸Lu_™“v1I$x“ÔS|ŠÐßí‘ö8¼ïuå­JÅ•ŸÃl¦ÿCŠ Ù0¢X§Õƒ[®s6<™ad}=«f®‚ðŠÖRX¯\ëdŒÆó²q¾Çð$`mô@+ªX2»<½E„.„=á–,Q˜¥Ÿ3½ÃÀÓÄc¶ÜkgñHúÔ·¡[èð©6οùBbüqŠñøÖWaË+#? !Dœåóû' Ú˜4 £-èex½p,—4‰f I”™ÒéT‰£$x›ÚëÆ^‘îÐnÝmæÀ%àÑzNa™XÆB“ŒÀGhŠ1à§¶¬þjàHpЕ@ù’vÊÊ`ìQì Y¥=¯Ü(Ãí{ME:Âí‘poi†~ÞÕûý$™¯j€dÄãFsyUãƒ<…#—1œÎ*qYTï_9ݬÖà4ƒ‡â:•g=9PmC|<ÕÅ_^Íþ˜šx½l­ÅDz,ÿ:ùƼDYŒ Ÿac`¢V´§«Au (Ô]FT2Ã…åÌ;§ô:Pêøûòà V‘pÕÏû˜ê_-Ǻmv°ÃH[‚âàmLÅþq}ˆ"Ix*€h{1{ܪk!XÂkÔML=z±OÊÿÄMW!-Ø`©FÓ.+¬Áaân×SÓ+,ÞK·&µ¯bŠûXÊ ÜÞ®ˆ#²2½q¨C ½÷Ý•dÆ©`Fž½‰‰Fà1—¶7\ÑûŠÕ”a»/ª¸ívƧ¹T´6–ÒÞ¥r’!¬#[9v¼ZW<×ÄkáÚÍpÑ>HÞ^ƒ¨á°ïÇè`ƒÜ„[»û­\Ï][†qüKÁ˜¡‘õ# {®¶­½f¤õЃ=Ñç é"/þa­ ÿ—Ð(w¬õú¥ KÕØÎvafGjÇâ±¥† ÚN³Ý;²£P-æ`¯(˜•¡g¢>s$§ÒùxJ\p=¬¤Þ¸ôR¡ï߱ěS’cÈ[é+KŒûÿrÞ!/²Y¥År:^Y@X¢Ê­—y* Ôa_¯}÷C*€<+HƒÛÅK§nùè3©Úˆ›ê1NÞ£:‡ß«d0!6º]ÇgÊS;PóÐwGp$ðîí¨™ƒsÆœ}Z#e&çZíécœŸÏL§_~f ÔJCdî'§Ãl‰ŒÓ=nÔži®·šCùYu%ßi߬ëøÁ*®Ù>nÙ±iEF:­Ö iO *xVyA†½=u¤/’»õ"~oc(S¯Žî¿y¼ƒ”Î\ƒPƒ†ë#Éf¦ay¤Áj ¶moZ­¯>œ7EÿŽ”0¾htµýS:P4æ(,úBW¾¿C“7ü¦ Ia™¹Ç¯Ò‚·1Ã+äG°ªùb&0xOyÈÅ, äVû鼚çU}ˆ'½í´õÓê £3ƒaßy.ÿ(2ÚµþÉ_ ï„e)u,ä{ ,tïDUÊåq øZÕxô% °¯|ÕÎùc–›êÆ~4“Z¿O¿§ :ÎÂs]® @ýtiéêítN‘©0ðV¤}‰i¯ÿ®‘ÿñV ù.”ƒG8-¶mw1#ÀÙĺõè2Õ¨ËH6¾0fV†G!<½ãˆ½’ÄÖ$rþ›¦ÊѦ¬K‹;—l‹=Oùl¤Y…7rRÍ0 Î %»x>×¥>YL›Â nS½†é¯+ûõ¤1Z›øÈ¢á }ôÜn#G2’oùNŸîˆéx8ãPŒ!%¥ßtŠu?H¼LHxÈ5oÖ/NzÔÖdÔÅÛAù/|¨Œˆ-¶Ä ‰†£{ÇåϤÙqCYWv#W="¤8ŽiÛÀ:ë"ŸjçH¹ë‹\©T _S¥çÒl§by¾$ˆDº,R6šè†¾[©^‰ßÍÏûžþþªïÚI„üªLíJgŽ×îÇ\|°Ú‡È{LæÒyª¾EÏÕÀέ¬°ƒèÜû’ù NÑÔ_ú½Ðu¦jfzÿð>-NÊç@>±]SÌÿC7hL¦þJ:Á}¾ºe²ÇE×coÕM(›ˆûqVÊg·÷ŸrüŒÄ¢ü™R³—£«2è¿Û16__1Ñr"«ÂV8fò„{®¬}#t|L*ñ¬h2êOŒ·ÙEAüž€—¶H¶ìÙÀUÏÔöö %ý <…fïÃ=.¶ôÄ·™þQ2§Æï]’Ðí³€i` ³Ó@Íx3‚¯˜Å-([ókZh×Ì4åþX!z#Õ߯˜z‚K2C–=¼#ɵ¯ÉI“ <£½]k! 0$þõU’ËþNêRŒëþñ×#²ÍµªØž!1½0#"ŸrèÞàäß—±7]ŽÒ>ü´¹™™èî6e05|?¤Yh•°$f}WºŽ‰÷á€Èä›–»YD [À€rCç”…Z±ï½Õ~ÊM‹‹TT\¹Y&ÑòõÊ›ä~ƒÕøõœxP¢ Ïi¶Ý§>ÎÖy †z²ÉWu®Ï_§qßz8Y\ʵbÞé’­°ñsG/ï»ËgêW:`Ä(G_ßó )&Ð7ÊÅC”à+Ô£CC•KêÂEï6g’ʾ>¸¡Ú_߀¯¿u5ºàcé|¿³h<œiïÆÀA7r¯ ›!‰›í)ç‘lcò>j9Ó7ôå‰ÑÌdš;yY’|vÈŠrëÙ~Kå2³‰#>íü©e4üu2mÎmS׎ݔg’{â• †ïþpêËÓV,ójAZyõ~nVÝvâ2®ÕnñqץѻJ•—û·Óõ¥«á‰ÒmÚu<³E38 QõÊc°ßûÐ8$VÑ”ªh¢ÍU‡(\ ñÏàJ‰´PýÊG¿”B<¶µh]W4»R’_14:.Dá»éçføj€Çï+Ê8FpôªÕL¸Nî]±Î=Í)`2I±Ä›^LÖL¯Uäþ±vOØ€¿Da&› S[CTgT‘³¿œ.™C ¯Ó°F^¤ºw9?OÜ_¡hŒŒêAèÐ ”…Z5Ê6ê ‰À²¬@v¼È˜.¾DW÷Ä;ʹÄ\‘xøH5nXóùºh8Õoñk“B|UÛ§Ž(ÌÃZØÈàyU|¯ªKüéõœ•*X­ ý,ÑrSö‹£¬Ê3kúrºZV‘Í<â;8.ð¹èË™Ö;^^¥<…]é ’2f0žîÀñ ²¸ÚlgÕ-’ [>¼tRA˜Ûp~€äD®é†Ãá'kŽE’$¾QŒêÞPV÷±Î®ý~“ þ^šz,?¼¸XpqÑ;@óAXXånàÚ4ZNôÓ§ÒŽÊ­¦¸cꇤEì’‰À²ÜõÀ®×~":îÇeÒÄØ<;%Áý6‡FkÔÈÒcº 2waͱ¶k¹ºÎ§ëË*h—ÈO$¹®¼#À0—Ê {WÂÕ¨AWŠ¡÷ëõ ¨†n:;“qKå›9Êü|^î|Äw4ÞÁµÅ¢ Ô ”áàÛT| ‹hZ¥åÉóÎŽ-Ã׃%®åonµ£Û¾/< ãRÛûiGµ²Ãå´€°ø'ÕsígH؃72;žÂ(€z*­›9îfÉK&Ò&ËILª¦”9Ykª0»|-qºÑñKÜmGªdJP‡ÆÕŧfÃlÀÞ]Œ)6„ G7Ä¢³©íßVÝÞÕùЩ嘲ü5åº"DˆæÍhB•m5Î$¸8ïü  <¶¢Uò”Âl#ïýÀtîÞܲ¼”/!?XöSšæ$iMk¦¼Ü»x›Úþ‹hÜÙDÙùfµÔÙÇ›# ¦qÈ}Æ–å=ó17#b†&slÁ`û/¨—ÿ¯0„û“H<·c¿B9î¥[wAÿ)†–>¤ãä‚wg¤ægͶŌÇMj×>¾?…îü€YïiD‹® u%*üvþ°ê—›Ó-ð:¡t­Í ÆÉgZ‰ò2 Nß õ7«1*§Ùç_Ðwzµ.þ]i)¥ÞÂ-õS~+•7ß{£ëCd•G²+ù«·±Ä䮸Û8Z”e‚ÉPìÇuÅvÃóõ"îuâ››ãb»ëòˆšê+RÀ×\fˆŒÚ‰>ˆhÞLYu½ØŽš£žPR°¯v®Ù±Öªsëz5[p?Íâ­3þÇ O<ë#Ư'ÂtËZÂn‰7 ú†¼[½x;ޝHÂÑVöŒëI…gìH5f% ! oÊTõ‚AZ»®Ê0¤íº…Ìæ6&Ú!Û~Mw<Ög&&’®øŽšðÙï nüLÕveH¿××å_d'ç_3‰úr6½uûi$ãæ6UÉü56sB'6ïZu@5iC‚fˆQÐå‡=D¥KûÒ~7à~aô‡Ðˆ¼l Å8ì—ÞòoN$õƹÁˆÀòÎ.©•˜R›xêßÜíÃ= ¤IÑÜ>[³ßÝ®è݉‘VÍpK‡RŒk†àíÉvÙH}ª¹-¯Â|: ¸|ánä¢Õ»Çr‡Í»¸”ªŒ]†}Çðh4QrÞŠVþ…ªOÕX€ÍHSò1ð˜ù`W9 kÌö+Ø9¢î7œ uSv J)W áR1xHâU–¹ð9Ë—ÃîÉãdßvPäF<¡1ͱNo_Ô0½Dª»Ê…¯bdÝ"&Úh¹³‘î}…Ê÷O¿ð+UÌ649Ì¡SR{á&Óm¨¦ø=ThŸîtz$ÜÄG¤˜É8Œ$)-¨±LŽ^Áà{é7*ÞØ í$ž½H^Ópv%ò—Ó9wÔpçÄâ·1ÞÉå¢ú`ò°Ÿ…™$DȼÁÜ?bÍL^*E¥_Šè<”h“~Šåù*…K¯¹?š’ôVVª,}û&«ƒùøL^Q-ñ[y«ÊLa†¤ê8M²C Õ—àËpOGRÀþ¬F¡ 'nü×N®Žàõ˜Ô¨gí¢žà]ãÞž2º$Zó“>ä81-ΧN¤dŒñÒp¯ÒAäå¤nÛÌ(áÆéqU¥wUÿæe46hCfösàìþ¹=~¤mÛOºr…w†`ýý•þË©|”1+D'JYõ/²ß_X%¯™˜2íÙÖKFp Fw3`#ßk"§'ðd•]áÑí`¢\($ÄoR´Ö‹œÏê*^.œs¯ ø&ÿªz+8àKdöERÚèGκhâ`ì|1xâh˜}q¾kh ©3hr°oq7¾ÈàV`ˆúÅÆûUðó@QƒÐ¬¼ZÃ=úÍ06rïW¶\=¯†§¬ùõÁwHï3›rfNÞ&NÌe–F "‰J°ºÕ»3Ó…ÍKŒN´.,¦ËÔõ #Â|^<[³•Þ´>?·ù1ɶ¶SÂÈ>¨=’R tW¬N|)µ»‚Ú{é_bAÕ4y„åg‰×­S¶*ŽXuZàÑ’t¾ZmóÆ*½aÇ¥«ë F}€ˆ¤ `‘7¬~:î­ø'£—yä|\6zj5{›.p‹c}TDù4£’¦À­_4Âuª7å8Ríù=õQÐüÉ˼Lü¢¡a¹$Z†wL‰Áv“Ýbfpcšs~¹ °[#OH­‘åF£¬Ûq%á¨fàÍ÷±­Ìy {‡í.¶Ù3é¸b¢jò¡ô~­“c¿'D#ή¬¸›ÌðITgx5¸÷^ÛemϪâΙ×)<­°ØeË‘°SAltcZ<øQ¯×âC™´Óîy2KvQf…+QE8Ïf”½É’¸âˆµB‡iγØ¸&6H-¬+jj§..·¤–iÏÏ#šWÒky?}ëPdi‡¬4YØyLóz«>Fî–Œ„“ ©"ß;.‚\íᎮfSš²†vÙ¯3wœïÔ˜‡#ãó~ÁdL“Ö>ŸŸäˆúð&‘ÞåÇš 㻜ï[Pò«M|Îo~#. 뙞%C³Œ¢ž°G¡d¬-rÂ7Ÿíw+ƒñ«§«ɮƤÊꦯ5š)òðú$,%µ‡/K}K¾5D"\ƒç.!¤Ms|yš (:¾÷ø1³Ó‚—üQôÎÿ¨Îˆ3<ÞÒ¹›©“jc·^£’Áè÷ÚÖhÅ¥¸Øa #Ýë+Þň à³åR”!~Ïl«‘€Å=ÜT)“C(Ëå~©$>¯Š§‹c²Æ"®Ï¢—³¥ÐG}kÈm`ŸPk }-ÑÛ…‰¨E"„2„L—f×Þˆ(Ök'_ñ”4ºÃÁ\ Ø§ÍÆç-(#õQ6·V ­„ßW<#YÓhK<Ò³ƒ”ʼjYøDs[=ðMâX±~ L´ÒžO¡K¸P«|DÉ©]Âf”að@<úmªF.ÿ!ÓËãG9_d0#îF‹Ù»ÌbüƒlÏF2FÓa&ý°³š¥#"gYLæÂ&žG]4âä¥Í5Êϲ­ÅXG‘±Ze+`mJ= }L“Èc›>4‚[ùWgå4æ@g¾Ç®u÷ýî¡À‡ä}kú¨zà»·"zü™óFå o1zòNU­[3.S…ÄÊ=ýn^´·#¶¬|àrÖÀj±y‹=˜$ _&E–§ØP2~TB+Í9(ôƒBvÜá±0#È‹Q‘õ´ÂfywháË\gÌ-u q_§üm()ÁÁšàCR|æëühÏV endstream endobj 178 0 obj << /Type /FontDescriptor /FontName /JSLKNT+CMR9 /Flags 4 /FontBBox [-39 -250 1036 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/A/D/N/V/a/c/e/f/four/hyphen/i/m/n/o/one/period/q/r/s/t/u/w) /FontFile 177 0 R >> endobj 179 0 obj << /Length1 1938 /Length2 13625 /Length3 0 /Length 14822 /Filter /FlateDecode >> stream xÚöT\ÛÒ ãî Ðw‡àîÁàÐ@c»»K€àî<¸»·@pw÷ð8rï9÷ûÿ1Þ=F÷žUµªj®5kí¦$SRe1%Á¶NŒ¬L,¼1yÕO¬,v&6$JJ5“5ð?v$J  ƒ#lËû¯1 ‘Ó›MÜÈé-Pl u¶°²X¹xY¹yYXl,,<ÿ ;ðÄ\@¦y&€,ØèˆD)¶sw™[8½ÕùÏ#€Æ„ÀÊÃÃÍðçr€ˆ Ðdbd 7r²Ú¼U41²¨‚M@@'÷ÿIAÃoáädÇËÌìêêÊddãÈv0¤e¸‚œ,*@G ƒ Ððe€‚‘ ðojLH”5 ã_U°™“«‘ðf°™mß–8ÛšoÕª2ŸŠv@Û¿‚?ýÀø{s¬L¬ÿM÷÷ê?lÿ\ldb¶±3²uÙšÌ@Ö@€¢ä'&'7'€‘­éFÖŽà·õF.F k#ã·€?[7HŠ(ŒÞþÍÏÑÄdçäÈä²þƒ#óiÞ¶YÂÖT lc´urDú£?qÐämßÝ™ÿ>\+[°«­çÈÖÔì¦ÎvÌê¶ {g Œøß1o&¤læ@'' 7ÏGÐt3±`þ£€š»ðO'ëæ7Þžv`;€Ù  7È øöƒäéhä898½=ÿíø_„ÄÊ 0™8Œæ [¤²¿™fá·ów¹>³¼ÉÀòÇç¿Ozo 3ÛZ»ÿþç3ËhË«+*ÓÿMù¿NQQ°À“‘‹ ÀÈÆÉ`eecp¿=xÿožÿîÀØÿiU2ýÝÝ¿2ÊØš<‘xÛ½ÿqù[4 -à+(€ßô Ðü#]N“·/ÖÿÏCðç’ÿÚÿ#Ëÿ«üÿoG’ÎÖÖúiþ øÿñÙ€¬ÝÿŽxÓ³³ÓÛlȃß&Äöÿ†jÿhy )ÈÙæÿzeœŒÞfDÄÖüM猘ÅÿA<f‰ÿ"n6³ô?ˆýM¨ÿ ·,òÿ ·, ÿ ·,ŠÿEYÌJÿ ·œ*ÿ ·œªÿ ³Ú?èƒúÏ[=£ÿ¢?ö”Ùô_À ü/ä|«avvø—ÿ­Žù¿à[jпà[¿6ÿÀ·d¶ý'Ù[aÛ·Cû—ÿ­ø_ð­šÝá›@˜íÞÆü¯îÞ^6Ìöÿ‚o4ÿÕë[3Žÿ”û]€ÿjà-ÜñíJùgÁ[ §ÜoÝ8Y8ÿEÿ­'×wøFÁùÈö¶ÂýOø?š3qvpx»•ÿ¼Þùüç+tš -̓Mø‚,kƒÚî«EÞ¹2îL°q \F\#hnKºì)ˆñ?\±çG.ŠtÍîF>¬c±•¼6Ziá±Xé¯y¥Fòâ-Õ·Ášo1xMb <9~rfÛ•ëìÔ1d·55Ç;kRr½ž¡Åg°¿Ø™Ë8â§jª¼ûfqOÝpÌ„5 Oðñ#; TP»HF{¥hÈÌl‡ …ã¥ðÄI±äÁCjÿ(çæÀr$h#õÝá!ªÜuÆ¡`Ê~‘œá$`†r»G‚à)Ž&àº-ÈŸÆØqLUˆœ/Sf{òRúò4S«ãu*6ôár=µ¾í|«–¢Nû¶|¼¼UäÙî 4G³Šá ‚â­ºvK”ð*¯åAØ•“^#´û0òYKŸ¾Žz`+µf@ÃôÏ ¥‰é ùo% äæyf"hÔàbÖÅ mþoÃ¥ºGͶƒà¸Ê[w@{ ÅÇsb=â×nëpEL_TPQ1jj±BCR*&;…I”äÀµ­t0Y÷¨ƒÚgàÜ {C^' ãZ¶9pJ·´¾…îC˜*V߀Ok€Aã”Ã|¢3ØÞšy@¤Tk\Ý™·þÓRåµý°dk¨I¯Ë[ïªíìÓsK¨Òhîã|ºB;Z¼5z¥1k~É5Û DíÉÈU¼+ëø(¿÷‰;"ME‰À¿Åšý(R¹ÜØ—CxºÅ•ÓŸÛ®ÐÔŸ—CÕÊú»ãt–·//ÿ‹ƒÈô­ Ùè}l´ð7«Ú´4Œ@¤Á¼ ˜_!dYíÏ‚P+7 R¦QøFfRÞj7‚;uûdðûìas#+?¡ì©É^²:¹¤{~Û맃¿"ŽæñX=ùöJòbZçYåÞ7#õ¬ë ”žq 4Xr»ŠGßà×Áý¼JÛÃPE™‹œÎ<“¼ó¢bq¸×QªÐ¡ 7v;MŒq ;=®Û×26ì-‚´ú»‡¸QÃ{þº"زúŽç)¶Ä•†¤ é‡$n òÚ†'ÛA´íŸµ£òjãCé!‰ãŠ,ü}ðU)Í Ady·­T–(2T@„q#\€í™CŸ ]ÛË8KAv@I-LŸëE5çcŽ4^¬Zdù$R° £]¢fcÂÑdÜÇ«¬@Œ3G¼ˆÛ¡Aü¨> ½XW…ËÇFæÏbÍ0s¯ÁÈHÛ…¶UÐb¦_ÜÌê*‡aÌÄ‹Š2hfÀ”#g#aßÈ>†§b~ZÕIAѧ:Ì©e.šÎ% ¦Jfž*A…•Hþ<µmÈ"Ðÿ2Ým¤,}ж9†€ò‹ó7ćðTÒžÆÎ­Ù¨À礪Àå ¢Pí%rp·LèixÚnp8Ÿ(Ø­ÆdE‚UšÝ!ò1 o—Y³Õ’\Œ_‘võ4´ÌÓÚ~T:ÍJŽ GÙˆ^•#;k8s›ôéPÊÌ!¸ý”>þˆ8¿õýLö…I%v÷s ›ˆ†+0@%¬„[®µë;]Å⨔¯% Áì¦ä¬Ë`‹š—¬^}[æ 'VÂw·1îï:[nu°E<ïš)½•û1¹ä\ëⓟ¢Ä ŸŸÏ奢DÜhÀpgðÖ-)juóíPû*ßü°5ú¤_ø;Óam×QÓ”q™..^lXc`´c uH¯h¹ðz–l ¦ht¼0ROùÖ&xðLZq¤=Mé>M²kç”#“M¢ÊB h¢½89î#Üý¤‹kÓÿð`/xþêZçdUdÊPeš7iç”Ãu)Ã⢒Ñ0cqêÔCóÄ ò³Ž’Õè$Iã ÿ+´O Ty4©QX¢åDa´„kÑáFð+Úr…q µÉÝCâ©«˜[œÖù-ÃÌE¿'?ÜBÙÔ´Pœ´Ëî}F'ŠÒh@}¾J)fù‘t¢ 4Ý-_h푽¨È›œgH}ݜȼß&…Nï$ÛÛ7v’PW>ì™ËEc´5Uˆò' Â?’WÊ<ü¢#´ç?(8,S»þÂfðd|ŠÙ"ÁmÂÂ2¢â 5£[ŠêÈé 8ê É}¿±¶§À…JÄy·ÈߢXo÷#N=u.-Üx«øáÀqö÷Ïô¯¬ð|^H2çÖjƒLhâq6= ˆ+z‰ãžýâ儺ôÑaìöÊçQéÖ­;C´1)ä8áÅ0^=,nG¤‹cÈàÕJºñæ5š~B VT>\¶ß§Úr3 M™;tµC,J=KsE.;Ì—JÈz¨D­Âjï£CÜ`06¥ý7ç¿ÚmcNØÞî¹)-Üì¹E>t¯ù.5ª&P‰y¶X}Ã:Šlº¤½©ŽâD)ôòQ&2¯^‰’¨Ö#«‰/õ¿æãÕ=8$iØG“„h7•!;»ö¿\æïñô)èiâ:€8 ʉ˜l-ÊšôáYi'ûÅÍeÐUôó÷u4q {5Ó ­{Zs’ô~ÊïÖõ=?T´ªÆ\ªf笥-wMÌ_¤™46œõ(7l÷Ãá˜'³B0š5ÒøiZ‚„½xó§ÖRÂ(!9t¡e´:ä GHÄmyL¦çq*w›Ûµûè ýèlJ¦¸šäA©Z²˜™k¦l~OîRÓÉ= Žwr|›u¬ÄEoÙV»H¶ ^:òòuüþ§Vdjã}Œö€ïN ¬R.À–f¬ˆ”ª¦­-ëR£¤kå|h&­~ÝK©×öj½;˜øy%#‚Íƒ‡-w›¿ã1wÈUX¬n³wÇ¿ÜTß"%©Ïô£õO\蔇˷¿ä?ñŸ'ôÍŠy«¦Oª‚Òºì׌GLžƒŠW‚ðÙÞåwº—ì¿ Öx®SZòq¹*X÷&,'ìüاÄ+ì‰YWp½:øR>ê¡Ü¶âT"–Œé¶Êîü¥lk󲑞#Ô ø6ãøÂ¨”ô¨£<•_èc\ Ü=O:‰ŒXмÀÓö’uF‘ÃA±w'ˆÜvölÓ†?¶\B4¸I~$:§µ2w4?¨AÊDݧ$6bû}”ü…,úâJ‚‡›á“4Qþ޵aœÂÒûS¸<Ñ/n‘Q zº…ןsæînŸDä"˜±9EMaRò/ìÂzºNÑ•šL'ûLYŒk˜ßÿâH@½ùu§ÖacÌwzº'§¡õ³!x¬›œ§‘3Üö™g¡xc P‡·u¸‡ßÌnv<ѯ¨6ÁÔŽÚ{Ðñu…hTµIá¹Íb†Ëˆ?ÓƒÀÍ ªS¨úÝ1¼™ºd@ª…¾”D.'a!£xi–ÚzªÒUmW@eº0âøë¢¶©ý¡5É€÷ü“°_…rLp'1m6‚©P ªL¤Y£& Tªè4ßҰ͘=Ý\Ýt¾rëj™cá‡& iÃPþü,? 0y‡;›’ñ EÏèTfaÖ}ÕFÿþ‹ŸÖ,!3b)yîz …ËË®WqqlJSmÎ dßAü¾§µ¶e•3q¸–YŒÇÌW<˜`s¾Æ3Ò”C°¥Qç5­ùJ¶Né^ãÍ,ýßO&jw6úM:øQ[Öã(qúC7‰ÐO¾=vG.‘%çASˆ/‡œÊIU^^K³ñÎ {l_ÚN/ÓæJ|µ–ýáüN»/ÿÞ=;¹Ø¤‚¨ÔÙBÉa”ÄRª1ÑÕÊUQCŒóŽn½2 Á÷¢‘#R™A6HŒØâœp= 7”.ãk¥üÑc1ð㺨œáǽ²Üœ¦PÙ¯Ò3Æãx éâôÓwû‹t"Øt:äžs`)EOØ t©éªÍè(ã9U©Ù™!FŸÈ~V*¥F3F/¨1­WÑ>¸’qÑ<ùI´|šÝÁŽ £H|‚¨U÷{óKrP£þþÕÐíœ=ÙÍ@Ã2&:Ò܋ʤ¤ñ_{á²(Q¥i^=ÆÌŒRóœ¯zg3'pÇÝ®ˆÊÚIÏ}(©íwiCÚ6%>õ…î…O]ÅzœG‘"mátê³r œj1UÓ‘4ÈP÷Îdæ5þ©è‹,ß™QlÙ¦Ârz…4+c —b-kíI­D§ ÌØ\š‚žã‚òP¾D¼œŒ&âŽò øêM½ë]±–Ñ~Ï`UÉñêÎ";úÕ,d”ùéô…1ãQïr&ÿ]}ÜÖɉ 9þœÀôuÔŠÀetÕ°UîàÑTUD^‘NlÙ¶èK-/Ï\Ù¥G/â«ÃÑëäHJ1‡—#îEüwøÉ™Ö XßQbz)¾<Ø2kÆpð®÷W›×äëDöpM¾/|²C9.—Õ/· ×ªŸíëîÆòç î¸[(?F{3®m9Ñ2eô!Ã^0‚4’KðÜpt“ªD–i§M¿XЙ3ü´é±Ã!ÍÄÝÔ£wéµ2<Ð$~Ø…+lÐÌ&±i³­dËEñ‘!«\btì Åš¨'HëkÛK˜“‹ñ*Ôc•Q…ë6² +`¦Ÿñæò|vúŠ*p/ç2Îèá*¨NïÑ wL üŽšyg`ãT×¾">ku.Z(6:1:¬%ØÌxª=hFo[£ÖK8åš~} DÐðbÁŠÁ·gæj0WôÑò,ÛG&Æ®6¾Ÿæ×#óœ¾7¿û-ŸSï“à—÷ÈŽû2„IkÖ)V9$Ÿ/Ðþ´¬À’¿ä@9²®vñòû轄ƒ:”U|Ì^gæÉhS6™KëOy.­¥¸­tÞîfÛ ¤¹ ¹´ý³fŒuDå_Ò ®ïe>1ݧFrÈëƒcæª,~‚L°oï7§äf‚,ÇÉx¯)Áž6æÔ~§ÜÂñƺòŸfµ‹uï¨á¨G `ÝW°;e5¢ šLÙZ5w†—áŽÃ)ŒMÐ~žŒé6XÑìÏ1@°¼?¥Á{(›šhå´’U9;Ev~Ò}Au>qÁŸÊеÎOHÕkXŸ…9®…3Ûë¢_ýkÖƒ‚7ì…j†½³—Q Ikr¯Å[pQîW=>â)å¨~$™ò ˜)?Î¥¡5a{Ê{ þd¥”»JFîÉ1ò%jf÷rÙœ‡ä:pœ ߯±Î;ÚSˆáJÄ øºSÜ6åUÖ¯)¢)é»`sÅ‚©A‘¶ÚbE·g^ìo‡3ݹO™•ù:&"a¨² Üvy™G-zÂdèÆÚs>nt¦Äpø5a18̽\JœÆ»/bSDY™¨B¦1ç)÷T—ZxÕŹ$m0x&994û6O-ŒjÌnËALŠÎŒei†’4Ò _õM_A¦ªŒ>óÛ&ê¯Âá œ€ø©ò“Du¢f0_ܯEª“/,Ãy°-Óî_“nû3Ÿv–+¾ÊgÏ<ï·G\¨º c†”ìö#®¨m!ÊBvÕÞ„6Éó2ÑÔ¹>a4ErZÞ ´ì3nr®N¦ @ÀhˆtÏËCØð\'·èÈñµ[öx¼J¦@—_ÿÒ€âêá55w0qÉp æš GÐãù…o|¢Ç¦yï ×S´[ï·ÏŒ©Góáhöç+£Œ~1\n¾›€ª«õíbÔ//Ä×bù\àÁwׄOÁO¡(âìv}Cx_ É@Iü^‡jê«ÒW1Í>kž lýp–·Mã'éAeÁ-šïñu4*-XPÃJ–ŸOYÙù_”v2Am—nS °þHÕÖ…§P-&£K×ÔÀI…4%6«Ýöð™1öùX2NK$ycR)&1ϰUƒw=`lðk³‚bÎ]:®Píd Ù—ßß0è%ïóØqoÓõ}“Ü (i$yóeÕ“ó™Š-XŠÕÓB '6êvãÝ¡íôw0„ öþ<)QOPE0pŽjIV²AnœøÓ&ö;ŒÄG†¬îÓ (£ÃÒ)‡µò´Y¶ìŠž/…ÈsƒóMvJ±*êÅ„]l½’}¸žžwùfFeŒ «€!|´ï"ǂ˷6?®ülÆß)€Àù#)zm·mkžÕâ’3~& †ÏÛ­Eqnl!¥Ó-Û†¾ßÌäQJÀ´ø’¨ÏµÎ"¿áBă–¯±ôÊS4~8 ¹j7Ô‹U‘ÀÀdÞIwSD(™SÎùáºFþ ~æ/S8¤†çü£ˆ>†2TÿéDDpŸöÞ›Œ6pêôÊf û]vãâXëêeNOâá.dpÑoNfé ŠB:@5|NqÒŒTåÕ9ÓkáÃp ±˜‹hÉÀsåâ¹ù1`N¿sÌŠf³’)»¥¦§vØë0o‡MÄv?rHkŸ°²ÂÛÞùÓLJߦÜ:Ü:/ĉÀf*«m¿õ»~õGâ›î¢´á ¢ÝÞ„ð˜pVKÝar­!üˆv£TÖ;Ò@R§¥ACãVD’O> Ü3.¦õ¬ „]04`¥ÛýKeVv/cÍ=ìÓÙLn7*DFb-y~Üúº—T±€ÄYWžË8DßýºÃêMè}"P†çèòFz k¤c–õ[æç. —½ŽX!ã;¤¸gëfìÍÕgÛ›õTüšüЙ>¼; !4¬ü¾¢˜š…ݧÏ{g–Š•+#W“‘ô™K¼ évÀ¢ Ø?¼{¾ §K:¯¸áÿH¦yMoXTJáÛ‰ãÚ/ÒÄ ·8Ž“X›3VB®XUƬ‚ŒhRæ|c@ˈޖQ±%Ͻ©J©äµ±#&I8dÐÌ4‰+fx†ù`¢]uƒQÃ0a|+2ž-ü¢1©’ÝT`àöpº¯€,òÈÜýchQJ›áà&Ì:3ùá6÷rfX¸¹D1ÆŽYËõ3&ûÅ;)q*f 4¬Ä˜„`#º˜•·"(¡Xcì}c:6òûý›!ü_$íÒx‡¢[m‡Õ•_Æà×OUÞÙ+1 âÇ’1PÚ•¦ÊÞé‡Î6Ö®ï]­"|¤9oy6‘éƒøÌ8ú,&FØÖ0įã½ZL+u/äåEò %4ïz/ÛàgnG¿4nðrº81†.ù:•Lzvæ`”û`ŠË,ÉÏ½·w3|ÏÄÔ »ξ:׬!÷ÅØª7ûx9éWˆ tÝUŒº­÷™æË¯„Ý£ c;ñrc±üa‚M/oŽYª<–Ó„2¦ï?¿,SŽoCýˆNìâ×и-ÜÀÆü~ߣªpßçQ¢âo˜ÛLÑבP )–/iÌù«ómcJFó/$oÆD1œ âÒâ{¡«"½ZX¼ÏÖ i)uà ü‘1–zÃïà:ÎhH¤XzlO6éT¹é;…»œ% aºKI§ë~1¬GX|Sü)7m|¬#Ñ¡Hðð<”ÜOd¨Ü…fâæôqs8¤v¥ÇÁ¾­€[d¦£|/T-狌ü¥Ñ6*×½RU—©¸ªG>ù øL?»°D‚ÃRd=z£¹i oxkð ìÃGP¼×‡–柋¹[1PÂuÛÏŽ@q¤´f¤t`ãðó¢íæóÙ<Ķſ€Ûx1[³¹½òªTAgùVk¼báõÜú.Q);äû`Ü|œ3,£ÏØçÖ3•Kj”¬º…ƒLèµb‡⢳²•°þÊšWž!ÜŠUIµ¶˜»2>iÊbƒ’Â"vÚÛ£•·<¦j3Þ ŒmÂCåwóΠ'öÜ…ÊJv|w¦ÝÎé Š{-ÒÃÖÏU7ëRûU¾îò pعô K#¥gZY`´oÒÁ˯ìÚã-—· ež¿ZîrsSAùzÛçÐWàñ“®ó†*’c~uKÚôî¾8=òÃõyö«Øh°®húý³e .vC(뜊ï7¨ÿç=óÐAÑœ§á&6|LM©v`Â,×} »;m­ðNãÓû9³ãæÖQd¼DiçW¦ú¸„ÂÁD²°nGŠ¯ì† çc Ò-0\Ÿä£ï˜ü¥I`cmë‹õ`]½öš›H[±½ŸlîØ¼x—…˜½ß5Ú`5 øÈR%l£*hž…;óϳ!­)&à¹ëAª^Ï¢ˆ¨~f2jjΆo¤78!^®ßö¼}{^î :@µ ró¬WeÇœ–'•]zÊ€ñ>Ñ}}W„¸^íïô)©¼….{µ)ÐE„³mí~?…Û~ vôîÇÒßcO ÀšÊ¨¦UöSéê6WqJîÙÂQ­DÔÛâ´¢”SBñn‘ê[×O¢8ÆÃxUcVÀ#ø‡CX‚’/G<ôûðFƒ¥€5x¾ ÝþH-ŽÝm ýKwF(Ϩ¥ìL°iM@¨ššQp1œyææqØö÷O3Ô…Žp’‚f³Øs¶N”n-²¹–O^t(úhìÙU ”ÃÒhrSùùði¼‚°ŠÂú‘àsÞÝù~i_ßÍ@()ÿq©óm©uÛ‰~ì5-†wk~8ËÑ­Ç3vtv”B˜¤½„[¿Ü(GÛEÏZl@6´–qàÜ÷Ûnß÷¬ÆAŠ;üУ;N¥Qø~u¨8Õæ‡5FÏ»%Ò%#É+ß=g_{4s.?«m‚ºæ ŠÊ½ka†Ä×ÊQM‰¹{?ÕµJf¯ç¾Ô¿;ˆx Ù¹í4iÞ:¦Lƒ~•=PñÚ»ô£8)ñ6®ëÊDÇDÓ芃®×´8¥û ‡y_ý¯ ô²¬ÚwìéŠ#1ýÜŽtz;Gòuë&¹¸ìÁfå«5evÀmԃŚÌ]ºmÜk¯?=‰ÐáЬ!­ã9ÚXã9Û‡Èû¹Ü3öçÏ„Œ«ÊÕ™á1÷žkQ/Ý7”" ±²tdòºæâ)0/Y²•ÕQ.âa_î‹5 ¼‡©rÊ?;lçs’¬mŸXí×'V&ô?›åGüj 5¯sæ©éÿ~¸ª«âÝw·¢÷ÞÂ^€ÆA×dÌ—Ñ?P-n‹­™·“o`¬$1;«6±×·Ž”:¬¹×OÔM¥lëßdÖP¨ÉeÎÿf‡…–¨îµ [ó°—§+,µªx¨ N©PWQüʺh8-:ÇYCÛ²“ƒ¼ ßwÙuéu·L!B?0GR 1竺ßÛ–¼U‚5›æwÊBóŠì'ј˾ÍÔ!@™—J_¡¡â“¥ ÍV$8 :ÁÀ³?ñáo7 ´ìçC`ý|Oxù@dE®ã²Äµ)ÅÊb½ÁÔwS3 A(Ž&Cß96¿–üš®Uºñ3ZMÐéäMŠ´M[£`ïÉ*?õºÓ”>* …ã+DÞý<‚C·±CÈ´~2É áìÊ¥¯˜®IÖ? Z}©¦Ê‰ãŠd-gÅ=‚†å*ínâð’1ÁóÙ³*_£(J¤EÁú$–€šº­¡pÚ‘œÈƈc°JTVÚ Göô‰ö‹Óegc€)नäzŸ¥ãG×l˜,/3ùO²x½6so­/4£X͹هqžÄ|[yUö»ÐRt ’<‘ŒûÅ”ÔÂãõøòD¦wœ[ßmHóëØ­›mzCBv—²Aʳªú±³•RrH¾Ã‹wÎÞlnå¿ ÁÆOhuó´ÂqÁ‘õVÜ«Ó §äЧ$ýÊ‘z¯¶er@þкïŠã-‡òuåP w¢Pïv´®‚ÁM\Nr»kûT*ˆ/Uôø9‹C/ÿ6Ú‘¾_M7‰EÞ>;—3ßKQáRÂ*Y¦÷ižÞ, È…°_™2##†bóýKY•Ïf ™dÌá˜À×>+RÄîJ8¼¼—ý?l>oœ¶  csC¿Høhѳ¦Ú´<16¸nŠñéiÍÌ–îòfâG{»Ò׈i².ï¨þ˜õ¿uðEê±J¹Îć1‡Ò¡cÁž«õtž]™ÆÊÿ\fAÒùn‘â/FÞ<ôå÷IßÇ'®Ï›¸0±ós_ì˲º!Ù 3Bá€pþ¢¸ý²A 5ðÀÿÃËKÞ´¸M·X[–7Gó sxJ¿ B¨ULße§ÎÍ nä¬e 'êJÞ^³Ò&Í—á COW) &9^¡¨Bq 5që994Îj8½KÓ€[½6Œêt*²~`ªfÄAÔÍšV=z²*‰Ê-pry~ôoœQ¥þéÿ%ÃLäÍຶ Š`vJW×™q6grxåÊÏR sî—˜(ãTçëÃiŸÜÔýbéÐ#§åÓ íöHɢŭtØŒ; ö¬>óð[„¡eØlä÷?‹—V}. á.U@#XURÏ L7à®=‰‰ôòÈ„˜ôyðôv6Ýð?”ôÑÜЛ ö„¨VëòØüLT½]qiMðpÑp&®VÞÁ”b²Z¢@¡ÚÀO:ç<„þqxöó¼ñx31ʧ;–Íz~~êº]ƒ«—MV?>ÐwFñÝ[ÄҮ˽°”‹ˆý±ÖŒªWŸsÍऴ(ä0e2Œ‚ªè1„ªCñÇÅeòrxt,Lyk$Ñ]œÅ|q$w¿“ðø8 wjÑ¿N}Ÿ• ©ß(­_f6E½_Œ«¶D¯l* ùBÜ{÷¨òºrÜäTuuw¹s½ËÉÿYæqx8­ƒÍ28+=άHoPß,¶Ž‘Ê¡]Dôª|aè‚ÜtXûÄ]™ð¥ÃåÕL#ÎvEq!iEmždºÁ?†¿#Äqå…ÒãUrµ™¬ðBøo{ˆ¶ÚX¸¦Ó‹Êg($Fˆxµÿ&˜û!W%r À"¤(¼¼¨OÍösG;._ ´;ˆí$šŽ™çã¶I`ò¾'&³…eùå|_èŒö>Eœ‡Ô¡&!Å✧Nꃋy-¶ˆeúi;avyÍÇ;SÊܰe{íD;¤ô¡«Ôq§»[|½nߥTâ÷¾xW¸Y[gVSí•»K¦ «pKqM-MÃÓöËM_Æ£Þþ„u#}ù]Û´f[dI3™¥$ÊL¬ÍN¯Ÿ¨¨o–™=[XhOnkµ½¥ˆÃN 0ɵ…dŸÒæüeG“Õ2°iÄ;7“\ëqÑÀãÀ&í:nÔFspãÊh‘ãõæBä"„`}-ÔÔøÒ¿{aH(¡À¦&$ìßSšCóBor™cbQ®£ÏmGÄ œðTǬ÷è©Æ‘O ŠÖ×HªõkárØ­ûeƒ,1º'4½XÛ ˜;Íçv6†Mû¡1ò1ûwf Øk}£ÒÀ0r!»pÌÖhFyôã\¯܉ ¼…žÊeh™‘Ï+}T‘í4yç¶Ù>RMÿ8郷Âpš6½¹k裲ü{—¼•),¤ÔÙµ€éá£v ÛQÂQgÈWÅNØUŸTÜÁÔÕùq4Íâ±Å =KP×ïd£Ô:¥O›¿ÀïÓ‰éýZâ´wð¶ÂÑÂМƿÍ&UøZ<ŽMhû\giÛÝ+††hy_ Lʨ ªîÖ&SOõD½ŒA†p²ÀÉ xÄz¦Ük%) ¶¾Pã.a&C»Qp.Yß3É$²2‘Ù7íiqgåsqÙÑ2:†•Uj#¯ë—(§ËƒK(ƒjLŽ`¬óÁÁXZN¡çÈ©v>¿'—)ÄH½ûKøj]oè? U™)ñ„Kͬ¶Ñ‰ì£~dß4÷RöäUd_<¸¼U&N Q õ\S¤ •Ê.vµáããÊèçuÍ"#?!,4xÅ9ÄÂ-e{v0©‹[ 6öÏÌçTel3`õ׫ؤ–iªSH÷÷€—亟 Ç¨2ý»ç}öQôˮĂoˆX¤ûÑEV–ø¡¿…Me5‡²,…úý©Äç§O±äÕÁ—÷ 23m(“LòfÞAEl¹î=Ž¢Z³ û]¦6Òúö/g]dÊ ÍèýyTæjMâ~£Å¸ÖDßÜ„¼2gå â“­Ç+8çó0(»«ï«“"-Ü5ê+No–ЧƄ |œ ŠX¶rÒ¦=ƒ[ç7ƒ£‘zŸÆ2¿/d àñ©ùMŒ^ÿèD^guØGˆWÍžFŒÆÕ°®ÀÕ­ï J›«EØ*Ï4Énf…[p.·a_6ÝáöŠv©Õ®Y|†ãfHœÉºæÍGñæ Î$ªÏÙcù`ج~禨^À ÿÁ“8Йwjó¼w€éÃÎM£CŠ-äanä’¼H7QÚŽI­ä·½ nA›ñkŸ/4&î$Q-‚<“«Dª”¹ Š%q’0œH?jM¡]O­½úøM©·ž¸É®ÏiªCXªáž¦ÊB;6°*Þ9¬RPnöR¸y‘NÛJÙ0̪˜Ê嵘äÒï‰C᱘Öä°†·Õzx×% Q [gûÊ~ŸGócK fÀsˆxAûU€É‚(¬ó½² qòÝY¶°q\J˜·]Ti«Ö„tŠ¡(ºïEÐŒaMGl+¾,…£ËÌõ¾ÌøeþÏŠ™ß`úŒ®r»HïãÞ”+ö Ó^¿æ½Jgô7öÍMâjYŠ1ZÍ83)%Ü€W¹jC½ÑR1Z§BùË›—-åÕTѰ¨’ü&€«{ 2•N>7gÖÁ`–‰áÖvÊiϯ¨]©&^N".Vo¤_™~›o‡èÄùíqVG5 Xnåà—â´Ñ¸¦È]›Ã\³­ª5…m†lb’2ÀÇÏ[Ž~ÓEƒ¬à¤ë)DȲVÙýǘt,Ùòd®²²&赆ãk#\6ÊXrÕŠ¥ùèCFA¿“;Ç/›Å&YˆÅO© ¯Yoº8Q9hX0Rßù`L¯ É(jl—Ïך`Õ‡UÀ„,JPÃ;@ÊRÑ|ü‰êÙ”&/Ì.†€¤E3guROÞO#=2ßh¶ÏЧùï´c£ºnÚØ’d+l4’ B$õ ¦R"[7]êYÅÁ$!¥ ñž·ï ÛÁFiXŸXöUòfiL†¯d|ÆRTYÀ€2¢ýÊYœ·~ysR¬£hÈ–ãÍ»ézóž×EÌr¿… ¡X Zâå§`OI?b8ÙðJÐÞE57ŒØkíÉ!$ àEb|ýäøëûòR —+[ZÖÄš£ªP ½±–…²iK|´—Îû-ññÚŒ,)Œ\ ýê‘ûC¡2¾1ƺ¤îÀVBxê1×êY¾Ë¹èBKƒÞ™ŒêûVØ’ e-Ñn¥OÊ)©¤¥ßìÜðN‚T©WÜö­iàqÎèò¼}äÓÈããòæÁ›qO Ç(û6w?æ”'9íc—I=òx)÷S‹tú3 yfsìžD'„r [£bUn#âGrCRM$Ò±³nºÜ°ïêÃïçªxk[äãÆ[@|íuO·0púj¾Ù…8»/_sÒ¤ôr(ÍŸE±d ”ý»šÃŒU—Â[¥ç&a\«ŸbKW6š G´díÒvÅ£kaÌ»#Á1¤ØhÂöΑ±€¸h í÷æ~àlRtÓ8Èú9Sš£ÞxöFò« UAÂìþ™ëõ9‹z’lí²z5*¦‹nI÷íhÃ"âêó1ÉY-oÁE\ѵP[r‘Sk¥v¿ÔG­iÞ|wŒ; ­µâ³;çÔ€82·08žÏ¢zà1SÄ| ˆÊÓÍos(¢ûöž Z;|ØÓ"†Ëñ®˜n‚}6φþî¡0¯Ó4y•W`ÀëT•SýØZüt¦^™óàÀ¼‰ ¡¾•j¢Zîw4ÃÖßFh&q´·^Ù´±ËŠâáñÄ9'7¶ T ü»GØZ-®i½RM^cºÚóê°<“!v½á­ßi™˜Öî”À³†£–©& %7$¥õ(ZËz.äÏíìOg„ÖÂ0ÂV½X-%k°Å±4ûN§BƒŒ´FÎ(ÖO;*xPÌëůØ'Ž]£gÒ‹^D˜eÄ/^ùZOЭ¿’x7vj—mSPÍ-D~ÊEÑìZü?RÖó‹ endstream endobj 180 0 obj << /Type /FontDescriptor /FontName /IYMUOQ+CMSL10 /Flags 4 /FontBBox [-62 -250 1123 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -9 /StemV 79 /XHeight 431 /CharSet (/A/B/C/D/E/H/I/M/N/O/P/R/S/T/U/a/d/e/four/g/i/m/n/nine/o/p/period/q/r/s/seven/six/t/three/two/u/y) /FontFile 179 0 R >> endobj 181 0 obj << /Length1 1469 /Length2 6425 /Length3 0 /Length 7423 /Filter /FlateDecode >> stream xÚxT“ÛÒ6Ò¤Wéé5ô&½÷" !„Hè½HéA:Ò¤wéÒ¥*(éM@ù¢Çsï=÷ÿ×ú¾•µ’wÏ<3³Ÿ=Ïìd…•Iﯼܬ‡!yø€’EíG¦@(Ä â±²BPðßv¤7’`³û´"à¨xOÔÆø½u€Š¼>ÀÅð?ÈâŠDð! Ð_ù¥A³2ÌNîâ†!x¿ö§qƒPçîÃÿ§¹Î0¸Ìïï•=fgÿ‹†‡+¿ âæVWúƒA™ðþms#"@ QQØ ö9òÿ*`èã þíümFqðs…»ìQ4À{0êÏaã  Ý=À~ÿéøç O@`!¶` ïßÙQf°ý_kTÿÝ!Þs J~à¯×¿ž,Q ³ƒÃ >ÿ†ÿn1¿–Ž‘¢Þcî?”ÿåTP€{üx%¼¢@€€€€(@LLðÏ<ÿ:¿Ùÿ¶êÙ@þìî?2ªÃìቿH Nïo"ž”Áñgl8ÿ¬ Gé àø·ü-€"@êMàÿ<¿CþÚÿ•å•ÿïHÅ ýíçø ðÿøm\ PŸ?”ž=¨ÙІ£&ößÐÇà¿Zlñpùo¯:Ò5#ò0”Îy„ù€ÂÙ!ˆ7ØN‚9þ¥¥¿›ª…ÀÀzpä×½ƒŠÿˇ=3ênA ZöÛFMÖ?ë*Ã@p»_#((" °qw·ñÁC)µø  fÕìý[â~>‰  8ìáîx¿+à·A 8CΨ>8þrþ¶ ˆømQg‡‡™PXă~µ÷ß €ßó@ü6ücw wwÔÿ–jë¯ß`°7„·0 I…;½ o¿¬‘§õâÝÅú¼Ò`Ú%‚d›{é稅¥:å¦ðÄ®òþHºÞ|YÄä¬?-×Á嘷EwNÈršZM¹Máˆ7èûi·˜ÁNã0.–½Fr˜¨OOôÄÓœ=ùñìõS±¡­ªÍ›NÄ–™Ä.ÀP|NÌ”F‹|.ŸÛ¹‹þÌ”‰e9ljAGênžáa¨n4~ƒþ w¡ÐKýÝgÍ<.sxié]Î@ºÐIfoµhe5¹¯SîHÒ 5EbŽFMAä\±,5™ºÈ%‚mã‰Øòé‚¶ÄA!Å{ºï=êà"³Ò¹=Ë'tÖëÙ†ßù î7'E;òÔ¤³(°VÛ¡gV Aóz1)Xuoµ§á%¥¦Z英ØaBV›÷/Ÿ<ÏJ´L•†Š~y¥ ªep±¼xý0@FÃJ¦§Ž¡Ãä´â1ò€‡ïÛ«~H… c2ìl»ù]ûpOäœå€žb*$Á¤#k·o'±I]äü‰1—²(²VsÞeÍŸ?d—‹©×Ö©*e&'1?Áo,D”oH2g¨µ…–¡ƒk*ùT>xš˜Ìù Œ¾jñµèû—Ò¡ÍÒ©âÁÀÀGw”ô÷â‰k×îé÷|¿k•`ë~Ä/ˆc¥™×iæø¤D‡])œiÜM¸ÞV0 9›]ÎSøidMVh‘gÿüGÜ·­³†Ã<ùº(3htJ×TКõ«÷ôfqto'öz;ØS·¼Õ®Î1Èl‡U%™Ã‹ ñ"­ŠKÑFæ6ZígÍ8î=ïíϾ㠘_H ¯‡¸Zm7èºþ(wSP±Ï?•Z«Ôf“ðÃÄ2R"ø&NJ`3Ñ*8 ãCs´oÄ[‡Êj.R욳˫5ÖƒUÓUr– ñäZ˜{õæͨkag]iªýŸr³F€¤ÒOPž%=¸ò³eªMgô™\„b8næ‹LX{WMcóÛÓð¶P«9–&¶ØÓKqhjüz¢…-<¼›?auÕŠ3‹Ép£/؆à}åõÁÂDÝ eHÇ#æ|©øíÔk+´GÑxò"'™¢ Ò$ ®ÕO™ñ+'Ð) E;tdE|/ÿz” @k™[Ñ)¤ ]ßxm¼¸>6ÖeS–ey¶-;þb‹Ì‡&g8‹&ÞêFyöX—`|}_'‘ð`…¡·Ï¤ïzÛ@{Ñâ.zÑÞ-UTg–¶Ý5°î9Ï áŒïCGÙ –äã*E£44·Hv¢ÞÈ™<2·|½”m뫪(ËÌê^*òbÚ®M}>Rd ·Í²ÙÔ"yÛñs¨#NùÁüv‘ûëÞ.ZÞ–Füw‚hü´ýÖ㸀ȅ.ÚØùOTø.#O«Í®iú ´ÅÇßž-<œ6ŒÃÉÐ_Çdk©}hÕütvژ˙ñ Û-—{î#ÈÔ'µ´­(/û™µöûØ›'¼ruØ@Rc¬Zö³œñÚ‰ó2ä£Ò¡B";Ù¥Z L2Ž0Ó°§}Î:Lßî«Ì?ÜV¨Kûê\÷±û³Á>Çâ̸•à<+1]þúfÏ%¼ -vŒè+Ôß% >ýn¯L˜Z£•¢2<ßç™rü¢'#é!w`BaC_Šr(îÛŒ$íÝ9þÊszÊ]äüSŒk5pVÄ‚žbýWOƒ-fUÑüâ=‚ì¼\Ë|yª„·±)Üþ[5ë-Æ3ÇŸcTK_CÅB5íi“û.»çYïKÿPeöc/‰0ÑstÝïM­8¤öåÿT׸à;¥Õkîß­t‡a@˜—èû Pyßµ1†ÆìÑUó©üàJäkœ¨ºw+ÔóÍòë)-ÝHhgí˜ÚM¾9šaˆ7bL»€þ©^4WýK0¸,¾Ø¾¸ÍËy1ò>Ã¥š§Ni<„ùùDïa( ~þgH}E¯±,¤‹”4Ú÷tK| ß¿«HÆîÖÉÇ0ëyHoƒ±Ëàfú µ[É{ÅaêÄÓÄÃù·­Yw$|ï¶mF).ñ÷![û3"î–Àé¹öÓ%bÜÇgÔŸåêö5Ïɼò[ùpy°F/¹mjfßã÷ªgC•´õÍ0„B.õxað³ö“ö‡¦Ÿ±À¼{ü—„±yb!±\Ê"Òí" áqi~–Šå2,?1Tp}˜&¢¸^Á[Ѧï:Å|àÕù²?Z4Z ?ï×ôÒwXzîšÃ%`EFÊ7õb¬g·_Ë8:ðìÝíõ¥ 9ÔfŒÀ’•|¹øIB[™u•~„.ˆfÝõíyÃ066" ]ćÏ$,ƒnj´Šóx“®À0­øÜN@3¯À¹¢â}ŒÓRPE- èKU®ZE¿ÂèÝ¿kSöXÿ+«oøô}7-ó&…4=BHu`_ç+>ÌéÑýæÉ éÔ(Mru­Váª(ýV»œáyè®;m7ƒÝ+$™Â°—㪦Ý3‘üÖ¹%3Øž%É5º¬Eo>úœ¢W"‰Í&ÉIŠ›Þ¢ ‰Ë9±(ŸäÐ[£Éµb¢ÙƒþѸ‘ÝwÁìô½<ý"'.ìà|ü^ÝŒa{ IofÂG­±Ï„»‡'_­” ¥7æÅG’ˆ‡/>5 ö0“/E^ùg£¥=Àú.b¾k?i³ã¦pq=å/}›…ú=Ó#¢ë¯×‹µÈ’8.aˆ XßHæÂ£çvp•æ©áé–öwª!Q Ëþ6ƒŸt˜VÝ>OGÄ÷•_¥”–v¨eX†4ÈYiAçc¦óã;ÒPw꿯Ϻ¸žhDÂëåjjWÓBn­vä§‚„JVõ)¾v)0Ÿ²I(´R&8Iã=³”Tl¿ðóº[mM$"tQ¤rà0ÝU'üB!s{={O¾´‚t¥ÃíÍøÑãç·Ë“ Ø1 ‘… Uzö÷?à¾>å™}ÔŸ'z¶Ö~—î¥{a‰yâR·ç“/øí µ?žSuy_¨²ÜæÑ†íŒóä·ŒÝ{ŸÒTJõi¼Se43TS›•*}¿²Ûž‰ê#×HG9ÿ–V_´x+‡Ü³,_Ps‡\¯›ºKzîÒ+¦w.©àãa¹1(%áã[æ)cEµíË✩fï>ô¹ÌÑñ °IÁÞ)*íèç+8DGêÔõEAß7;Ë«[FrRi_5>*ؼ5M[€5Є>ÇÂÊŒŸa+岊£Ld¿É¡­Þ¿fkòøy¬¿0ý¢“a’f¿†ôvg¡œ;DXÜø0?ЇÝeñ0Óèkˆ„+“u'z‰~ûâ·uöblÕúÕ»2„èý¥£o,ëIa§B&2ù¾² JûÁÒ:—OïtØÂèŸû¹QÙšrÈ0/ˆsm?ëu.õº„¯Æ\¢}ŸF«­õÄ+y­¶\ZãwÐ&PìÚ½ôSN¢.ê}æ²@½’IÂÇBa¼²åHƒÌ9÷ufqvf±Þ­¦À<Ù7ç_U·)b>N“;9ý!ôâ<Ý•ª_ý2Y33Óv¥”‚ßõôNÃéK:Ãd·N•IqLëŸ3ò$I]°]2ýØ·.šq~l¾Rgºr±B\NÖÌ!bïÇ)ëws^³sQÞ¸™Þ ÒÎÄ:ŸðãÈ– ºPs掌۟µTï§®¬\ú<àX«~ºèWNK\ÂÔ®ÏÃdC|ön9³ßR¨à~=ãþìPùó¡9rrÑAW“î¹þ+–+–7Òä4_Bçrdwìä„@œÄ–Bå4i„;3t3h¬\Újt½4™_‹r¥í^­dÜrwí ® wºÉS!¡!îŠ=EÐ#S÷UÙ/V-ÒZ]91+9ϱ~æX3f‘pÖÎp´\e5ÜÓÖnÅk¨ 'pðdk¬¾Pü¼!¤ƒÖ¨e†¨ó2ÔóðK¤D´·Ž×\êå>ãæ}QY–oô,½Vå›Ñ¥s›æXDwEû”i'XŒLXÁ‘zޱ£¥ÍÒª—rpÆ–è&å0UçMˆ…>©úv õd†bkS~GM²¾ê助½­@rÃj›Ú _³WØ •éd5!ÞK•ÒijJ 'Æ4²®'Ø>“é-äzˬ*Òm¡=ƒ ‘Xç çùªšózŽu:õæÍ˜êÃÖ;QÁŠ8G†”¾ËSö¸[¸§ÓRb¯Cî<F}++ Ìj°·ß¬,±< 0ÀÅ" Å^ ²( &YÕt¶/°9…{hˆ ½"Þ©?ñ\Ùé: ÒüøØ/G{zYHv.þy™ö‰åwÉÇÔRä$žŒ O‰3JÝ W`LÂ.1!‹çÓ[Q—’Íc2,ŒðÝkBPîaœY®W…%IOšÄü¼w“$Rÿ6&Ø=X)ã#]Áµb«ˆÑhEÐì§•w¯Í‡²7^ö§^ŸÞ±8»˜Ï¢Ó Aß Ë×KfC"‰ÐÏ=T}¥4„O'Ÿ3H5yp2­“ºúô(5­Ç³cäèú›b`l—FX’ ³¨_ Pf ýŒû“¦þt8šyxºbRz7äñuy?Ì®a¹2WÎôÞëZTw‰/àYn0rw$H„ä¨Àxu¤¬Žû5IQÓëÊ·×ôb1uFˆÐ¬ªÙ²Ÿ­á¾dlüXE‘kUw‡U#¬>b‘÷,ñ‘é±lþ5ñ ]18©Kªåëóâ¹é;ùÕXÚžŸ9œ¨%akŸÇã°ãýlË1Ë~}ô÷ï?ÕO¤‰r!ä‹}Wy„k`ÞI5‘×yèô`ç'{èV_»@%Ù<á[©F¢£§ÚA/@³’óàøZÙó§kdf™Â šQ‘˜eýÛ…=e[Ddr±9†¯S3ì6ç̬šþOô5¾¼[;ñPŠÈIŽ& 8e ¾é—à»™-iÛ²¥ñTq)wqËâ‰G±A%ÎLZôd&`g¸ê*[’²=È”ù¬GFºc B'AEó¢/ºb2!ίœ‹ Ê:ÐGLªÙÃÞÐSæQô<4*y3§óQ\ nçô1G(D)ƒŸù€–æ8mÉn’jG!Á­,V{¤³Ž…“i+î×oyëÒò‚?’úÞÀ1qnÛ\E‘'õ3Sô,Ó´óŸŒ^pW²³¯™L™Ê}z/ÄTdá÷Çûœôˆ$VO*™³»’b^ÄŽõ/èÄI)XéÇë–% }ïâR¸'TækÃ`iú¬>@¸s›g­‹þùäcËÛÏOBx%(ôùûŠ6´ëÀÁ¹²ó݃C;S5 wˆ÷×1,cŠmºpo¾¶íTXï>œ¼MàÆ$ÞCÒõ”טçÔFQkäÿ,Ó•+dÕNT]þJ€,n˜÷Ä ‹˜± iá·]›ì=Ñ6V¡ŠÜŽq;«o>–±O (kO\ö5ž !#+n[óÊ#Š{ý™Kê7Ïfñò‡Ì)¦µbóÐãLI)ê8çá"bΟ&?` ÂVK²@ãyí=憨Fxï©å>TÑ$Y[œ¿;ºïXr¯ÅLtâþS4žåIÇG¼ÍHã 1Æ4î³7Õ\ K—®òÒÙxQg-—Œf¹Ôù¬·îÕk=­ ŒaÒ\Šža¶Ú˜üîàöSXk¯<À!åÊ,ýsØ4Ç—í¬ŠØŸQÙ Y‹ÁÕý~¼û„t§Ä5)ïùs©º(•bšæ"¿WÍ rìŠOÃ>°Téÿ`˜TÔ:+8Ml¦ôÎðÂýÒYLÿT¥y9û.A søºr²Ìh„£ÔL¢~|Ϭ—Œ‹Õ†æû Y,ËÃP0z ³jºÓóÏXá>1GHOïI;ýDJ3kò7†vÌÉå¯l¹·ºu#,ç¡ÕÞ_ØE½NÖDMÞ(w)i2èbSwGÚgs8ÈyYÚgŽô˜ïîÆ ¨|ÿÊ`E$/äùwpU7Ûsªš®QðŽ'>žïÕ†aóòÕpa‰ÜöÁyöól_Ÿñ¤L°ÀëÎ3"évò{O8úŸÊù%Hßõy,Óuµ.s•X½å#·ÙÛb´r…óû/…^5©A_ÚÑC[±2(›w|ëÑ]¹²È‡©8¼vù˜;<Öw,ÐzFÑ7™3‚.Ø=†ý)˜d> ýÖ?§ême5S•rŸs&“ׯI7¾¥FwöJØ ´§žÈûÝö.c”~?Ι—‚ÃDâjûÍ£›¶Ülæ¹rh¶íѹ¯TKm†ºÏŒ…òÜÝî‘hW÷Rgmü&9,¹0ÛÛ—B©ÐÞáh䣋Í>Vú}Îm~WƒÁËå…·åÌ÷<ð2”ÁI"—Ü} 5ˆ³vòÚ–’o_¶l£ôßМÕ<‚’æ9õŸ¨i|±=©Ñˆ—ƒWYùÈ4}-tÈóc·®×.(•w°yÖÀÆ‚S$ÒÚTp2NrÞ Рñ—BÉ)£ÁÉf™!¨¹wÉÌD]ú[_†éÞ|›LæÒõýÑÊj>u¥T˜²]þ4??N¿·#½+Fšbz?³þüòÝѼlXý³JL*Žìõû˜ÌK_½ÿ-INª¿Ø|"TçêµÃ®ÿšŠž8CÚ‚j !§—íÎ)}g!«—~zœù½œI—ãšiÌï{›e$=ÉÜðÅF}©+Æy7úì¾sA”ʇã~¬ÂÑØ÷¬U¯ÇrdŸ6_˜iyÊô仳‰ÝŸ~ûæSú7B MÂW6|óÄ=üÔh1‹>¤¡ü"ÕÄã°…[·àU¯A·¶w@ì”âƒËüùñ«f>ü§/£Ùr—…ÎVeÉq@3+ZÏH¢ÍÞnåÜc¢SßÛŠ¯S¥¢¹÷-ÂbI ´iŠÎ"=Çëë$4ñ|iɲc¨š¨öƒàصû.Þ4†g4Ô>’Ó¢1¦DÒøÍ{}“‚nxJÖE@x†ñùIŒñi0W7±ˆ‘»££Ïõ>Þ¾:•ÑÁ¡%Îe¶Aœð˜ró÷Е—Ž‡*Gž{ª¯3€†UÖ¯[õånPá`¶zAýƼ-ã=šÈ ¿‹M÷})Jl`È’Jñ¶ oîK€þ-ö¨7…·„Q5ãåN_árçý{™ÝÍä¼®x[Œ5ÇÖb?i€ÁF‹îcQT‡"¸º„f}£ŸØÆìÓÙ"Ä¡38ìT•Éä«Uf/o€Ÿ¯_{W\x·»aav3rF©’rLµJ‹¼Ô ‘“ûâ3&3o¼û]ƒ0Ž{E¯¨³y£úPƒ7ePö^͉·U>;>ï‡âè7Y"R˜<øbhô7îI¾©"eoÍÚUìÁÑž?Ós»ô÷À|Év­ab­uIÿÔʨ$nAt£BJóø·ß·Mäš"UE“æH3÷s’$÷ªY“µæŠòÉóqM",œò½ÅÍ`XíUŠ‹ 7,1Â\¼[¥ç d@ŸJhÖ^ïÃwv1½—êšêÜaÛP™à°ÆÀ ÄJøínµ’¬Ë­G†BÏÍÝw*,A @yŒz%•DÂRVg—o0æJk«‹ì@¯¨,‹Åh—àªÛ:ÿkŒò+fýµÞ‰ï¤È+jeªÂœ¤¢Óx—ÌVÉÆ1Ñ ßÈsϰý¤7Eë®w A<Zž}ztY…TN*´É¹‚6©7¾|qž×Ÿe £ŸãZÏFÖÜåv„Ͳàý_ Xè endstream endobj 182 0 obj << /Type /FontDescriptor /FontName /LNUCPW+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/asteriskmath/bullet/circlecopyrt/minus) /FontFile 181 0 R >> endobj 183 0 obj << /Length1 1982 /Length2 14647 /Length3 0 /Length 15864 /Filter /FlateDecode >> stream xÚõP\ÛÖ #Á%¸KãNãÁÝ%—àÐ@ãÒ¸{€ÁBpwwî!Ü%¸»;<ŽÜ{Îýþ¿ê½êªÝ{Ls͹6 Å513{´½„…• ¡¤.ÇÎ`cãdecã@¦¡QCl@ÿ‘#Óh‚œœÁövüÿ²pC^e’ÆWC%{;€¼‹ €ÀÎÃÏþŽŸ ÀÁÆÆ÷C{'~€¤±+Ø  Ä ··9#ÓHØ;x8-,!¯yþó  7e°óñ½cþÓ f r›Û”Œ!– Û׌¦Æ65{S0âñ?!è-!~ ÐÍÍÕØÖ™ÕÞÉB˜à†XTAÎ 'WàÊ€÷ƶ ¿©±"ÓÔ-ÁÎ)ÔìÍ!nÆN À«Àl ²s~uq±39^³ÔäÊ »¿Œÿ2`üÝ;+ûÃýíýG °ÝŸÎƦ¦ö¶Æv`; €9ØP–Vd…¸C˜ÆvfÛ8Û¿ú»ƒmŒM^ þ,Ý -¦0~eø7?gS'°Ä™ÕlóGàa^Û,eg&aok ²ƒ8#ÿQŸ$Ø dúÚwà߇kmgïfçõd¶33ÿƒ†™‹PÃìè’“üÛæU„üÌp³±±ñrð@Ž»©%ðê ?•ìˆ_9øx9Ø;Ì_i€|Àæ ×?d/gcWâäòñú·â2;;À l ˜€,ÀvÈÿDƒÌÿ¯çïv|d{?vÛ¿ÿ¾é¿N˜™½Ç?æ1PKYAEWƒéoÊÿUŠ‹Û»¼X8¹,Ülvv.À»×Ÿÿóßü‡ýŸÒÆà¿«ûWD9;s{ß_$^»÷"®OýßkÃøß ïí_ç ÿgüõظÙL_ìÿŸ—àO—ÿ³ÿG”ÿ×ñÿ¿I»ØØü©§ÿËàÿGol ¶ñøÛâuž] ¯»¡dÿº!vÿ×T ô×B+ÌÀ.¶ÿW+1~Ý1;‹×9gaçbeãúKv–»ƒÌ>€!¦–ÍÒã5‡ ØôÁÞüǽóêÅÆöt¯«gjýz·8¿ÙŸ*Ðëfýo^);S{³?Vƒ›`ìädìü:¯ˆàÅþº«f ÷?Gdµ³‡¼º^9úÌíÿ8Øwl ô¢¿(ÿ_Ä˪üƒx@Íÿ"¾w ñ?ˆ4ùñ€¦ÿEܯ:S{›W‚ÿ‘pqý!±µýÇÿæ@³Á×Ì AÐüøÿŸóèú9÷z{§ù¿šXü ¾æ·üäÁÿ‚¯<­þ_‰Zÿ ¾²±ù|¥jû|]Jà?<¹_]í^Oñ_úW^öÿôáÕÙþÔ¯•;ü£~-ÄáuQìÿÕ˜×ÏÐñ_ð•É¿x²¿2qþ| ù§š×Ú nöÿR¿–çò/øZÛ¿šüjîþ/øZ¹Ç¿àk¥žÿTúÚOÓ_±ÿg™œÏ<”ŠÝðAíÂk–}Üi(2È)Ì,ÞFºá§•…`5kc¸8 ©ÖÈkíy+‹BCñ6âìì€*P3Ä›gôxX†œ›4ül¥6ÿÀŠ@Uô˜ÝgÙϰ_ô÷j EÊ|êAîϨ6FuU¤t0†U»ÿÊRTHc±Óæ9oYõ"¤M,Ó™¼J7 —Cò^ÌqÆ›O>5o …é¿× Â|"ð|¬>¿¤~µI?ÕJz !Õ¨6@)õÍvŒ20e-KôúT;ÄÓí{²"!¯ÖQSÒ[ëzEP{ ®¥¤>«QþŒœ“Bž©9¯+rµ¼‹Èu^ZÆÉSâ’]44bäƒUãâ›[Ó µNV¾‘û•ïªc«§šê—’P‚9« ÖùäÒ "¿4²IÔÆƒâÃÍ€ì)Jò\b¬…ûÌ’d€±\²ÞûZÆöÝS•¬Å#FX^."x ,B6]zꑽimW"F­ÏÎQÞ<ÏÛU Yj?kå³ö“¿Ó˜à†ñòEPJöÜ‘íGéP_{›xeU(âßû@º–o€<­hY^Qð ÁóÁ #làжï0‹}h¸}«zuzøÞCàϧ´¶1¶³+aŽ¡âNi*ø9~aÅ÷½ey Û‰ÑB˜dùÖ*SX´ãñÙ‚ª@,ðìZ»>«(M ê;ª›®Y˜ó¤[32y›’‰šž{Ý›5Aõæ8ÚhNæc)®û艟3mÃÀ;GDF¡Ù†Kšø§Ì·ˆžq¹òœÒb4¢_¬³¢'ÈW/&Ì€þ0¥ú½Cׂzá4+ñv£ZôA8Ü.rx+´¿Íråò̵ªZ!¥úIwúpíûœäW0&ç{Åpšè0õãj¾þÊWÅõh»´ FO{–«ÚÎ2b”µ4;ocû%QŽ[·¾ÔGk¾{‡UaI••HEœŒ >:‘ A}£(Mf‘>õ]Uõ‰3gÑGÉÔǨûüklÞS@²Lq¥ÐrÜÎIƽ– :Œoå;ÖG}—¹Ù‹‚6ÐqmV<¦¹¦_ÑPœ«S$|ÊXø9Žk$fÈ҈߂XÅ"%oÇò~õë>Êfª|hIÆ3ê’Ö4¬u½l@Ÿ2Tž†—å—t1·KàÙx8‹ˆy&é{J.T7´ˆš?†Gãtf4Ó…þQ{ßOW¼²ÐšÏ+s½]ÏšBú¨èø¼¾Ã#›kQ8€Åó[®0J8îÒ ¼Žf«¹ ù g¦Û¹fûtŠÈ’B8VAlÄñýÌ—)‹÷6šügûÁ²(K÷ôy8÷äãVÔ¬_îb±%ñ…'nÍœ61;u²=»9~IP’Ó?,—xÄ‹”T.Þ;—B…:K@*¸È¸IHno§Mós 5ó¿5øüèý°8$G÷¬*e¹ô}öŒ¤ÅÚŽÂá8×ÜÒñÙÆQ–./N8†ãþ ýkbÍ‚˜ò¨M|0G) 2*þõc ñPŠs'¹}*Ô÷IÈùÞñ¦©ÿˆ_¿Ï¿6|›W…©a]¤Å1#C»±.`²Ô¤.6T·(T<˜kpyzsiêÉ'rbP7éñXM/P–ÍQ½t´9Ì2wëû®¿Oã*à×¾Sy!­Jâ,ÛÇöÔq1%ý óiím‘w}²Hpómòö©†ðýI@ÎÍϦ'úñNu‘X ä_¬8hÆìŠoXë܆ÁÆ¡!¿eËKŸ÷n¨$¢XŒ,„ˆð*Ì—Õãk¤dBýÂðA©r.R8Aö"ÒÄ(“ÜÉ]Î|%±1uèþ—c2:N=Ô3ÙÛ€“Ì ÅÍξ[œ6ÞxKþ+R0Ršä–)I¯5 ëí±ÍQe÷[ooLÌXÔâZ`éíRŠ]2=Ç}A¤5»›Éê©[d½^‰Ç9ÿUþÜĵÏitÞ,“Î!¸3ÜР!ÉÂræƒTøè¯Î…$ôü‚’ÄÛ^¶îD;òïÅþ®åÂ1Œf4xèG‡&˜aßՓѧAyæ”ñO«òõûú¬ìwˆPt œÏtl;;PzEûXJm~’˜‹Î•þþ]i&ÛÀ}§Î¼šbFD[ØEV‘< nã p¨(¿O|Š zëMôð[Œô^ËpÍæsÇÇr¾ŸM¿ïÞ«;· Ò°)­ž °n´Fšðöªç$KxE0Àu9âCyCC‰ÜÞŸÊŽõ«wî;æ¥A ‚¦Ü¢gsQæü¦ùÝZóT]q²4ØM†–ã§I>¡¤ vÌÛ«1Ù‘›XשÉÀsaí$®Ðsâ¾)Ú5Jˆ¾k»çù cvs÷õªnœ Çßi³­¬U8»ãSK©á<ïecÞÃüAßOCÃÖ5Ö®¹ìï vÂ0IÖ…„¶0q£.’ó]S§bÃ.¢0.JWñÞjpl6œDßGégØ»Á Ùþ\»ÿÈÿòÔÄ>…aÒƒ&YÀ÷„ï3$m;ÓQÎvcºÓ¸i—£ºÔ)wýɡά&2ìÉíНU3s<]‚#^ÐTÒå5y¢×ò’…í!Ü´gg9x­ºZ£ÔÏJ*üF[‡;õŽ;GÜ ®[€®¢VMB#/«†Š‰¢¡ù7%n=ï'šàƒ}¤—Ì´›cF»ElŸŒÐ|7V*2íÉò;擜™˜ù)0ᦦr8þ.57ÇT ŒÆè2‚{C‰l·‹£øvÖJ絃‚XfÀ¨…“`\S”Ÿö)ܾáì!b=1á­Í1!C-û7ˆi®.ä¦Ýâ97õÊÓKð~;EEš?yˆc­[K8d6M!GwúrsE 7“Å,Hõİ®óÙóÛ]ŸgäXGÂvA% ;EbÔ@VCUm¨¥ƒËè# ÁöÒXÕ‰½heÃéñ± [T"ŒÅ ½ Ò°ö¢jÀVùK‚uâ5ÝñÖB¼örz¥ðæDÒü–buEÈ;2®Xevƒÿñ,ž¾écDo‘ f”³+™•_òÏxëÒ($ÀS‚Z!ø™·×_ õ5 È²º=÷ÉãQÕO˜©5‹Çù0­~/ê®Ô_Ƽ`¾øas¯·¯4B‚§‡T‡+Žæ“'d¬MG®×޽òÒ‘¼ U¿ßÁ<)Bc ìâ÷ëã¸JˆYîR÷¿¥çÎöàæ=ãåµßË>t›‡^Uò#<<[í§òT1W‘Ȥ„¬•–i˜æXMkg!W“ߣ¹Ð0¼ƒÞ5?zôÚ i¼N'Šj…ii=IäpÓ®ªÐµî5ÛÔîÁbQ'š¹LËP“qÔ?$}âP[¯d®wÓABæŠÞoûLG «ö‘éRF×%{Kr®qX›ÄÇïNüÍ1Zk™œ[²%=³8œÏúàŠžö¹˜ºöüÚÛ÷ø…ÅìüîÕ3óM´Ú/ÑSƒùËÙ‹êÑÌ¢êA!n¥(Ï7ÅS„™ÇU%ž?Z' WñF÷=AÓ7ˆ°ËÖq¦Bž§WÆ›w²FÓFÔø_¯¹z1ïß"F®bÉÎË¤é ˆZ/ZOã?wF\H¸Mú`ø߯ÂFÕÑNUú,4R¥3".!ϼ»Ú zß×Käks¤ùO iáuR¸‰%[ÿ¤SWU Žªh³þÀkNXÚ,,Rº{Q2 ØR‡âðWÖ¯ít(tè¡ ¯FQ'MÍFÌÎU+ª½Gãî–úÍÞOA5Ë òœû?eQoø¾bF¦ ûj‰Ÿ(»(½.-~QOCì±#ÎLPÔÿgÝrÅ)òšf°€RÖïnOÈ3Œ’íÉ×zpÿs›ü§Ù¹jý7°m×nâPaöõšiRãx–µpœ¬\9¶Ð™Ä°²Úða_ç ˜‡³${J#;Šh¯ïgˆ…J²=Ãý…‰Ojl‹C½a¸éǶDÝi´róÇÐÚiìŠÉ[´ó (‹;¡0ÁSÑÕZE®~ƒØöéB;ƒ(ÞUÎÎÓÒoëׂîf[êaÙôîOÎN€÷VM{fkÑ·t˦ð³ÞaÓoµ3f[“탔»f¿¶ ‰Ho¬R¤Î½CV}·2ð]½F8n}©¨(¾;8Ážo98,Beëå¿›i¿•í9|ð£Ù;lâ‚|æ2ÅìÑ– \«rµ?Lî±aœÌé:Pµß '㽋ª|”ÃßqÔu/œ­Ô„L†óøJÇ©ïPäÀ‹u9ʾ©\Ød¶»!ŽnÍÍ>",ñÞÙì_ǽÒê‘ÃÓÆ˜|7ªáÛV~eاzB÷ÃèfIªÌE¶?GöD±Ôìn Þgê±ÿ~|îtá÷݈iÏ^×¾›JƇӓºgt!6²:EJýþ÷{Ï‚dƒ_?Dàt>YP /9!`ŠÜЇxª5Bƒ÷—’B<®‚à4”‘t{³dDÒmaÇËŽ_vfÏàm>ØV`6ÀŸ,–8ˆÚ1{øu“pÍàýr.„þÉßçþ>µ>/HAÛ˜ƒê1ÖâFßð8H~Ö‡]S·1œ¿;»Ž.ÜÒ¿Š}Ë,ýÛîÂCß\ÖðÉ@à=º‡¬Fp™Š’lúÒÂZ<ä_ÜI1š v wÏH $õòÛGõ¸\F•0ñŽk'(GÁhlI¨ÞH|‡mÝŸ·™þ¢p Æ~ÞömSÞ˜¯ÞsY«Ó9w(aÔL² Q[ö+MÏl1=ΪÝÓ}‰Æî‰ÎÕŽë§ \x_i«Š£·,ÇíÆUöå³ÕYäÞLd"ïæ{ZošmŒg¬«}cÍ+Šþ^9ˆr]ÅŒîøUl°;~ Fò ¼yë½x‰ âyç†ä혧¾CYóÂÊü诬"ÝÃqã•SÀ%›¥6Ë´i;8DX᪾1Znâ¹—q7vúý¼LrÜn:ú²®ØK5m”ßÈ/ƒV?¿'$èZ‚Ãj>å:O ]f\†ï½òÒM?Ôà‰±gR¤ùµ,ôTu È m©u Âtñ)ut® ì,bVY¯’®Qm—±5Nƒë¸]¯meˆx z<˜¹™kà+~‰ÑÂT¹É}ª±ÄÂSZÜ›oþÎ$‡WÛŸ9¥Ð2'të?n´{?Ü꯸v¹Ñ û¤;­3®¸¨|Vwã!_¦Ï@Òù–ŠZP{ Õ’NI™¬êÍ!zÚ1ùK-ž˜ÝGøñPþÎØ˜w€“<ëD l»m;G²ƒ$¸O¥È–â<'µVÍ{ $îŸ'…MDkäÊâ”C¸ìQ_®+ËÞä]×>ïD9%MMJ†ó‡ð’Y7?sˆ„¨'¿9f¾W)ÐÙA’k~Ø ®—Úƒ“o§ujÕ5AÂûY¥¬Ö/0åë(Ígúƒê¶ ÔÔ4‰ðûLr»™â@ž [ÿסÌȔߖ}º³§5ªA8ò…aÆ)™é˜y / :œ©¶-“9m.Œ'g&™v=GÊ6éÂŽðM«ªÌÆË/±PPMI0Ô@_ÞG²©7²‚@R5Bñ8 MÖýKÝÅnNô*ŠÒ/±«ä)Ê›¹t“— N´ö ÇbÌ'g좥7×àë⯿#ÓØqUûæ®ô£}_û+Hbb›vÉ-¸ÈÇk¸l€]}Úª°LcÞræ&Á^Ù–#¨RÙŸõ¹ƒ>Ú1§zóê“UJd1ã·ŠOCkR2¾Ì×jL²H¨üÍhT'ò¸ø!=ÿCh„ŠDpKÆùƒâ´”äF÷ÒÄ ‘šÚ”=DÙ$©D/A]8ÿpùàïüc¼ïª¯“<òºR*"QPûÁ\¿ð:ei‰Õøè+½ÅÜ ´¤I×"Ép*¼T±;ѼÍQÓ¸ÎQ_÷‰‚ÖSûyjÔï¯;Ù@kˆh{+Ÿ÷ù›` …ÅT ÖÏû99ЇªÒEÃ0fØ´¨·§œŠ†A¶ëB ŒÿDÂV6™°¡žS²¥,‡¸Û6þ}”þnJÒ«w¡š0€À`j3ÃS]vr_ºÝ´wá½$®Äéï0ùžsüøéFpC"AÍ'˜ÑJ],^1ž„]%K⯶R72ÚSY×Y†-D›.¤ø@ˆ!mJkM…ÞF`RVºpÚK;Ajü³y‰±‰¾°·ÑË#IÊð ´óŽÌMƒäÂTº×¦çX^« CÌ41ÿ©7þ¸½©‘Ãç6ò¥Èëõz\«÷¨WF&ë¤/oú­"‚Î8µ¶;Uñß<_>Ke¡›„˜£ê1xµÔ«›ãB÷-û]ÐÛ¼É@É ‡‰ã‹ÔîˆwLfç# è7%ʱëþð]Ã{›KÈSWñKDoä õV6WÔ@S™ëà†&ñÊm,ï\PòHŽÅEZTÑ—¸²5yä›pžÉbwúC:oRhÖIýž\ÀAœþ3{ì7ÌýN­f̨G¡‘“–2{ÏÛIª¯;´¹P§#¢n“x¥mÿ d?I_ÖÆ³*Çáæ8(ÕúQ®Z¹Ÿ1Ã’Þhõ.80ËE¬Òúøw’bSÌ„©Æ¯JýÌ'ÿÞ[Õ¤A¶þ7ÆûÚYY£=­ü$W«´}<>×ò´x9¦C÷A§Ü¡ƒˆë9qE¥l™ø»tw9IŽÍ™ÀòªyÉTRR™±§µ·£mdÞÖ»CËØgÓY0‚^bXQ²:;•?³MïìNêW¾Bzd,O¡ý°Î¾»U„d•ãL3G,Ÿ¦ „f˜\:ÛÞgÆþ!¶¼‹BhoŽÿ}ï‚¿ouÅ?>~Ú–™·©ÃyW?û$£™K&ó á‰ÊOos9æ·“JUÑ+Á¬DWHU!Åuê_ËWÛ–$¡r}ìÈ}f ­èäFw#Nè¶xÚäLûò½°*¥’R³VãLgîߺ§ØØ5iÅõÅ8I‘h¦âR¿?]”üYóvç¦J›£ Ø7þxM9ôÈBrBƒÇ÷Î*”/ϤãÄûW‚¹Íón.3mTÿ³['Þ†ƒÓÅîIÊcˆþ鵪¸:ÌdQl&ß­všYD#B”QÒŠÞq?¬uÒ÷!¥z\2ÂG ÑÈl[aÞ!š±–fLÇ䇉wÜ_Âݨ\ßyrÛZa Ó'rÝQæoµçT­6Ú8ÏÚÓ‹øÐZ–±{wfLko—„îˆq¡c„\:ذ™=²S?Ö>[«…Ç ¦¡‡¼Cß|ÞîᙈP™ !]Pç¨úÞœÿ:VõçšCÒx*Tâp¿ªá—l'è¿Vå/boÄÎÍoüÒ²¤Àrìý9îÂzO ÔáÇ´FÙ)Úð J„ ÔEó÷KÙ\ äð«)áóœÁíÚƒè‰Ñ3­W¾Õ÷g[3Þ-Ø¡ôÞØï\$‡Šìkëtâ®Á»ìá¶Ca™ë.q‘Š EÍ.Ü,±ÏWç͹ÞEû×ð cÞ[tdGñv1òºNYä)ñ‚G\~qSÏ™Iaþm¦ÎšÿÜgƒç©ÒQ~|ŒÌÌOÅŒ^†N}}dAm_C݇xo”ÖƒljcÚÜ4„qËdЍžyå_ü|Œ„&]Ä6$‡¾Ÿó¿9Kü¢þ&Aßwtúî êØ¢°]xÃܹc•_Õ¨rªñû¦(U;_×ïó—Ošþr…FÊî¡—ö}[Mª•B¨3›;\&fëИŸH§žC4“Pû —7:gJ´=Em(3ï#<”-0™ÛÙA-J{<Ãü gÙ}3³™éµ5ŸhºX¦oåh…Šjz¢eÄ(¨q6„•áädÈPmžqÄÜ Ðá™Nc,ëEÌÔ¿&›ÍdôØ“e'mÙ» b‚ É¿z’Žu5 ?,€9 i°ÒD¡Ý‰l’¢(Œ³”Ù•' p*{,ÐNt΃õcáF´õ±¹Ó}:ŽEÁxñ¢T>¥äE¡ÓìeÛì{|»º¼—Sñ²ÍvºÂŸÕãwŸåM g¡Š³ؽ ŠØëȘd¼JPæ±Ç_øª­$±[SFr‘ЙSÝ;¾Þ¸6"kÓ´Áºýá|H:^—?#Tp¿xVÐ^èÍànƱ±_µ £óÈen)èoC¿«i¢  iiýö}FÊðSAõSîbËŠK?=¢uæãbü\’.0ÜOíó$[úä¦÷Ù½äIÏfR@Ïál;˜­ A<zYÂÞÙŠ¡ œPê åi îíûÌiˆ §BÌS¢«WvGq·z61ŸÛ!mVròȇû{&'‰rÝÖåÑ©è†kµ~÷p85˜2¦Ž‘°>›ÔpŸôy\î´±s*—+Ü22ñ9[]MDëíê†(,µhŽjË Ï(³Oè˜>†Ä›ãk ¸¤™Hqr·;£™F¤>Q¿`1Q¢Õ&¿·"’ŽÊøúXl+‚ëÞ ‘—bˆB‚¯I3¡ÝÔ™c ¶ÔÁLkêêóÕ’ }Á'TU-+ÉH£p@þyîÜàÁ•áîümÂ"~Ÿz Yžæñ–ÙCÅS·Nɶ*|oCÆ—3ª î²wy+™u‰ßÃMceå6 á¤n…]<ºlÎ`<ñÅÅ MÑzA;27þIŠ_Õq¤pó“U§*4ðËȧ[¼^¢EÔʬQ‚“Z«ÅKæpž³£ Ìï‘Y’LIht»¸f*Ñæ­K/˜ˆ(—Ô¡Ü`{WÇ^Az¢|®ÇâêóÞ9ÂùüIǵøô¦‚ºR®„l­æM&;ÿvHì®l!-î–‹+4_kìÌâ[<¶WïÀ ðúB¯p®¡üY¥3Ý‹²Î"ÜkN© õƒ‰ê!]½Å§†^,’%MS*XyÝâï¦"’THγ˜p%Lëœý(£ÚãùxŽ™ÜIË;pÌÃá[+w‰Hß,zBÓƒç(iè€ññ9©:B‘‡y¾ÃõÁø:¹º†TíVA¸…³ìô¾ •ÀˆÑÍÿŒcÚÙÎ-âôÕ›+›¯I;€\â³ ²ÉižTQÎñ„ý°Ø|§¸ñ $^!ïéÓ¶æM â×}­ª¿O»[ÐõÁ?dwÒù‰ ‘CÆ[ËÔ~í/ŒÓ¦wÀÑ~õª5´ð^MçÕ§«Ý¼lÏ,÷˜[¯»á×1é'¥e§nŒ^ÔøóKÇŸnîq¾i" ÒÑ©†Yâšê†èâM‰Ü„ yZñ 2æñŽ8™ì“’û,­òíDEê¬Ò#í¿;[Oÿóå<Ý#5™ÓAû6QŽ;:‚WŒƒË:XÛêØ&Ø É$iìãÀôHìè³wÉ~Ï|™ûš®ÔBœîPyÛð:"bĺà1¡vÀ+êWY оŽ,l9Å«Oã^Ì^¸ß; Y©\ ”Õað™ŽB—:užX?ZÓæÜäWÈ/¤EË^ò9lŒÇgëÜê ûêõ3NÊc‰‘C·¯] "dá E0$Ÿ4M•¥)¡Ï~ØYå–"´ÛþÐã²—ØŠC¼ù¹Ò²Ý(Šª;D`Ëoe³TkiÞï=÷ò¨1uã-—âÕv¯õèóÞkÛ³ç¡ö>EÉPv0"±L€’÷7'»Œh£|Â<ÂôÒ\iþµ;LÈ Ý‡ßg®g­ƒýcwÍµÞ _­å°ÞoÞà‘ûcé,äÕó×–<¬E[^gE‚?}²$f÷c‹ŠcزDŒUȈ]ˆ2רîž+[gDiw/&¾{Â…-¨ˆ´–w™ùríéÕÃÍñ[eKÝ£ÖOpÝÕÿˆšseײ36G¬Èü:t„l£üµtA© ©J^‹ä²Lê ä&)žŽÑ+™bŠœâG ¾jÓìF‰¾fj*±`têßLó8ÙNŒS0Ø`Ïþ’ü.‘ÏáDz.>¦%‘ó3H~§mþò¥9Ü\,-õDõAù²jëû¢æ"åVµ|ú“Ò¯ä²ÇÙZ-+ÙO$l7¼ò±Ç©’iBs•Í) ñ¼4æÚeÂ]òÔ22h¤ÚkáÖF÷‰!ŒyqpS™ò§ñg»ÞDt±Ðõëm×%ÎŒ‘×·Š×ˆ"rÀÂïeI²[£X±þ KÞ^ØÀ_ ’‰ýßtä,3üÕÒóRJâ\ÞþZƒÓ ðCùh¦ «yËvÌ™ÏÜ¡žF…è¿åáybLæ•}ÌjŒújGc«[§ }¡šÍ˹ÚÃAªmæž¶‰h4NÒÏÛÒEýÄdðÂ\ïÜuñ¸J§ï›âKqèFï“1ÙÑŽË„âÅPûô]åólÇխƨ-„…€œŽòN^޹…µWÓéégVº`)¼jLÖA¯@ud4NáIì„ÝÜd¹5ÅÖ\ƒF2éôÒÆ©7ñм<Ÿ©ËúnÜ`0^3úæ‰p§AKºfÕþ-a"BòÖÏ»ôìÆâ0|~P*ú|±ñ}ÞoTé`â2ó$Œc;¨#°Mˆ«ñe£¯¶ÆóJ™ñ¨!(@A%EŽ4ë2`á·ìNö÷bJø+0nlÞ•¥#B#Â3Â;?EŒôG^œ¾¼ED¯ebý-4iÚÅ-T¾Z&ç\ l áðæPJdÜSž U Ëb!MCù²I{œÌYÄÑc÷´ Ó Úûž4> Í [Õ4V 9Õ Ræ ®“¶ âpÓï5z^Úê±ÞÃņÓ*'7ÙGÇðD²%®0€üš)úFvÛ¬ñÉö[‚Œ(­tt™@ÈÑQÞ×ïA±…jtpd…N2äô?ÎB¹biIhѾ`·Ø}ªÐÄý' ·˜R0DÄ$ùm—tâK ÿ–ÿ'b"ŒÞÉ2Þ¬Mo|šÈ|ƒôM̰—±Ñ(¥³ˆß¿p¯ã£˜¹O\„ º“G'w¹O VÏ8Èd;»ÔÕv$ž–Ï1Y5ž²wnŠažß[`žÖ}(È’<m¢qÜRiN42¢á¸*²©±é¦“¬)Ø|¹B¿Œ( ûÔ&ÛmW²NŒ9•s1HU^ä&¸×^—0Ån+ø™ N«3ç$Cµ•—ëCÖ—*Ñó…AìaýñÆÝõöudõ#Z™r%,A¢ÏÊ êÓÖγ*åH©óÊ]Æ‹ìa)C±éŸpV´CÌ«—k‹`HŽ\³iQç“Ñ}8jˉ/NÝÛ# Q”RÒ¤Ë}66ïË7°š»¾zÃ`¨T5’Ì’•»žª¤R‡+øO°Þõ`ˆ½ÂÀ÷õ:°&~ê£ÑÁx ies #ÖÀèq¥éÇcÆ›õE˜¥*.c«F\‡Ø%¤tÛ¨Y!b²÷‘Úµh¼k±„Á€8vÞûy-ÝÛ~;5x†yŠ·çú^3WIý”?}.(/êÅÌ[P¾c¯-ó°`QgbM «ÁDNÜ2OwîTx®ÁXÕ Ihç+¼ivêý”{¤cðø¸ˆñ¢‰W¡k"ÉRwAFKQÝy¨ëYõäÅþŒš^´%wmƒ^Ç•¸'úÞúÃiRiºý|ã„C‘‰ŠKŠÞEÛµ?BpÔw`¥ô¿·¤ÄEgo…ÊŠJjz벺B{i¯ Ð]—¾ß;¡°k_7ϰŽÄûá<\ö™ŒLÞâfcزî‰öÛŒ® süFZcàájаj;[íTr¯è®M„m€' Õt?ݨGz~¦[)ˆ,îÈŽ»€¥ïŸ”„cö­ ¼½ »D^+ ÓK3ëÆáuÅrÒó•®é!‚‡uП!k}ùÁ>òN?壘“_ñ ›Î(ÂÿhÆÔ¤¨ ŸkEE¼îLˆÉ˜HG˜®¸upÕýÁBHYû•ÆÂ¡]夠wô"Ö¢žV*ï“öW×®PØ£Õ^ÿ{ò]ô*=J‘5L‹Ë¬°˜ŠrØLé;´zû¼€iïÕæwù¿tÓt÷ûîûçƒðг~4®wÂn’ë—ÍTâB™_дÖ<4¯T°…I„Ù¥öƒ“0·hDúC·9¾7‘Ç ‰g…ÆóK7 ,žeÉ@ë¿­7¨5×UT=>‡Ra×ÜN¯ ™*3YhPD—’45 ãú¾âŸ%vÂfö¤#;ævÞÞ10…UˆK—GÔœ–à!i<ðL¾ œßÊÄuݼD”N—7C ^#¹ú¦×ä'­*%ÝGEfÅÀèoz’ÍdŽ7{Ûÿ½â$ƒpìõ`W×ä:Ç“Ðnûô“ á»´z4çjï09a.Jؽ—Þbe8gvw¦¦Vä—çÂûüHâ{°Lë ©# ÖÑÄѳ-™ìïÇ„ÖÜ*ÎÏìW(zNò|1T{þ]äåãþ`Û¦µ¬ÇP}ü|•ÍfJ{*ÿó ~yÌ­P× Ÿ{Â;Ž Ž¹ßq!ïÐ/!mŠ—0ü ÎÔ¾ß7:Ãyx’kO(³C±»â‚~¦èb?ênýb6u3EÚ´¤B“A++!¾Éñ»+J©í™apVž¾nÞäpâS[)˜ìåOh/7i)o$Ü[ÚøP9,T$BÓOfêÙ¨OüAºå“¸j ³lº¡4`öWè ©{;/1ú Bè鎳í¶Oßž£òv½ý¡ @Ù¿A阂þ©IºíOš'<ÁcU)j§ðüÛÀ+ê1‰%ºì#ZÁͨÙ2Ȇ?ZÔuÓhiȸNûçæbHƒ1zÅImZ‰½ÆzE¤û/Ѽ¥lí/¸±2ä .Ÿ=5æ'«Aœ6)×ôáì‹Ø8¿E I¡!­÷Z“ήS óÑtƒ88 ã ¨æ’Ù”z¾ x§R¾^”’·iÇRÚŽz('7µ8Q¿ ñBD—ô±*Ú¿©ÿ>ÊHSLâ,|vÔù_¾ÂÝaÒµ.žc;€‚=À¤¯bM†ÕN ³õ¡f~Íôw­ð³?¶Ñ´È»h›ŒËE¢Îz÷ŽÙ·Ú‹±ÊMQDò®)—oå¼ÔGžWXéüµäáTBœÛüî–ìt6×éÌ °°,>™0¤ Rl2' Gý†ë=-\«!pVsÚ¤ ƒ†Ó¶\ó2ÓÕ’f$É…x÷øs PÊ·™ÉhÏÅ—Á-~Ì rް?3„2$¸y|îÔôà;ÄwÄ¡üVc"½müM ‘ QKFUB¤«žuœüκæ!u˜ /Jm~«+.™ú˜B€sç}áùrq?òg“°Ä¨L#ûGH‹Ù¡ ºÛØýõ­6A Ý: j©€X0ÑÊè…]Öxä…“¡_¹Ô?׽؜d‘›VøAºÍT0 ž¸ e’ýÍÓ‹Íw…Ò“#¸.y\lï¤!5ÉuźÊõ³7Ù£ÏK¶œM£Á‘Ž\x^÷﹦X%©L•ìI«žÜ͹š‡Ð*ò7…)o~ËIF¹õQÛrÊýh¼m8R¤^·¨1àð ºÖøãW4×]ôÅû­ïT ¹¦þ>øŽðÌ@¬^„/ÈQÞÌUàŸN{_ûã…f.‡¡Žúå–/{$ÅF« gE+Ÿ¾•o¼!HIæÂ¦…ú:šÏ³¶™BÛ|Ãò>!:X|yÒ¦}†›[›,¾\=Ôù š Á'gדςM{(°Ý1¢\†+òQ&py¤X,4”q[ÎrF ãK!A Kf¶4 Κ9‚ñd6ÏwįžŽQ¿û}4it ¶ëGuk¸ÃÖOsÓ–MT·Jïé¬6ãL9'I­˜J>¢oJfWªr$1\´».iÍ}רííû1­Y»&Fû¼õÁ_fëqÒ賤>$Þmt…A¼\¶¶_ždN*KÒ”SSöy—5ßxñ•އMö.ºŸš°¿;ÞÒÏó6»zŒ³jToãh× G÷hÁ'<³ßä:шú÷Gê°—ÔÇ*C(Ú¨NF¼+HK¡¹,&íÇéÏCÅþ»ôõ_Å,Œ<ùÓ´#øï`ª–.mˆÞn“™fKsVžŠÍ¶|‡•~g„Þ _€zÖÆUV—–’ØVdøY£? P*ˆ)?p•¼±e°EC7kÚ%~ãZw&Ð[Fâ‰Ñ½¾Éã‹26¢| %§W+=qJ)êM´9ÿ˜ÖéÈÆ<µÆÅãÏ<Ù0¾„ŸœƒF*K~?}â2âC/8ü9ÛvÆ3 %€ÈCMFIúÍ4¾ßiú¹PÇæ0È:)ý›ý±ò’oÞ»$æéA lÇcôš›'æ4 Oïô Õ…RêݵXŠÒ§Ø¢ ¤¨+†GÝp|.nUð%¶+,Å7ü‚GRE”ª\Õýsö“kk¥5—×t‚×W¹U{ÒîáüÆVdúào]tõ3Õ<+›L8šuÎ0$ñ*ô¹tqé‰áJ°1¼°9âûX¬§€µælþúšÛ8'¬ßV“û^«l58ç…\-€kE $Y²&_O/I© —òƒ¸§/-Tý®‰/"¸ôI™ÐŒz–޲ò=ãÀåQyCJa}£4º¤w“íôº0ÕŒs\@ñôA/n~âM©åB• }‘ø5œÃcùYØ °ÈðëåR'5}øÉ¬Ô–Baàò§§<+Å5àËûtÆ©qiŸ…Áz=4»<Ð÷=_K­¬^ˆwh‘© 7±´Ë“°¿Ý E‡x°=Q²î ±Áw»c#&Ÿå½¼—‚0S„¨ûµéTWˆgÀ ›¾õX°Ý(êûB¨4søšqž„¹ˆ%n=’:×BëžóæÄlTÖ)Ì’˜VV Áú¤}.®Ð¥Ù¸Ôdå@êbh¾6¡Öù\0¼XîÝ3ÓBëd[ÚÁw5» °] ÓÊx1Z‘GµÞ2ñO6G%#‹(xx½P@âM£Ð6£rOFÆ&iò÷ìšûVÃT{¨x9éloÐBC#3þ‹÷ÈM:~)g 4ÿ´~¸HÒ ¡™ö,·8j5ºB»éYqÜ/ñ”\ûTŸÂÜ/|j9ü·Y>vÇr·D¼ô”¹ÇòÂ@ÚéàÍ/¶Ü‰2ëÙh:©Æ«Ö<•·–˜ Ê>Ìa‚oétLJFÐ'üÞm0Cçö_—/h=½?^@-™ÊE˜.˜lŸg›-güúÁ±?LN1ª‰+ÎÍåt»[ó>k Ï@ØïÄöÛÕ¼bê¼ò敘Ú!Ûú¾¯Œ~eó‡%O”Ûâ=˜Ÿ Ë3Uµ6=¦ƒ~ÆWå N]z÷2ÿt§Êk>ÂÞòL„/oPJÂV¤6îÔÞÐ$Ec±qW¾BרլðÃØ¿Ò¼¢\31†õ™Ô£œçxeYŸEo3 Í#PA%˜´ Gô)“4”Û€úšXTÐbzížYf|Ô‡Ô9™G•HI7‚8‡"û‘ùÆ?ŸbëïéeòñX³_ròù à …L„ŽÍ ³d`‚í¾“SÁ_â§0aàò¡urE<$"Óü0ÊÜ»LåâØ|Yíp·Ìƒ!.¤ÊN’Šð6 {qöBNñèEï=¢¢Úý›q0Pá¡rvk…c¾2"¹R¾û}­ÆFfβ­®Þîÿ2ªž®~WŠTæ1ï ½ð9Þ‹_ ÙCì2}áÍ{&š5"¢¼YMôb¸>×ߤgžóß&pYÙ“d»JÞ«õÉž»Þs™„ ØŸ$pœææí¶~ð[ª¹aøt—¼;vœ°ñ øÙwt >;~sÏ©¸oÇÔh"{²Ë¥á¢{8wF³p)à‚¢XªÔâ@FØŸO:g\Û(uy~¼zï?Âx‰Ö./>>ô€ŸðÛQÌ×fÿ^1ml¢?‚¯Ý2  y'xyìØtOf„VÖ¦¹lZ'ÔùØ’C¢Ü՛¦'îÅ«8ˆ¦v«Õytø#¼æ§c®\>­ØvÏ}?ŠB” ý &1NCã•ý‚r>ÀÃ_ûÍ¿ *¥B… £r±(L¥‹ön¸‰:w©ûÊXSEÀ w[Òá¨ì8“3$Ü4=ô\™!­œwK±©•t«ÖÍW$ßFCi3¶ïÓýݲ)RåâÏHAOéÚeîÞqª;T»ej¤?V˜ÁœäÜìb•Áòs;üQó øPíàÙ\ø!ÛJî£B/wÓ§ÀÚw®ÐÛ3áÚ{qNꌾqünίw޼e1¾mÕôÄ/*6CkéцzCLçõ: œÜ¨R¡§Pþ,pˆÅÑ#r®òKÆ^†ÐÛ•N/O|?„‰&C?‡àï‡ïê?̸=×Ñ‚I¼Sr{ ƒP0ÑÆò=È¡êºz<úÏ+´˜¼ürŸC`•ëH~7ï6\E£ÛÈGÆ*…ôÉÜôåá5gú˜Ã¡Hã) ¼Q||©Zæ„Dü’Z°=^œ0>!úŠó´) ]RÉUPÈ2ÊV"õœg&fu`ÆU2“MSèÊ·Z´D›¥aó˜cO©¤ÃaÐâK]ê 3§üqißûq–ù—CÆ1°Ù‰FÞÊLö½™(À…ovÔ·Í]æP\âW×3¥tmÅþÞfy endstream endobj 184 0 obj << /Type /FontDescriptor /FontName /WOKQZU+CMTI10 /Flags 4 /FontBBox [-35 -250 1124 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 68 /XHeight 431 /CharSet (/F/J/Q/V/a/b/c/colon/comma/d/e/f/fi/five/four/g/h/i/j/k/l/m/n/nine/o/one/p/period/q/r/s/t/two/u/w/x/y/z/zero) /FontFile 183 0 R >> endobj 185 0 obj << /Length1 1480 /Length2 7122 /Length3 0 /Length 8120 /Filter /FlateDecode >> stream xÚ¶TZ6,Ò¥HHËÐ Ô 1tw§ ¥ 0Ä 0Cwˆ4JH ÒÒ)%tK ‚ Ý)È7ê½ï}ïûÿk}ßšµfÎÞûÙûœçìgŸ5¬ŒÚzÜ2V ¨"Žâòð‰ä4ôUD||ü<|| VV}Êú—›€õ1Ô CÀEÿ ç… Ð>y Ó@Àª® ?($ ‹òñ@||".¢yˆÌ  ÁPEÀ¡HV9„“§ ÌÆ…Þæï%€Ã’sýNÈ8B]`–8@‚²…:¢w´„8ô–0(Êó_%8ÄmQ('Q^^wwwˆ#’áb#ÉÉp‡¡lºP$ÔÅ jøE  q„þaÆCÀ з…!ÿøõÖ(wˆ €v8À,¡p$:Ãnu 7詨´œ ð?`õ?.À_wòÿSî¯ì_…`ðßÉKK„£î ƒÛ¬aP€–¢:ÊÅ€À­~!H:â9@,Ѐß'‡et4Á¿è!-]`N($æð‹"ï¯2è[V€[É!¡p’à×ùäa.PKôµ{òþé¬=á÷þ˰†Á­¬‘°ruâ5€Ãœ]¡*òAÐ.‚|6P@O@PK[Þ_åõ= ¿ƒÀ_n4_o'„ÀMê ³†¢¼‘7(åâ õõþïÀ¿- `³D, 608Á?ÕÑn¨õÝ|˜À„­= €ï×ç?+3´¼¬pÏà¿ûË«&#'£­ôèãÿÄdeon~A7H Àè…ï¿Ëüçþ&ÿÛ« ýu8¾*ªÀ­‘?З÷7·¿dÁñ×Èpþ½ƒ&­e(€ãé›ò òY¢¿€ÿÏð;åÿO÷¿ªüߤÿ¿Rtupøæøÿÿ„!Ž0Ï¿h)»¢Ðc¡@ü¡†Ð?£¬µ‚¹:þoTA‡ Ü-qn ŸÀ? ©ó€ZiÃP–¶„ôw+Ð{8ÀàPmöëÅAgññýO =u–öèW‰nØï=TÿÞWn‰°ú5} A!ÄÅâI€î?ÚxÑcjõø­o/B§Ð}Ö‚_m xU¹~[@´úx¡ÿ˜ ¯5ì¿¢h°í™Â^‡L  €ù_¹èRž¿ÍØÒÕÅ=οu…fó·ýûí€B= –3SK±»Ê¦órZwîoC âîÈc<ÃUj·u 9ñ‹#þœÈi™k‘K¤[ ‚›:{£û|öæ_|R"EïÏT7a[[¬pùŒJ\n!Õ]Akj­­ÆÏøáV6÷÷êu{Ý¥Ç9)¹œ¾M¦o(‰³Õ—ž½·ÝÃe¯Ýæ!º=‰K%,ÌOt;¤Y&½¹T¶Bf|¢E…y(=´O¯¸q‘ÒÕüÚ=[Ä…[N¡ÝÜ$vR;Nß”LþÞ.D£öl0κڮ@õã%GÐqSH ‡r@OŠY,CeuäPùp5ZE׊¨7$œ‚ý°Á ¸"YnúY§ø&ìE37= ´ÛO)Š9í^ Ž•ÈÖ7 ž&ó =Zj£ *Ïc\³ §Û½o¾õeÃﵜ*Ž”X Áƒ/[O¸zF'JÒÝCø›~,‡ÉƒYŒv– -–\*är|ªÛ‰XãÎ?9¹±ÚOW0µË ôÖ슒ÔJ lhËï̪î\‘º+¶4¿ªžh%±«óoÁé£dmXs­´V»ßP_¿#”Œ¡j§#wÃñ^+ß(ÇꚥªÃÅÚÝzÁ*0K§’¬rNËTÜÜ8FëmTHÑ·§Ñwò°*H`þÒx¨,÷®–n†*QùàµÖ£s¦ë¥Ðä±WoÛÜ´6¥)ù7éw;­TKKçv2<®0€…© æ=¾¥ Ÿ?ÉôªÝVš13+Zpçù¹&ÍõSev:Cx`2ÅÜg&š L™Êx +ko 9¦9 r"šÌ+žáЧ6L/=˜Úˆ¹_^-„ßÀÂ?<Ôæä\Û¯ªrf/îŠk¿·¶Uü`Ox‚U0N+ð{ña¨=ÅM´™ÆŠ¡o5°“Ì é¢rH×ååqÊ<°ey§ ‡ßtn™,° Œj0'¦{dzÓµ¿UxUBy°Ç¯nfòúËþFQñ])MÖˆ–,2OÛURù¡ÜE!lÕÅŸŸM„œI?–Ùåó’žãÖ(5¶Q¼ˆN!S¦¹mFÏãËVµE˰?{¢^=ß IŠÝ&^îÙÆO1å­™äpú€}Mí}‡ÑvÓdá¢otWê¸^tÅÓ-® 4VÙ„†:ñY¡:€äï+›¾‘ïM«Ïp«OÜ–—åaxoÚ¢«‘ªzïÁê×™‡4™ª¤Güâ…céÍKòÙæ9‰ÛrLO«YÌêýyT/úF9õbŠ9Qt.ã÷*ßÚ}Ñ ˜J·• ,‰é ›¸:"2ê-GZÉÖƒ£ÊRL¯´#×WbLG@XýWoOÏý;ô¼½}¿AC<,ÎÆôyžtkôgÕi½ôÊBŸ¤µð‡›C[ö´BYè F UÓÚ%Šýk׋ ‚ÞžWmgïņ؈+ߎ}0ðÒ™÷úi¨mm[}¢~8ÀiŠðÜÞÛeDâX‡ ”GÁ¤ÈØ==ûX9-.Áœ7ÒiàG³$$}f°ÍûOšxS=Εkp m‹öb!kuE 6æuWûò í"ëAvQ\3pQ‘÷"4’W}Ù®Lhx4Vƒ@.íeO#A ‰ ×6⤑ê™Z°0ÍʧŒ>¨}}Ñ÷•XðFJ»… „R•ÃîUwD"}Ë£èãFØW œóŸ-ňèZ·¦%5}H²¯S‰4‰ðNY^9Z»Nì`W+cYTf»9:+á£(N›òi‡É„õ E–Qqmcü¾µ=Ù÷ðûµ£tÝ Fiîjc R$6I݃ Oóªü”Ôc²K2RÔí³†Š€Yxƒt!»ÑWû$)Óí¥k½üÅw±¢3p6»…×j€.Š=tóoöêï|ó—bR ÑvÊ÷ aè«xÚû8ˆù;4â<".›éÚ¡Š#Ò‡ WO´æ†$Z±ˆÉ»›Úí½^r¨R^&íO75ªÝ¯ù*›G„ë6 òRåK¤íÛÒOì‡V˜û‰Zq;O´âú†}›’ víe#/{W”„4‹×6”A5Ê`„ÅKU®¾?U=Õ´E-'Cá~̼ÄKjÝ?k¢?³K‡?S¤M‹äÒ®Qìµâ5m{ho*@I¬à.ùÞï²W…Ci­“5´Á]2'íÀ–A¥xcÜÙ£ •|OË‹MÛÚ¿¯h²NãâY™ÝÏzQóí/Öq@KþÝ\ñ¶i“$¬öˆj^¸æ2±è¼ÒR<Ç©ÍìÂÒÞ>h­Ðäæ–c“,XÑ0¢ \Ï`˜¯æUVÊc$ú$w¼y+=Àúí ßM@£É°W?«ÎÊ1ÑìüÂyÃ.îÝÃæb}‹’÷&^š «ŒÚ#bŒh·?Q…•º0‚foX¼äVRo7´§HÂ|h†C¾î¹°x¿Û1ÁV§k?`öjئþìo^KrXɳës½Ø Á™¹6Á8®¶À3n)Ò®#Ú°+@úpYÝ·ÿbáë·YÞøŒôFdºZl1‰"ò™e+×®Þd˜~ÄLªÁr’Õ]Ý |CÓ%Ì¡T­ó<‹Â§#QõÈ”pì½Ç×w¸…»VIÅ\­*Ý^2é à§4]ÍêE5lÑ1Ñöòà‹7íùüòKÁ¹/ç—=§}<ó%¼ïÙGØS3÷9ö=¬½ ÷üFS¿³<`–¸¨:\{)@ˆ¦þhÏRXÖt#.C¡ÌíÅN}6°Îîàñ&3'&cøÕ`’gK@þ>7˜ë¸&w*<ðç£<óܑن»AåÝŸ/½×µY$SÛõQ¾~`»±‘½s»}”Ž/« B¤÷UœFo” "Ÿû/¢a¾¾&™^X%4ûŠžJVx¯[œ\EJ 2Þõ4M=ø°3ï£bJy|m•]e¨Yïq òt¨Î2÷¸õê-ѳtр曥£ûn ŸÁÐè̱ÐìaB<“ˆ'žZnæv.¢,ÜA¤ ³„šÁ*‚a7Qx¦ Øü¸r4­æÖ/em&bïß`õR±ES¾"%<Ü=ΗӪt×MQÅ¡\+—'»¾‘—¥mÓÕ™ÞòÓ‹c ^ÑÌm§D%nr 3×WS³)çp³Õ%¹«MNHîq¸Ö<•?ˆž•j\w=Æ0WMÂKÁŠª0mŒIóSþHf2U(•yGñL¡QçƒØ©5!ät}¥»"?J1¹ðÜÇ_ÿ&ÍœsÞU°°·_<ìFtàyà6OäT:戱ï(ä”BÚ“¸X§K,á·6 þQ2¥F àRÜ\æp´ù¡¾j¸ªcÊ¿¬5˜&fœJ¿êÓä—ü³=y1ƘƒG2áù½VùV]Ÿúöå ÌP­sKÑX¦cëEß7“Tœõ>¶.gv U§Ÿ‘¡‡25¸h‹·³*wTši„ 𭥨Qëxn¾3p·¢Ì[Ñé´4óÞ!|Õ8oÈåÎ©Éø>‚ÑcW’ ,ÃÅãçßM1”u cSÔ0òJ:ãõ›À´²rw7`çx`‚;ˆÊĸôsÀÌY“ÅülÙ$\ ;~ϸU,ÑÃb’gðú>NÃX¦§v:±–˜@'éˆG1…eÀã€-äÁÇéÊŽÊŠ:Œ³×ë™AŠrßsW÷tõ£=t³I¨ý\¯“¤©‚` 7vâþ²1·ÙCu/Œ„õðQ«ÅÝ©ÞS™ÞÁ<ç>·˜$ˆÛŸc”ÛË·iSžâÇä8Ž=”$°oÌ·{‘\’w¤Ë‚ú¹í,IìluiŒ-sã’ø‘&`í±VèUѵʃG¤IêaºÌCÙzÒÈç«WH=ùu™,,‹õº\Ƥl—œád´ûȿĕ‰hH ÅÔ_yé“Õ [Å;Ü”i±àÚyÌ„jž—ë9Ñž‰=ŒUÌ¢Ÿr–´ÉP®]‹Â·‡ÂÊšŸ†Itîy5•}{ÜS‹”ÛKßžï®÷/ØÊŒ»Ð5ì6¢`ˆy’šÑ\uŸ"܈¥2|! r*¬}JÚX=Ã^;}í¨Ëò~t\ó’füXЦuLqM¦ë9¡ûÔÑå«HTá(]N$^OŽäípG³Û#®³ ’Ëoå>]ÊïºÚ­kÂUæ¨æA‘¾FõåßRÃM¤¹.°.Š[“b1Lĵ Üí ô""'X=eV¥Ó÷‡ÇÞ×,g‘)XÞêòp[ØfýòHã®ìÎaÖÓB;OógFëwú:½qÒ L–pvŸj<x™[¨*Ϭ¤Gy“l%÷­ÃËf³ôž8=Aqø+…ЦÍíþ`_¸×²Û·vPγx×I¿Å6Èé\Ë~öÕãëEÙž²“@ª•§„‰ˆÀ‰±9ç"¢·ÕdÃì+¿™Tó|1ž¯‡ÁZ#1”ñf®‚UŒ7ù‹g¦…˜xîd 1Nßwµiƒª<ö‚xhàЦç“tr_5‚,º8‹ß¨æ/ó—«M~••0ÕG"¹º—Êzö´Cä”IFØøËû“fZXólrDzݕZüÔÌœãÐ{¹i4V}€s•Õ…7x“ Je'{âDØò'jUŠ?ò’ÑáÐuAýîý¨À;`ÉZw¦ÓyÈežÙ/ŸeE]ªÜïI{MÀÒ7­ô­8Ñ|VÜDÙD–î*:¹+À]ÕUðNÅ)·µ þ™’gbnÞá8RÁ"(,O VUjÀvߥâÀñI‚ù4bñdв}&tÀãŽpX*Ru!ZÙzh&Ãë8bÖ¶t#®¿S?P+ ` Æ~Ay¬ø0S$ =z¹Åýj‰`K Ÿõs‰ÎݤÏÒÝ-E(`¶úÐ0UËaMId&.”R§wº]y*p™úäÇ~q8’@7x2òci¢ùÁö²¢?‰µØkŒóøªu‘Oòg6…¬à¢ç¬”^íAÞeÏT€¯æý?YÒ-Ñ:Ê(WO2ØÚ«jÊ®X\4#ðÄHFNs‚×h;žR|âR¦Ku.ÎR¸d %‡Ù$›sZ`û]7ÓUZ ¨À†±2‚Ct+5Á¨?u¬¢¾mN—Ñ”î1ˆc0 yc·W‘–1»Þ›¥~ñ¡6”O<`R¨÷»5m;H¹¥K‡>™ò‰ÕG ‚ÃõX|Qn5+•%½ß;'ÏZŸ4œüÆêtI˜œQÛ-ª™æÚF˜l »¢ß¹ ¥½M$ºòzð{®éۅйEE2^̪ XÅ­•CPÅøgwxªFl~ô‘dð':÷}‹¼U¡n TÂl¨´¯&Æòååð}Ï”¦'¼ËëÔxRü"wŠ)xa„'W›‹ô€'5¦®õ;dµ 7^ôRjÇæÔEW^Ñ—PxÿQ”µTáMä˜äŠ$N¿ mˆS:ÝÞ¸¡ÓìSÿЬ%;÷IL\iAZÖ4g»Ü_û¼m*¸dòcˆ¥ë F7±i5ó—ŠêxžMK?uß\¿x¥øúYÒ½‡Ì… v`2—ºÙþ’#å¡Q®Cßâ‘E*Î2%ïú8Îß\1–žòa‹êqJD:KÅKzÝ)ï>›gp7¡ø¨Å»×Ô^»nk+s©;LX_Üé–߸ñBÆnÌä[äò£w|›q‘öjP¾7<;'‘$u6_CÅŒ*q¾4³ÚNYÊà{|nM ¸ îÖý7ŽÂzðççЪ§Ù‹ze‡ŒšÞ¼Ñýýœ©=÷ÐF QLGKEó<Ò[};º‡ENlŒ1ý\‹Ü©'váJŒ½Ñ’Øíc©™•U@‡ó,U`hüðküûR6¢˜5¶ëÌÙÊ ^KR}Ås6T½g2Œq°‹Ü¶‚ªMùc©Åcqë[^­ùKCv. Øcøº£¿ÜN”LŠçKÑ)Ra¨Óãü2íÀ<p7‘‰6ýÁ¥À×vLŸ³WƲºêÑM£r ªå@ØŠÕ.W¥À:wóú䞦u¢êWÖôH“ÇS‡ 6úÒ Ëß?½ÙL>x¼Ë²4Æ«YdV“«'öU;Fé:‚©ûÝ=¥qT¹ÃK†Ü Þ¨3‡<œÅŽë+ô<|P:¢GÄöQŠöJ…]®¥›6ööÃ…¨ÜÁ£€Ùà>Àñá­F®V.Ïô¡ÎWO”r˜ý8W Û#´tržÚk0àÔìI³6®˜q•µ´r÷ïètñ@x,W£Äê;` 1ø"xžCÍΗOkÇ Öºý 6âóô›Ø¯}˜‡2ƒ1|”Àö\5¥ïÖX\8ó_Fˆ#Á%­Süp¥mÁ£^Ƕ>Š}å»lÜ\xÉäkšÏ±µM#|"­‰³±]3gLüϰEµX[¦ÁъܬÕbk9YSvæËôg[ öœñpž§o©|PÝq“Îi!Iˆ¡ Ø'²<ÌöØS«óÂÑàÎ$9ÑÍ;‹K—T¦ø­Z±ãçf¢½Œa…ו¥0|Áwµ9ºÖ…¬+J%(–U9w”95Øp¤é'ùÁÔÕhÈ*Te~lÓº8¾³ÃÜ| ÞD ÆÖ­Rª‘mkrøa†Z£±Ï¥¾)žIUM„SÏ}³÷˜­9Ç8_Ù Ñ%³£WãÆÈƒ¥>©1¯Œ£‚²tõ‘WU§¦…Ž‘¤>žÏn]|¬ ™U»#j|'õšaäüeM!yYx¡Hp2›j‚Ñ ¾y`›ÓMÖ‹¸BlÏê—ÖܼÔuäû>K‹d·“U×·“‡0#î;¬{aåcÓ3/ÝLnM©c=Áà• S|ŽÛƒÚ Ï}to¼5ó™Yë¶Äœr>Äü*e:Q îz‘ª&ãŘWãν_tŸ@.øu ·ŒnF·XkTì‹õ>é­†hÝf'çÚ—IŠy}.•OLkŒ¾ÍÔëp]–Ì¿qx’ƒRÄBü]-R[mªŸÔW|Œjˆ-kk³Ô0&SÔ⇑<͸h­G¸H¼ñŠë*–Æã\;ðÑÉ­4äî‹ïc{ß èv{ÿÄ™…´\{vct™4ÿÅéý°¤×dÏËõTÌgì™ÌoMÌ&F±n@j¥ÄÉ;KÅ8ÜAy¡|Ìr.¾Ú_êG;.èmÖgÞ~xúÜLÞ^47%Ó#„Ð õ~²lo3ÀZœ¨p~“€?ÍÄGñà(×·d°eÇlEp0Ësoáê°;»×®gEJìCXå5¾@üüàË‘«¨‘FCº±Çjñéé ˆœ•tùgnʳtlà-vŽƒ/ªB=ΖY‹XÎ)…ËÝY¼­ÓcÚÏ8I6¯ïå"’¾5 ­_X"Õ"D.s‚Þ| Vw¬ '¹çYgq“•æèÉãÿ!ð<­+B¢;sµR—¬Ggò=‚v<‰fŸB*ƒò|[eø†C›&7Ûž[ô³úÄçÇ&˜N8;ðãoÛ$½À¬L³Oä^ú¡Íý¯±öå½ôcD`þâ>å š™¨ƒ¤ [füerµMM—<ëžAÊç%¨Dfwè'²‡në wö¹]t ­´Jœ9úO±=êDÌÁÜL«Œº[9°ù`؉3Þ’þ”H-Ý|M»ÿ@®ÍóƒH»ï4Æ’1?éÔfæêÌ,ÿÙÿmŒ‡+˜â€D:ü<ª¬ó’‘D?5¸ù“¡Rb6ápX3ÕsF=ì‰mÜ[óÇØÚX#VZçŸo9J§)Íhned{R%ÜleS´é»0Öäsü€Yò6ƒL¾Ï¾iúÌŽ8Sq¥©±O#z  6¨sºRB¾¡‚(bËÞ"‘k?YÏ ¼·QyŒuó­^=°ËÎG¾$‡+qÉopkÔ•K.#+fZAþœèöÉÛ,M?…8ÂùÉI‹ão»G¹ß‹3+UY.bÇœ<„}P4XØþò{ü¸é­Úo|\R5Ò¯„;ünÙ9_§ÙïV°¾âÆ;Y'Ï&ѵÊàL[­qxŽ43P ½#¹©ùò çnŠÄiB±CsÍñ½*¬ƒ¼Ì$¥àÈ*Ÿh)ö¨·Ó„1V¯§6m ×U—„Ù-HDB¡nj!‰õû$›îÕ”RòñüçÐY¡¡¹¢M¼V±Ý\ßòða‰\Ò–WêSN×wtl1.¾—dÐW‹ÑC ‰Fïá0Û¾y¬"éóÎ=º— &ŠGXa,}UŠ3ˆ?ñ†Èn# œ5áÒãØ‡ÙŸqÖ÷qg½C2‘ANôpW²@€Rsîa¡r©Oý=Üù"¾|ê¬,›BÈáJ±éËÓå¹aŽI–!Ó{Rl?œüs©;nÇê3(6 ’“vª%O™Æð “}Ù‚…qôœàŽ endstream endobj 186 0 obj << /Type /FontDescriptor /FontName /KACAPG+CMTI9 /Flags 4 /FontBBox [-35 -250 1148 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 70 /XHeight 431 /CharSet (/J/e/fi/h/l/s/y) /FontFile 185 0 R >> endobj 187 0 obj << /Length1 1911 /Length2 12079 /Length3 0 /Length 13273 /Filter /FlateDecode >> stream xÚ´TØ-Š“@pÖ¸»KpwK° 4Nãîîî’àî®ÁÝàî ¸>fîÜ;sïÿk½·z­îÞUuvÕ®Su(H”T„¬ @Ö`Ff^€¨¼š 3€™™‘™™‚BÍÌÁôo;Ž™5˜÷¢v  Ã›M èð(o È8ZXØ,œ¼,\¼ÌÌVffžZÛñÄ€NfFyF€Œ5d@!jmãjgfbêð–çßÔ†4.ú?„­@vf†@0@è` ²zËh´¨Zš\ÿ‹‚šßÔÁÁ†—‰ÉÙÙ™heÏhmg"@Cp6s0¨€ìAvN #À’ @+Ð_Ò(j¦föÿr¨Z;8í@€7ƒ¥™!lÿvÄl²¼e¨JËm@àËý+€ðWs,Œ,ÿ¡ûëôDfà? ­­l€`W3° ÀØÌP”ctpq ÁF-í­ß΀f–@ƒ·€?K$„•À7…é³7´3³q°g´7³üC#Ó4om‰Z[YÀöÔ'ff2|ë»+Ó_—k¶v»ÿ›ŒÿaähÃôlfë’û+æÍ„ð·Íäà`ffæfc€l CS¦?¨¹Ú€þt²üa~Óàéncm0~“ò43½ý ¸Û@;G§û?ÿXXFf†‰áoö73Èø_øíþíÌ\ÚÌoãÇ`þãóŸ:ofd ¶tý;üÏ+fR‘Ö ûKòœ""Ö.wv+€ƒ ÀÉà ðüo–ÿèÿ·ö?­J@³¿jûŸ4ØØÀó/ o½û· §¿æ‚ú¯¥¡üwë·i¨ÿþ¯Ì̆o_,ÿÏ+ðç‘ÿ¿Éÿƒåÿ:üÿ[‘„£¥åŸ~êüü@+3K׿"Þ¦ÙÑám3ä­ßöü¿¡ê ­³<ÈÈÌÑê½ÒÀ· ›Xþ§‘föf. #%3CÓ?'æß×ðÆni)YÛ›ýñÞX˜™ÿÇ÷¶r†ooŠýÛeýé½mÔgZý±z¬œ Ðùm¾X98î,o;jrùs´LŒ`k‡·#€7užck;„?®”‡ ÀüÃô'bg}CöoâÍì-þcäd3:üò¼Å -ì-ö¦[yL†ÿAÜoÈÚòMÔ¿-hc2úd0þßHÿÙL&ÿ€oüŠã ¹Ú˜‚þÉþf3ûä0™ÿ¾‰´ø|«Îòð­t«¿áÛB1ýƒùm…™¬ÿÎýûöÈÿÃýV¸Íßî·¼6oݳþ‡R–·âíþß*µÿûÀ[eÿÝH–7Ž¿»ý¶2L¦v ¿S¾M“ƒ³õ?¼q8þ}oü¾ìö†Övÿ,ô­rç¿!ë¯ëße¼uÄ d÷/Òÿš/CG;»·§÷Ï'àmøþÿ|çA !Ââ¼µ!_€yM@Û]•0¾3Ãîø§Š]õ÷E»ŽÈð‰4•~ëv7‰Cݨ+ÛâÔ×BKÄÏîÇÍuðÁ-ñÊ­Oz±*S»­?'±û'òŽ…kûß0¨ íy<Ûz|ñµ€n†ì¡È²uäFVÊÁ¸sî•t©í+Y šßUÞ«ä”E|*™fˆüñÕ·p–"ÛàÛ.)œá;Zôs”Ùë›ổWb™X:Ï“H¶|w­ Ö¨û9·Õ25VûN¼ÏØUÕ·¡­±9F^À¥3vv–ÌQl*èÕÝ ~bGg$ï ¯àê¾·¹s­y|-{|Z3¡í6¬m¼õa k¥QdUì9ØÖSŽàj»Ó#Ï<½˜¼Ú½Ç|âÄfÆeÏEõG©ø™#2|^b* *F^ZÅPìu5û×÷•<­ï¿vÑhá-I|^f´½Ø{a?ÍÕJá–}tsv&¨wµL˜(æ0@o$67Œ=ÕÂ*ƒBN £çÊÌ›*‘­æ½#’Y6ªšj•8“Þ¿íÒ+É~4B#3¡«y8þÔx p3«õ-èÝÔ˜¬N¦p&šɴ´Í¯UÓŸw—܉/>–¯=2N™)ØÍ~0w{ƒ±—„‚kjcaÜ¢ ]žA-ò44|Y)Ñ-h¢’*[\«:ï:£ä×ÔùŠ]–ÿéºdK{” '~Q§ŠÌ+eTk¦Kë§ë°Ë`eDMpõ€¯:¥˜vìÌ!D:%zýnË)Ak ’ç½g{ìzGÏðzÞœQïy<2kiDЏ~¼©{t×ï=4#ß8CëbÕ4‡½§Y‘Œ9*p²‚Äh·‹QccìÎ,ÖéÁ)TºŸyøO爩²ÝÔcb’ñ®PEfm¨JvÚ*ÃòFw…R}Å'|uÀ¨1çüÙJ¢÷ãê¯RÂouÉøKs©Cl1²^ÒØAù\BØj\Â+òŠJÈaŒ|Q«1RÃtfAÕßù~^™”8¬¾ifIpŸð›n\ÍBšÊñÁaÁëÉ­‘ÐULbø–øí²»À;^7ƒä1Š–ÅÄùvŸµ3›© +³‰­C¨tëk—Û2ÐíhŠ…à&´‘q#õü·o¸¸‹Ÿ&UË`ÉíGˆ„¡÷'°y;ëÖ9¸yC̃g–‘Ow£l>™Ò:Áa]®M5¼Q£;HÆóÙÅ+Gáñ»GEÆ&'6ÙüfÄŠDÔTîÅÑs5#ÈÎ¥/ª{ª t*n±×‹‘)ü­ZÖ‰ñÎ=O¢[‰r‘¹"ë™È–ØS ]ÿ®ä3­‚L8ÄãÅWªÄ˜ò dHE÷)‰”Ðàfºú ïãÝÇjFž’•ðì ]Ö—…a·ÕáܸtClâ`\}6]5d„L%'ÊUUÛ]Ge±:·**é%¢ù¢0º•ϧ‹­Iå³|pí-ÍhkšÒ{«‰Ÿyùhé,)r]T¨øl3V¨_^~µ•&ÏS ·£‡)c2màL²•üa´Í¾×wXm:¢\¬ÚÀoˆWÝ–DÇÛ¬?Û¹5^ÿõ ¯>‚j·[ÃT®ûƒšZ´t)X*d¹Óƒöc,î2ê¶'K}õf~Û7Åçfa@UDd²ŽLý ¦T“¥yï¦44ësÇTYӉ⬅>å {5®l/£è‰Ù˜,ON‡‹T†Ó–øÓ,»‹QÈntÖbËSXZ/ýÕ÷B£-K*ƒƒU[ú$©F€b|Õwßæ{ð­V¯ä%,¼­ãQã@õ¼|TûU—Éãá¬4#¼õ©mï$ôÍ–v”á¦ÍÝH=ËY§5Š,Ä uÒ/wá“öòÛ„ú‚´ßëG<ñP=Ð/3Ð!Ћt§— ©—X:œ2å!5ž~ ›Ç|ùíoÁñ騟2]3ûÄŒhÑùwЈNî· 'ÑÊp%Û¶LõZ䡾„ÿ– ¼"Igé‹[ö@O®8# w®p†ƒ>]ò¸õÑâQ»Šr$7Lý=ïr mŘÑþgÄxFiSÛØ…—"Zfè,Û3Ÿ–jŸJý¬ÏïûØú‰£7¸Pz}x´Ù<"Ï9옡7Ûôÿ|yüÉ ¿ž¨žB`+&×÷£-Ê}åT¿3~ÐÈ9ßc!IRæÕ©1ã@Šª]‹< t"õ§üxwdÞFTt¿êhHdÞ;~®u÷J9›5´žÛ/4è›Ã+lþ'©jÖyO¢`OvF­W»Á*÷V;œ®ÏZ¯<â%™ó³’›Ž±ìŸzõ4À—BP5Baƒ›P&SÇY"Òö Ô×úK_à‹_¿¬|(NQp„£ãy]BaçB w•D¡žê~Y_G*òEêî #-wÞB¶VìÖKð(3Ôz!pÉÛójÔò&^m¿ßæ‚\’vñ cöHDZ!_‡à5;eÌㄪ˜ˆÔYÂ`,Fò|~–8’©$E×¶ÑéF\‚¶7øÙ•5ÞWtôŠÛgb.Þ-{­].H°Öç*牗H6œ¯âú![ý•bT#!à†üg0/ŽÁÍv„®QšÈ8ѼŒ 5$§6ƒí);IF䔫&„>•|ý354bù»ÊÓayŒR%a²~ãX5Rc‚RAÐmò‹F!eœJ{¯øÀ1¢N«œÏQP/'̇ ASnÊQ,& ª±ÿMR< N sHý¹j£<_8´3¤Û–urNr¬FÏG_uþuó]³-.ÎýgòvöjdU]-`¿Xn—Þi<[ÍQùÀº™wõòÓ…'a½xÝHõ¶êðÈ3c|GeË ¢Ñ#v¸?Ùïai¸1¾V%ôCõÍØ*/‰O‰-ÒÐô ¤ƒ‚éßâ}o¶ D2'ÆŸ¸=V–%'¾¯­þúÊ×"õÜ¿ gȲ^éB¬1‡™ÅB"È»µ‰Öœ´‹Ší@FÔ³-HÑ@›3<¾ è=Q àtºvsÌ‹2ðÞ÷Þ̥ΰUßnÒ®sŸ Yúä=/z©YOí/‹ê‘ªìî®&ùY >M^wùõT/î/löYG"š⠺Τ„t…š…Ëyº¹‰Áw©x£wŒÔ¼][¿J3#&¡’)òll;J®°½ËtÝ\è—ÜuãÆ uìÒ·8­+ƒê›¯³×ʤâÕVDŸ'‰Š|“¶[¾:Ü÷䘮M"!ÖrvH>;ÊÈ©w}ž´×þ÷´áÈè%Fö9Øé¢ n† ­i…~’^cÞ?»›¾ƒG¬á„³F¥èaÛ:önTƒ¼»@uẒTv\:„g¨ÇõO2Dj—åñR!XÜEš›Øà&ŒÉ ÷§j_”¶»‡wß^§=•žNz±r e\j¹gT–7q¾ºë;®¾jc…à×^Q6³u…D?ru³û)È×½„O\¦>gI”[”Õ ÖÂ^¶+šw$ÿøX±¾´GW¯ú87i_,?÷%9œ¦ä.%éw×|‰Ì…æ—‹‘tN–®g8#29lA ùºAA Ò¾tƒÂQå.d‚_íÍÆ†“3™vu?*ùM,½"%ÇrhVÊN|òUݽÐ96B Éóу瘓²ßð{¼^Áê?bºÜj µøB°ê¸g²ãðœ>†êIÅn™8™°+t_Ù¡§(½ÞÌ…—>Áä£ ãæÊ`d7†ë‚dŒŸýc”øKf}jþâ.`a¦ó¶Nõ[ñ6UæG|7w¼æcƒúüC %ƒw^ý¾?˜³«»{î ÆÜð·¥gÊIÔü›ÂUJÈgèó‰üŠN˜²D òN¶|)ÅS฻jSžäß;¾Í8aOþ¹ÔKŸ±aV¬©¿ÞL ú©£Ii{%›GÛøÍ«¿Óm¥…ÍÕ÷óžè¤PP²fn~¦˜NËȺ•ã· qÎGOÅCu0x[t Ê‰Œ}¶wÊ;ëê aƒôy'¢©f‚š·W퉭–­Lñ É,€2ÆJŸ5É,h}9×(УsH`Éf¥žGv_/ºûµmè¿P•[Zä¦D«hŠÄ“Þ5%c 7r%/¥­{¢5ÇiŒìX„ì³=ePmÑ©‚<¸®½2]îx$Úãæá†ã‰˜Ž£¿R̶ߙB ð(8 áÆòøµ:šîÙíÈø8#jy4taÂ’‹jO™…-€Îý§Io!k6Úûù>²yǺIlj²ß¨ÃÿT%N‘Ù,ü~HãõŠI‘Qh Ý¦(ØsÑLJ•©â¼Þ< ^Α+Hú]}×Ço®Bšó,*AŠê«QØìý•½'kž»²0óG™#x(,36Çt6(µt[ŽX"¯ã‡8þCÖÇN.<aÏ@ßÌÔùr³ŠœûL¨TPú¼Ä³? ê:êb‹ˆZ ±.¸M"¤!ɯ%é_Gåõ]=% 2p†i ãV`×~'¥½rmÊ"’p‹ ÿˆ²„b\ùe}M4]?çâ„ Û *8ƬÅ_BØv)¯ûÝZjsþW¿Fˆ$‹¤ë5°ÑèC÷ž¹}ƒßJ²Ù)ÒÕ„™G °Ž”ˆå°àôk9h¼Lºáƒª=Úˆ´ZcÄܬÓ%ú"è >›ø½J«…“%¹G¹Ùí ³­Íùeˆ);ëm©åÚT'·‹ýô>ÿsPÈâ{´~ÑÀ(¨Øà6¥E°ô U%Ðå‹èC7íæöûlÈV¯pù]QÑ«œÐŠ„kæiR»4|ûôqUÑŠ=¨OÝӮõgguùI XÈ«8äÖäÑФ^°ç¤Ï X‚È2ÐexÎ(S¥£¡ɪ}&Që †´­"htEåX+ê`£ yÏ MÇT%èF¿r§´}CA=y -ë^ëUÌ‚¢ÌZÿi㬠h/œõSÉnÙ§ŸõÇc!ô™¨Ye)Û&C:PâÜ‚Ð)™?õ! Lú6p…(ûã[‡¬¬fÐE#ï©™´{…¶=øD Ö!t€vœÛs×HêMôPm¢áaŠØ7¡Ê'¡šúEûú2z"•D¦…³¶‡ÜHø†/'ð;h{;ääoË~í§t$ÈËâ%Ý ¬eÓ¥÷ÀSŸ¬›ðçL/Ùâºæ"=bUÚm ÑÎK©ŠQö Uæ­¥ç¿|í…_Ö1›W3 ÔÖ[ת×;1"¨È}IàÈ«,¢RàvF‘¡€§çuŠ@& €nš)ùUì½,pÁæ›Ðü¥_kõá¶z¼yùëW1©ý†™­}ïG-ð0aOQ:Û^whr”:¿Ú¤ÿ§õcVàù‰Ê}ãkfýËJÙle&ô– ¯¡y [Ÿ1+‚B\=/›¨h Ÿ"ê°)¿7ö`­° ϧŽÙ``Ü î ;æÃƒüHkXà ¥§ÜØñ[7n>ûræíÑ :ƽ@ƒ£"r‡›Ò–#ÆÏ¡ù™.é§J÷R~þt§“Û•¦uìQ·ù«`þÄ1ˆ‹¤ÁÉÜUžQ;¸5Üz_Ò ?‡†Ôár×ÃÉ’ùì/'õ$ÜîùéYÜÕmfèïh×ÞÄJy"qê´„Z¢CýéaŠßT}}Þ3×úÌ£qZüÆç;[àvUª9Æo<¹BýÞÍöc/2t¥Óâ4I‹VD»³ 6 ‡¥¬kõÕîÀWàÙ)ÆRK¾CüNAçÜ&Æl‹Îá1ÛæX7@{V¸­!&¢r–ëFB‚Ü¥G¯1'M<„Pwªu•70vJoλ' ¤Ÿ ’‚¯òGjh“Ôö3<íÅ¢Œ/Vêtiª£”FÇMK}=΋6ûD2’œuàÆë§í H#?z˜‡™Ò©ËÞ—¶tªpUºZ|2Š˜Ñ&‚ös@kq›rÞá›2…0ÌçIª<Ôø Ê}‚îþ-yî›f™ »–}ó9¹]ºCÚsðMͺe¸œú¨ò,Ò¶W'!Ç=#µô?;”ç·#êÔ{ÊÂK G2acJÅ0‰*qð"‘Yõ@ÕŽ†ŠD¥W5Ɉéíå"ñ¼G&ô s.v*¯Ù`{úòuX¿Èž©†Åê+IWôûUø`³Ã+£Š‰Q"ÙBYAÚ¢îư¹4\HSÉërë@Ebiš+´™ArÚíõ•uŸU½© ”Ž?fÏ`³VȈU…Ðlõ¥B5•l¶E(ôÛe=E³ŸŠ‘rA€s t8ÛÄjïgÁà o1…†×h‘2?÷BËNêøOt‹-,81#ÎÉ6Å-ªÏóѤŽñ^—ë ÓYÀŸ¿!®Fû´ËÃ÷ †”–!ø %b¾¯·w½?cjjEñnŸï¹Ü U7ðQš†Þ#&ñ62Î/ó’X—xdG¸ò~†<(æ9S‹çã¢F|–*Ú§ mŸ è¤=ª #×)Èáâ],ÅöLmø½…¶¯×óýòc¨Á¨­8ô> †úNï}ŠäﲚX9Wt—Ã;rÞõðý]æ3Ûü8ÆßBŸ_â)¿¹ª4óÒúç*BYò¬ái“ ÏÃDSíI)UÂ0%u¼ÎÔÆðë¥5ÜÒÌcg9š­Âã*=6ù‘ŸÿàÊ >;§2[„4‰ù.שчŒe&¿G—ÈNðóñ•€Ã'Ѽò9Oë*°ò¢TH féô aQ" YxŸ¢rØË>5;¡x8ß$¡Š š]«Æ »~‹kl¯[]Ì’È_uú¯B…@"}HM”Gä‚E©ØÝ~Ûs[ïÇ«vÝ7ck,ãkÖ•²âöœF¿ª(R÷Ùì‹>VwžÍp­ Hÿè°&¹ÝQQÁ¥ §ªÄ5šÄýÕ@ÑVMsÆà1€ô¬!Gk<’k›ÊïÆ‰GwÙBž€e6Ę@™TÐ% g¿':Õý «ì´W&ÓÝÐGÓ©caSú¼w^«Š®d u‘=C a¢øëNKª6—ªPá ø™7¶UryžP®ax¼Ùž7|—†œmt¥ËŠû…ÎÙxª¬Äù*4 L§d·ëàì·†µ; ù¥ùc¾ÖúÝol¯Ó†vFïiü—~úc‘Kt d†Ñw¸`,÷7Tdæ7ÖÖ­XeòÂXVÄDÁPr5yW)³ÀÉCË«*ë²æm:Ä¢|lAË<Ì->.ŽRžËLõî…P|´uLó2®[ó÷_Ü1ѳŽúüfÊãè&¦ó4w<«Øh¦_taôœNÅ­ kÆ'íûnÐ6çy éɼ÷ÅÉ{‡(/»ŒV‘©Ì~ÄO{¯Û†8b:Ô0PÜúÖ¨†ÝOÑ6ù´U}Æ(ß•$ÐI(dCÑ]>S5ðmì8ËólBlOÜ%§€¡0»¨FÖ#ä»ßyóë<²V[šv¾'Ovrr‡fÆ ,äa"‹[2¹{5¥‘½2©0ã™D¡ûê‡ÒÞ²2èÕFê(ôç2r/S+Y0J[¹ÿ!qùsñ½âr6P0oºø£švé´„†Þ¬Üë‘ð]¬¦†‚¥’Ì2­ÑË7oÿ*õ¤g Ðc¨ÎºƒÉîþä~³ÖÇ„‘N5aͽ㮊©B­I Õ2B­•âŸBÇ …ÉQñk1%mæ#i€—²±}[œ‹îä/#Eõ©M‘ò,tç7*‚×g…c­$ÍA-ûðA~9m ?~f§+]­berb#›Hÿöh§~­}¼$þãòY·óà¬â/…5öý÷Ä1{mùñpj:"-Ùu/b¿o¬PÊËN“/Üý‡½h I§ÌMÔI_Îk|dFá¬D³$¸®‰ju«¶AÍtuÁ¡Ï¬Wò—Ù«6`·o%Êà  9_cÑaÛ%d4]Q_:ÐG£µ¸'¯ì+m޾ƒ#·ƒqÜ×:TH† ôÈQaÆQ<£º.'.¥ =¹¨¯¥ïkÁ‚0gW«çýÖŽìåEÝà=òÝNµZ÷À}&P³¯{ÌYåwÌlü‚ü6Ï“-h¹3›\  %ißO —F“cä÷K½v”¨¥7îÎ êötƒã„‡^ÓÄpÊdQrYuo ƒšÄûáim"îe%•ט Éz“Û¸€=t*†ïê1ƒˆntó1?sþØ·êP«õò,±/i¹“ ‘¸õ–òHÜ~ ak°¯; UeM¼7ĤÍŽ€¥ÃºüÕ”¸A…¬…‰½ºË ×@4e’@z®›×]–PŹêä“;\)£NEš˜GL¦g楦.¿5ÿ~Ü­%í@@DñÉØ'«×Ä4mÒ`hC£„{%S{iðã~»ü[•*ÏpŽ­¹Ër|Žÿá ïhÀùNAxnøö½Tž4]ÊÇ´m1ö3‡ôm'YÐ) YÇ%ààmb#ðnâ^‚Ý$s¤‹~^ýøˆ•¹œ:ù| 8"¸rMÍkÙ‚ÉMÕïîa÷—§gÃÂÌŽwI1÷ A $©ÍrèËÆ’¾™Eåų.÷¦Q ?ûkxÞ¡¯K¬¹÷ÇO“ž$á\îgȰ¥ª°ÔF<û%ÍjÂyG˜ˆžTSÓ ϲßê,øn5ØÒýö– ¤¼¢Û Ѩøˆ†·IËGI\|²Âƒ›>º­å¤Œ·®<>Z5,H_þÓ»Çí]íëYò]lŸ¿Ùç'Žz:³æq0ïxë. ’Ùï˜Î\'u˜2>λynC¿›X ITn^0G¤­~l]L™šg„¶cÐ8·Ë٦䅳!è•g² üžu³†IÊ  [ßaÁJ:b Ö¤ÓÆÚ$Zññ¢Ì æË·!-¸·Á áùïÛ]…•º Æž uÄÚp`47˜<;ì¬ÂÇ ÷?zfÙä·÷[ݘ—•%ÎÙ½JM®«Ík§ÐÔ?À›ïðbþ‚ý¬Á[p{Û”¼vüqÞ<Š˜QeHU²!Ô pµî†—æ®OÈ»ûÈ$…ˆ%]«½AÀò}RH]"¿C ôÞ€¨3?Ò‹²S½Ø ×¥çÌöwíæ_!‘I$éIçÀíŠ:ñPøÓ¯® KNω ™®JÜ»¯/–éƒü]‘¹. *}ë_1Øë›d—)µ¸y5ç$K­ˆøVúÂÏŠ›¨X,ñÜk·kpgá°­6ÔÒÆ™!KÍèUO†6†Ñ”¥ò”Ûõ‡ â]¦T^»:Þ•kJTL¦­äj{=ß^ò³s?DÀÂÜ%°Ë <ÐYa‚:¡…¥I|Þ¯ÒOõþ¿ åI€¾ÛK³Ûy­¸S/ÀùIšÆ}„²,$¥W 7Ü“¬¸‡c:E(‹§SBV?‡À!¢5á©(3ùë£\|…¤ ûùõ’ñÄ `Òu,PÀWᆻ’˜ÂK™X0÷œÝ­ê5Öd@<‰¿ÄK{žÉX:‚×DÿY¼QüãT¤à;¨àX= ÐúE£, €?÷ˆï-@W7[XiÇ-GGàä–Ò ·Ê8èRUœS‘glïh à^I˜Ó̲0®f\'*±uœ6­O¾SäSsûÙƒ5½ýI&¿] 5 U¤mÏeÙ—¤[úaý1±¡Ð!#C>ŠyÏ]ÿ6ÀÖñWE@¼0”†ÙäÞ¨à°È6ŠÁ §Yûs )ÍYgo,ÖBE&÷‡IUÔGˆµ÷uÇü—íROxéa+";Ì~äâæ,ÃbðÒ^?ðXEíÛ812œGD²{¸bšïŠ *Ät$NÓi„Ö¾ÌÄ`$Jö«ˆß¨%,Ö¶&tç³;hÞÛ6ù@plØË9ó>‘•×$]œ=;(ÃBˆ2HbEëXncßSuW]’Ê ~rÄ[âôåÕ§ŸÅ@ÜàÃ8D[¯jÔÐA: I5»º-MxVvµ"òž¾ £i²w€ÛÌŒísä–ôsÝm:A‰ß-AhÎ,TX®%zf¥RÉýÞÁÖÖ°;]Ë9N¥ì©²2½²ŒÇù™Ýž’Pî@X¦3Oð[û ÷H0úkú¬@Læ÷Xm`qk%Kµ¼ÚC¸’sê:ÿ±ô™VÌ*äSfñÅð}ìÊ‚d ùañêP:õ%Ûžê<šB¥Ä 3 Ëò812…ÞΠ[ÎUÁó±ÛýšlH«`à‰6ì„:¸ò¤"Òt{UÌTµa¡†0+gÃ&s(jŽ.œùóKÂÑäÊ Iù nÛϸº4‹#MOHT# \¤ß¦Öµû-{gqëžôš®ö¾öÅÆJFs²ÐM‚¸¦½}?ú;Õbã¥$ñÌÏÌvÖuÕ™ÈwÔ(çMhÐè± A4Zû©(ñ„ˆX(&ދߕ˦.år»Ú­m÷¼3Px”¾÷9é‹¿ñ]ý¬Ï¿0ß÷Æ¡ …ŒðØ_5^oû’gü³g„\Á5·õ`NüŒf„¾¾™S4Ù;æ\&¼¿‘óÔxÅF—²*†ÚÛïŒvÓˆŠyÞ+&·ÿ³‡‹=É;!l³Ø+‰±ë(hºv÷é¢åï( C°<Š'þf,N^¹g™FõD±I*y¿JY T^h¸òèð˜M¨bSž^8ÜXÓ•ó×>>w‘Y—1ü”FᜅAjûŒ£Ï|GPTzD´¤Gi D`†Œ ê@qQ`ùªNÎu"¬âñÆH±=%ñÅ@ ¬üV/<í`¡â› *õ€Æw̧ˑLmþKVóÜEÝtîa™4ÓÈøù½^Êò¨Ð6ºyôÕ’½¦„ÞcL«z °J™Þ>Éb\v—šŠ×ìË8òžyæ«5øËø¡çó®’(¿é&–NŽß#Œ37³AO_w‰OëN®Z1±tØ;]E‹º i-HüK ]°~tª|Én:‰²z‡ÞxâÇl˜Ãkýd’1¯ÖKm÷Â~4è‹ >ì-{ØT[¢_Æ'Þ³H€9{ÊßE!C-h£Ùg ¶¨ÔØ0Ù|ùdmïݲfàX¤ôÉf;ÅÀ¦¥zï‘B‹‘ÿIˆFÞ™ò`éu 6ùáÖ?‚Õ‘ðÐð•Œé©®÷•Ö…¿ê´vóåi¢®wh.¼kèjqõ«k–õLÚ­k€AZEJ}Äð5ϺøÌ²qAÌȥá·BÈæ·àF¿ÙGûÙÚŸèAYD„¢²‡“ÖL_üÅþž`ûHªÒ¹=ã6¹XX•K±¯\7yÆÍÿ6º`iqä.¬»í»qH}¤§D)C­}†ïŠÆmó r:3Î\E›‘(øã±eçF!²M œÐPÙŸNÊ;™òL²2÷ôË„(jʉ_´r1YHYÌÈÙA”ÚÝÖ绘i•VA‘XˆY5*Ѱͤ°ë?ïÌ´¨ãöš%¨º‡Å¹ŠXÜFDoã´Ø®¬UËÌ%ÚèX”•å†V´Ñ>ÿVEñgïFóì€Òø¸£×›¿íxL2ÃJܹpry½—7×'éÄK§ö­=Õqwl"Œ@À@½×È\F !$µ…pæ;ž¾oŒî‡†—óƒïGvóÑ;‰ãËI=sŠ"›p/ˆHåñÀ™G‘¤ü“jX¬&UcWÓºƒdµ.ùêÛ)$H#wuJºö.ñë¹–‰ÌÁE†‘OÃi˜ íº´ü5#06l“Âð:a˜CÍñ¾/†'çÇ;‰b†åž¼;2:äcïᥑëµÔ¶ž³ ³ÅïÛYËV…Þ\ gÝa™Þ¾†àô5vJíDù•䡵MŽ_÷žÝFôädò—»\¤ÓÉÅò<ðq›n+Õ+ûµ˜Ô‚ÙNH_šHÉTz¢Ç—æïkŠyTBÉŠ qL‰,ìÆ|ö’‚Ö«YD 8|‰©ƒœðy’2Çd¶›‘áqg ¬!\~¿*<üò[…Mf áªéX>¹¸»^fíëëŽ!PèœëüNçlºv[+&‚!óûNÏŒvS½ ãz²’O/ʸ—¥¢^Þ(Ú*ãéú˜å‘P®ùÚI/†(Q¾mw¡-·ùô}¹ ññŸo”¯å Ž Û®©¤ë’Åâ}¬9¶,Jย,Êpà\±ø£îÉtuÚÑ7¸\ó ‚|ãmšxÀ»ñ-©*õœ$‰†LDÖ—dMªßßú  VÉSO¬á6°Âš1©9TáGÕdÈ„ÛkY× £®6fµFŸd“+ ŒëGTsIq>m¾T—SÁfœ¨ÅÍæVZŽÜKVÑjZ=È‹ë´ëtùëw“8q’Ñ`Š_’s&뙈‘k ¯7 Gµ–Ó‡qÄšºû¡¤¡BÐõÉl  ½ˆ2CáÆUÞTmû´w+ÍxÍ¿WdIiß‘ù3ˆ¸ÅŸ2‚xÒÑâ0'J—§Ñ„î=Bã¦ñBQiBÇ.§Ý;ÍEŒ •CÁæç°îÿ#ûê1 endstream endobj 188 0 obj << /Type /FontDescriptor /FontName /RBKAAX+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/a/asterisk/at/backslash/c/colon/d/e/f/g/h/hyphen/i/j/k/l/m/n/o/one/p/period/r/s/slash/t/three/two/u/underscore/w/y/zero) /FontFile 187 0 R >> endobj 100 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LIVWEX+CMBX10 /FontDescriptor 156 0 R /FirstChar 11 /LastChar 122 /Widths 145 0 R >> endobj 97 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LCHHCH+CMBX12 /FontDescriptor 158 0 R /FirstChar 12 /LastChar 122 /Widths 148 0 R >> endobj 94 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EUWOLL+CMBX9 /FontDescriptor 160 0 R /FirstChar 65 /LastChar 116 /Widths 151 0 R >> endobj 116 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VTYAIH+CMBXTI10 /FontDescriptor 162 0 R /FirstChar 11 /LastChar 120 /Widths 138 0 R >> endobj 101 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YJFJHR+CMMI10 /FontDescriptor 164 0 R /FirstChar 58 /LastChar 115 /Widths 144 0 R >> endobj 110 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CAFAUS+CMMI7 /FontDescriptor 166 0 R /FirstChar 108 /LastChar 114 /Widths 140 0 R >> endobj 96 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PXFSNJ+CMMI9 /FontDescriptor 168 0 R /FirstChar 107 /LastChar 107 /Widths 149 0 R >> endobj 99 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BMVMOK+CMR10 /FontDescriptor 170 0 R /FirstChar 11 /LastChar 122 /Widths 146 0 R >> endobj 92 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EBUEXZ+CMR12 /FontDescriptor 172 0 R /FirstChar 44 /LastChar 121 /Widths 153 0 R >> endobj 91 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ACFCCW+CMR17 /FontDescriptor 174 0 R /FirstChar 12 /LastChar 121 /Widths 154 0 R >> endobj 111 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SCKCTK+CMR7 /FontDescriptor 176 0 R /FirstChar 53 /LastChar 53 /Widths 139 0 R >> endobj 93 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JSLKNT+CMR9 /FontDescriptor 178 0 R /FirstChar 45 /LastChar 119 /Widths 152 0 R >> endobj 108 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IYMUOQ+CMSL10 /FontDescriptor 180 0 R /FirstChar 46 /LastChar 121 /Widths 142 0 R >> endobj 109 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LNUCPW+CMSY10 /FontDescriptor 182 0 R /FirstChar 0 /LastChar 15 /Widths 141 0 R >> endobj 98 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WOKQZU+CMTI10 /FontDescriptor 184 0 R /FirstChar 12 /LastChar 122 /Widths 147 0 R >> endobj 95 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KACAPG+CMTI9 /FontDescriptor 186 0 R /FirstChar 12 /LastChar 121 /Widths 150 0 R >> endobj 102 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RBKAAX+CMTT10 /FontDescriptor 188 0 R /FirstChar 42 /LastChar 121 /Widths 143 0 R >> endobj 103 0 obj << /Type /Pages /Count 6 /Parent 189 0 R /Kids [86 0 R 105 0 R 113 0 R 118 0 R 122 0 R 126 0 R] >> endobj 133 0 obj << /Type /Pages /Count 2 /Parent 189 0 R /Kids [130 0 R 135 0 R] >> endobj 189 0 obj << /Type /Pages /Count 8 /Kids [103 0 R 133 0 R] >> endobj 190 0 obj << /Type /Outlines /First 3 0 R /Last 83 0 R /Count 21 >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 190 0 R /Prev 79 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 190 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 190 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 190 0 R /Prev 27 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 27 0 R /Prev 63 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 27 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 27 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 27 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 27 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 27 0 R /Prev 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 27 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 27 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 27 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 190 0 R /Prev 7 0 R /Next 71 0 R /First 31 0 R /Last 67 0 R /Count 10 >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 7 0 R /Prev 19 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 7 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 190 0 R /Prev 3 0 R /Next 27 0 R /First 11 0 R /Last 23 0 R /Count 4 >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 190 0 R /Next 7 0 R >> endobj 191 0 obj << /Names [(Doc-Start) 90 0 R (page.1) 89 0 R (page.2) 107 0 R (page.3) 115 0 R (page.4) 120 0 R (page.5) 124 0 R] /Limits [(Doc-Start) (page.5)] >> endobj 192 0 obj << /Names [(page.6) 128 0 R (page.7) 132 0 R (page.8) 137 0 R (section.1) 2 0 R (section.2) 6 0 R (section.3) 26 0 R] /Limits [(page.6) (section.3)] >> endobj 193 0 obj << /Names [(section.4) 70 0 R (section.5) 74 0 R (section.6) 78 0 R (section.7) 82 0 R (subsection.2.1) 10 0 R (subsection.2.2) 14 0 R] /Limits [(section.4) (subsection.2.2)] >> endobj 194 0 obj << /Names [(subsection.2.3) 18 0 R (subsection.2.4) 22 0 R (subsection.3.1) 30 0 R (subsection.3.10) 66 0 R (subsection.3.2) 34 0 R (subsection.3.3) 38 0 R] /Limits [(subsection.2.3) (subsection.3.3)] >> endobj 195 0 obj << /Names [(subsection.3.4) 42 0 R (subsection.3.5) 46 0 R (subsection.3.6) 50 0 R (subsection.3.7) 54 0 R (subsection.3.8) 58 0 R (subsection.3.9) 62 0 R] /Limits [(subsection.3.4) (subsection.3.9)] >> endobj 196 0 obj << /Kids [191 0 R 192 0 R 193 0 R 194 0 R 195 0 R] /Limits [(Doc-Start) (subsection.3.9)] >> endobj 197 0 obj << /Dests 196 0 R >> endobj 198 0 obj << /Type /Catalog /Pages 189 0 R /Outlines 190 0 R /Names 197 0 R /PageMode/UseOutlines /OpenAction 85 0 R >> endobj 199 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() /CreationDate (D:20120229105849-05'00') /ModDate (D:20120229105849-05'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 200 0000000000 65535 f 0000000015 00000 n 0000004163 00000 n 0000236329 00000 n 0000000060 00000 n 0000000088 00000 n 0000004221 00000 n 0000236209 00000 n 0000000133 00000 n 0000000164 00000 n 0000004279 00000 n 0000236137 00000 n 0000000214 00000 n 0000000257 00000 n 0000008375 00000 n 0000236051 00000 n 0000000308 00000 n 0000000342 00000 n 0000008434 00000 n 0000235965 00000 n 0000000393 00000 n 0000000438 00000 n 0000008494 00000 n 0000235892 00000 n 0000000489 00000 n 0000000544 00000 n 0000010762 00000 n 0000235768 00000 n 0000000590 00000 n 0000000634 00000 n 0000010822 00000 n 0000235694 00000 n 0000000685 00000 n 0000000713 00000 n 0000012897 00000 n 0000235607 00000 n 0000000764 00000 n 0000000792 00000 n 0000012957 00000 n 0000235520 00000 n 0000000843 00000 n 0000000871 00000 n 0000014662 00000 n 0000235433 00000 n 0000000922 00000 n 0000000949 00000 n 0000014722 00000 n 0000235346 00000 n 0000001000 00000 n 0000001028 00000 n 0000016482 00000 n 0000235259 00000 n 0000001079 00000 n 0000001107 00000 n 0000016542 00000 n 0000235172 00000 n 0000001158 00000 n 0000001187 00000 n 0000016602 00000 n 0000235085 00000 n 0000001238 00000 n 0000001266 00000 n 0000018099 00000 n 0000234998 00000 n 0000001317 00000 n 0000001346 00000 n 0000018159 00000 n 0000234924 00000 n 0000001398 00000 n 0000001426 00000 n 0000020031 00000 n 0000234836 00000 n 0000001472 00000 n 0000001500 00000 n 0000020091 00000 n 0000234748 00000 n 0000001546 00000 n 0000001571 00000 n 0000020151 00000 n 0000234660 00000 n 0000001617 00000 n 0000001660 00000 n 0000020211 00000 n 0000234585 00000 n 0000001706 00000 n 0000001734 00000 n 0000003936 00000 n 0000004338 00000 n 0000001784 00000 n 0000004045 00000 n 0000004104 00000 n 0000233101 00000 n 0000232959 00000 n 0000233384 00000 n 0000232098 00000 n 0000233954 00000 n 0000232674 00000 n 0000231955 00000 n 0000233811 00000 n 0000232817 00000 n 0000231811 00000 n 0000232386 00000 n 0000234096 00000 n 0000234240 00000 n 0000008554 00000 n 0000008202 00000 n 0000004542 00000 n 0000008314 00000 n 0000233525 00000 n 0000233669 00000 n 0000232530 00000 n 0000233243 00000 n 0000010881 00000 n 0000010589 00000 n 0000008738 00000 n 0000010701 00000 n 0000232240 00000 n 0000013017 00000 n 0000012724 00000 n 0000011039 00000 n 0000012836 00000 n 0000014782 00000 n 0000014489 00000 n 0000013150 00000 n 0000014601 00000 n 0000016662 00000 n 0000016309 00000 n 0000014915 00000 n 0000016421 00000 n 0000018219 00000 n 0000017926 00000 n 0000016795 00000 n 0000018038 00000 n 0000234356 00000 n 0000020271 00000 n 0000019858 00000 n 0000018352 00000 n 0000019970 00000 n 0000020417 00000 n 0000021082 00000 n 0000021107 00000 n 0000021169 00000 n 0000021275 00000 n 0000021703 00000 n 0000022042 00000 n 0000022395 00000 n 0000023034 00000 n 0000023657 00000 n 0000024320 00000 n 0000024961 00000 n 0000024986 00000 n 0000025637 00000 n 0000025966 00000 n 0000026410 00000 n 0000026840 00000 n 0000027515 00000 n 0000042328 00000 n 0000042621 00000 n 0000056788 00000 n 0000057133 00000 n 0000065130 00000 n 0000065362 00000 n 0000078322 00000 n 0000078618 00000 n 0000087423 00000 n 0000087678 00000 n 0000094932 00000 n 0000095154 00000 n 0000102325 00000 n 0000102546 00000 n 0000127644 00000 n 0000128174 00000 n 0000139667 00000 n 0000139952 00000 n 0000150550 00000 n 0000150816 00000 n 0000157889 00000 n 0000158110 00000 n 0000169958 00000 n 0000170233 00000 n 0000185176 00000 n 0000185492 00000 n 0000193035 00000 n 0000193294 00000 n 0000209279 00000 n 0000209607 00000 n 0000217847 00000 n 0000218081 00000 n 0000231475 00000 n 0000234441 00000 n 0000234510 00000 n 0000236400 00000 n 0000236566 00000 n 0000236735 00000 n 0000236930 00000 n 0000237151 00000 n 0000237371 00000 n 0000237481 00000 n 0000237519 00000 n 0000237646 00000 n trailer << /Size 200 /Root 198 0 R /Info 199 0 R /ID [<55A491BB4D7B80BAD47A9689EA742226> <55A491BB4D7B80BAD47A9689EA742226>] >> startxref 237972 %%EOF jellyfish-1.1.11/doc/jellyfish.man0000644015303500042660000003471712151455365013774 00000000000000'\" t .\" Manual page created with latex2man on Wed Feb 29 10:58:48 EST 2012 .\" NOTE: This file is generated, DO NOT EDIT. .de Vb .ft CW .nf .. .de Ve .ft R .fi .. .TH "JELLYFISH" "1" "2010/10/1" "k\-mer counter " "k\-mer counter " .SH NAME .PP Jellyfish is a software to count k\-mers in DNA sequences. .PP .SH SYNOPSIS jellyfish count [\fB\-o\fP\fIprefix\fP] [\fB\-m\fP\fImerlength\fP] [\fB\-t\fP\fIthreads\fP] [\fB\-s\fP\fIhashsize\fP] [\fB--both\-strands\fP] \fIfasta\fP [\fIfasta \&... \fP] .br jellyfish merge \fIhash1\fP \fIhash2\fP \&... .br jellyfish dump \fIhash\fP .br jellyfish stats \fIhash\fP .br jellyfish histo [\fB\-h\fP\fIhigh\fP] [\fB\-l\fP\fIlow\fP] [\fB\-i\fP\fIincrement\fP] \fIhash\fP .br jellyfish query \fIhash\fP .br jellyfish cite .br .PP Plus equivalent version for Quake mode: qhisto, qdump and qmerge\&. .PP .SH DESCRIPTION .PP Jellyfish is a k\-mer counter based on a multi\-threaded hash table implementation. .PP .SS COUNTING AND MERGING .PP To count k\-mers, use a command like: .PP .Vb jellyfish count \-m 22 \-o output \-c 3 \-s 10000000 \-t 32 input.fasta .Ve .PP This will count the the 22\-mers in input.fasta with 32 threads. The counter field in the hash uses only 3 bits and the hash has at least 10 million entries. .PP The output files will be named output_0, output_1, etc. (the prefix is specified with the \fB\-o\fP switch). If the hash is large enough (has specified by the \fB\-s\fP switch) to fit all the k\-mers, there will be only one output file named output_0. If the hash filled up before all the mers were read, the hash is dumped to disk, zeroed out and reading in mers resumes. Multiple intermediary files will be present on the disks, named output_0, output_1, etc. .PP To obtain correct results from the other sub\-commands (such as histo, stats, etc.), the multiple output files, if any, need to be merged into one with the merge command. For example with the following command: .PP .Vb jellyfish merge \-o output.jf output\\_* .Ve .PP Should you get many intermediary output files (say hundreds), the size of the hash table is too small. Rerunning Jellyfish with a larger size (option \fB\-s\fP) is probably faster than merging all the intermediary files. .PP .SS ORIENTATION When the orientation of the sequences in the input fasta file is not known, e.g. in sequencing reads, using \fB--both\-strands\fP (\fB\-C\fP) makes the most sense. .PP For any k\-mer m, its canonical representation is m itself or its reverse\-complement, whichever comes first lexicographically. With the option \fB\-C\fP, only the canonical representation of the mers are stored in the hash and the count value is the number of occurrences of both the mer and its reverse\-complement. .PP .SS CHOOSING THE HASH SIZE .PP To achieve the best performance, a minimum number of intermediary files should be written to disk. So the parameter \fB\-s\fP should be chosen to fit as many k\-mers as possible (ideally all of them) while still fitting in memory. .PP We consider to examples: counting mers in sequencing reads and in a finished genome. .PP First, suppose we count k\-mers in short sequencing reads: there are n reads and there is an average of 1 error per reads where each error generates k unique mers. If the genome size is G, the size of the hash (option \fB\-s\fP) to fit all k\-mers at once is estimated to: $(G + k*n)/0.8$. The division by 0.8 compensates for the maximum usage of approximately $80%$ of the hash table. .PP On the other hand, when counting k\-mers in an assembled sequence of length G, setting \fB\-s\fP to G is appropriate. .PP As a matter of convenience, Jellyfish understands ISO suffixes for the size of the hash. Hence \&'\-s 10M\&' stands 10 million entries while \&'\-s 50G\&' stands for 50 billion entries. .PP The actual memory usage of the hash table can be computed as follow. The actual size of the hash will be rounded up to the next power of 2: s=2^l\&. The parameter r is such that the maximum reprobe value (\fB\-p\fP) plus one is less than 2^r\&. Then the memory usage per entry in the hash is (in bits, not bytes) 2k\-l+r+1\&. The total memory usage of the hash table in bytes is: 2^l*(2k\-l+r+1)/8\&. .PP .SS CHOOSING THE COUNTING FIELD SIZE To save space, the hash table supports variable length counter, i.e. a k\-mer occurring only a few times will use a small counter, a k\-mer occurring many times will used multiple entries in the hash. .PP Important: the size of the couting field does NOT change the result, it only impacts the amount of memory used. In particular, there is no maximum value in the hash. Even if the counting field uses 5 bits, a k\-mer occuring 2 million times will have a value reported of 2 million (i.e., it is not capped at 2^5). .PP The \fB\-c\fP specify the length (in bits) of the counting field. The trade off is as follows: a low value will save space per entry in the hash but can potentially increase the number of entries used, hence maybe requiring a larger hash. .PP In practice, use a value for \fB\-c\fP so that most of you k\-mers require only 1 entry. For example, to count k\-mers in a genome, where most of the sequence is unique, use \fB\-c\fP\fI1\fP or \fB\-c\fP\fI2\fP\&. For sequencing reads, use a value for \fB\-c\fP large enough to counts up to twice the coverage. For example, if the coverage is 10X, choose a counter length of 5 (\fB\-c\fP\fI5\fP) as $2^5 > 20$. .PP .SH SUBCOMMANDS AND OPTIONS .SS COUNT Usage: jellyfish count [options] file:path+ .PP Count k\-mers or qmers in fasta or fastq files .PP Options (default value in (), *required): .TP \fB\-m\fP, \fB--mer\-len\fP\fI=uint32\fP *Length of mer .TP \fB\-s\fP, \fB--size\fP\fI=uint64\fP *Hash size .TP \fB\-t\fP, \fB--threads\fP\fI=uint32\fP Number of threads (1) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output prefix (mer_counts) .TP \fB\-c\fP, \fB--counter\-len\fP\fI=Length\fP in bits Length of counting field (7) .TP \fB--out\-counter\-len\fP\fI=Length\fP in bytes Length of counter field in output (4) .TP \fB\-C\fP,\fB--both\-strands\fP Count both strand, canonical representation (false) .TP \fB\-p\fP, \fB--reprobes\fP\fI=uint32\fP Maximum number of reprobes (62) .TP \fB\-r\fP,\fB--raw\fP Write raw database (false) .TP \fB\-q\fP,\fB--quake\fP Quake compatibility mode (false) .TP \fB--quality\-start\fP\fI=uint32\fP Starting ASCII for quality values (64) .TP \fB--min\-quality\fP\fI=uint32\fP Minimum quality. A base with lesser quality becomes an N (0) .TP \fB\-L\fP, \fB--lower\-count\fP\fI=uint64\fP Don\&'t output k\-mer with count < lower\-count .TP \fB\-U\fP, \fB--upper\-count\fP\fI=uint64\fP Don\&'t output k\-mer with count > upper\-count .TP \fB--matrix\fP\fI=Matrix\fP file Hash function binary matrix .TP \fB--timing\fP\fI=Timing\fP file Print timing information .TP \fB--stats\fP\fI=Stats\fP file Print stats .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB--full\-help\fP Detailed help .TP \fB\-V\fP,\fB--version\fP Version .PP .SS STATS Usage: jellyfish stats [options] db:path .PP Statistics .PP Display some statistics about the k\-mers in the hash: .PP Unique: Number of k\-mers which occur only once. Distinct: Number of k\-mers, not counting multiplicity. Total: Number of k\-mers, including multiplicity. Max_count: Maximum number of occurrence of a k\-mer. .PP Options (default value in (), *required): .TP \fB\-L\fP, \fB--lower\-count\fP\fI=uint64\fP Don\&'t consider k\-mer with count < lower\-count .TP \fB\-U\fP, \fB--upper\-count\fP\fI=uint64\fP Don\&'t consider k\-mer with count > upper\-count .TP \fB\-v\fP,\fB--verbose\fP Verbose (false) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB--full\-help\fP Detailed help .TP \fB\-V\fP,\fB--version\fP Version .PP .SS HISTO Usage: jellyfish histo [options] db:path .PP Create an histogram of k\-mer occurrences .PP Create an histogram with the number of k\-mers having a given count. In bucket \&'i\&' are tallied the k\-mers which have a count \&'c\&' satisfying \&'low+i*inc <= c < low+(i+1)*inc\&'\&. Buckets in the output are labeled by the low end point (low+i*inc). .PP The last bucket in the output behaves as a catchall: it tallies all k\-mers with a count greater or equal to the low end point of this bucket. .PP Options (default value in (), *required): .TP \fB\-l\fP, \fB--low\fP\fI=uint64\fP Low count value of histogram (1) .TP \fB\-h\fP, \fB--high\fP\fI=uint64\fP High count value of histogram (10000) .TP \fB\-i\fP, \fB--increment\fP\fI=uint64\fP Increment value for buckets (1) .TP \fB\-t\fP, \fB--threads\fP\fI=uint32\fP Number of threads (1) .TP \fB\-f\fP,\fB--full\fP Full histo. Don\&'t skip count 0. (false) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file .TP \fB\-v\fP,\fB--verbose\fP Output information (false) .TP \fB--usage\fP Usage .TP \fB--help\fP This message .TP \fB--full\-help\fP Detailed help .TP \fB\-V\fP,\fB--version\fP Version .PP .SS DUMP Usage: jellyfish dump [options] db:path .PP Dump k\-mer counts .PP By default, dump in a fasta format where the header is the count and the sequence is the sequence of the k\-mer. The column format is a 2 column output: k\-mer count. .PP Options (default value in (), *required): .TP \fB\-c\fP,\fB--column\fP Column format (false) .TP \fB\-t\fP,\fB--tab\fP Tab separator (false) .TP \fB\-L\fP, \fB--lower\-count\fP\fI=uint64\fP Don\&'t output k\-mer with count < lower\-count .TP \fB\-U\fP, \fB--upper\-count\fP\fI=uint64\fP Don\&'t output k\-mer with count > upper\-count .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SS MERGE Usage: jellyfish merge [options] input:string+ .PP Merge jellyfish databases .PP Options (default value in (), *required): .TP \fB\-s\fP, \fB--buffer\-size\fP\fI=Buffer\fP length Length in bytes of input buffer (10000000) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file (mer_counts_merged.jf) .TP \fB--out\-counter\-len\fP\fI=uint32\fP Length (in bytes) of counting field in output (4) .TP \fB--out\-buffer\-size\fP\fI=uint64\fP Size of output buffer per thread (10000000) .TP \fB\-v\fP,\fB--verbose\fP Be verbose (false) .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SS QUERY Usage: jellyfish query [options] db:path .PP Query from a compacted database .PP Query a hash. It reads k\-mers from the standard input and write the counts on the standard output. .PP Options (default value in (), *required): .TP \fB\-C\fP,\fB--both\-strands\fP Both strands (false) .TP \fB\-c\fP,\fB--cary\-bit\fP Value field as the cary bit information (false) .TP \fB\-i\fP, \fB--input\fP\fI=file\fP Input file .TP \fB\-o\fP, \fB--output\fP\fI=file\fP Output file .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SS QHISTO Usage: jellyfish qhisto [options] db:string .PP Create an histogram of k\-mer occurences .PP Options (default value in (), *required): .TP \fB\-l\fP, \fB--low\fP\fI=double\fP Low count value of histogram (0.0) .TP \fB\-h\fP, \fB--high\fP\fI=double\fP High count value of histogram (10000.0) .TP \fB\-i\fP, \fB--increment\fP\fI=double\fP Increment value for buckets (1.0) .TP \fB\-f\fP,\fB--full\fP Full histo. Don\&'t skip count 0. (false) .TP \fB--usage\fP Usage .TP \fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SS QDUMP Usage: jellyfish qdump [options] db:path .PP Dump k\-mer from a qmer database .PP By default, dump in a fasta format where the header is the count and the sequence is the sequence of the k\-mer. The column format is a 2 column output: k\-mer count. .PP Options (default value in (), *required): .TP \fB\-c\fP,\fB--column\fP Column format (false) .TP \fB\-t\fP,\fB--tab\fP Tab separator (false) .TP \fB\-L\fP, \fB--lower\-count\fP\fI=double\fP Don\&'t output k\-mer with count < lower\-count .TP \fB\-U\fP, \fB--upper\-count\fP\fI=double\fP Don\&'t output k\-mer with count > upper\-count .TP \fB\-v\fP,\fB--verbose\fP Be verbose (false) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SS QMERGE Usage: jellyfish merge [options] db:string+ .PP Merge quake databases .PP Options (default value in (), *required): .TP \fB\-s\fP, \fB--size\fP\fI=uint64\fP *Merged hash table size .TP \fB\-m\fP, \fB--mer\-len\fP\fI=uint32\fP *Mer length .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file (merged.jf) .TP \fB\-p\fP, \fB--reprobes\fP\fI=uint32\fP Maximum number of reprobes (62) .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB--full\-help\fP Detailed help .TP \fB\-V\fP,\fB--version\fP Version .PP .SS CITE Usage: jellyfish cite [options] .PP How to cite Jellyfish\&'s paper .PP Citation of paper .PP Options (default value in (), *required): .TP \fB\-b\fP,\fB--bibtex\fP Bibtex format (false) .TP \fB\-o\fP, \fB--output\fP\fI=string\fP Output file .TP \fB--usage\fP Usage .TP \fB\-h\fP,\fB--help\fP This message .TP \fB\-V\fP,\fB--version\fP Version .PP .SH VERSION .PP Version: 1.1.4 of 2010/10/1 .PP .SH BUGS .PP .TP .B * jellyfish merge has not been parallelized and is relatively slow. .TP .B * The hash table does not grow in memory automatically and jellyfish merge is not called automatically on the intermediary files (if any). .PP .SH COPYRIGHT & LICENSE .TP Copyright (C)2010, Guillaume Marcais \fBguillaume@marcais.net\fP and Carl Kingsford \fBcarlk@umiacs.umd.edu\fP\&. .PP .TP License 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 3 of the License, or (at your option) any later version. .br 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. .br You should have received a copy of the GNU General Public License along with this program. If not, see \fBhttp://www.gnu.org/licenses/\fP\&. .PP .SH AUTHORS Guillaume Marcais .br University of Maryland .br \fBgmarcais@umd.edu\fP .PP Carl Kingsford .br University of Maryland .br \fBcarlk@umiacs.umd.edu\fP .PP .\" NOTE: This file is generated, DO NOT EDIT. jellyfish-1.1.11/ltmain.sh0000644015303500042660000105152212200542300012330 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2